From 2edfb212a8b37de8765775576ac3d0c02b2f0a4c Mon Sep 17 00:00:00 2001 From: aheadfrogg Date: Sun, 15 Dec 2024 02:36:34 +0000 Subject: [PATCH] =?UTF-8?q?Deploy=20preview=20for=20PR=205723=20?= =?UTF-8?q?=F0=9F=9B=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/preview/pr-5723/assets | 1 + docs/preview/pr-5723/index.html | 64723 ++++++++++++++++++ docs/preview/pr-5723/libs | 1 + docs/preview/pr-5723/package.json | 106 + docs/preview/pr-5723/scripts/modules.min.js | 3238 + docs/preview/pr-5723/scripts/script.min.js | 49480 +++++++++++++ docs/preview/pr-5723/styles/styles.min.css | 1 + 7 files changed, 117550 insertions(+) create mode 120000 docs/preview/pr-5723/assets create mode 100644 docs/preview/pr-5723/index.html create mode 120000 docs/preview/pr-5723/libs create mode 100644 docs/preview/pr-5723/package.json create mode 100644 docs/preview/pr-5723/scripts/modules.min.js create mode 100644 docs/preview/pr-5723/scripts/script.min.js create mode 100644 docs/preview/pr-5723/styles/styles.min.css diff --git a/docs/preview/pr-5723/assets b/docs/preview/pr-5723/assets new file mode 120000 index 00000000000..41aef43f182 --- /dev/null +++ b/docs/preview/pr-5723/assets @@ -0,0 +1 @@ +../../assets \ No newline at end of file diff --git a/docs/preview/pr-5723/index.html b/docs/preview/pr-5723/index.html new file mode 100644 index 00000000000..025a66b2002 --- /dev/null +++ b/docs/preview/pr-5723/index.html @@ -0,0 +1,64723 @@ + + + + PokéClicker + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + + +
+
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+
+
+
+
+
+ +
+
+
+
+ +
+
+ Loading... +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

PokéClicker

+
+
+ + + +
+
+
+
+ + +
+
+ Poké Balls +
+ + + + +
+
+
+ + + + + + + + + + + + + + + +
NameBallQty
+ + + +
+
+ + +
+
+ +
+ + + +
+
+
+ Battle Items +
+ +
+

+ Battle Items are disabled. +

+ + + + + + + + + + + + + + + +
+ + +
+ + + +
+
+
+ +
+
+ Flutes + +
+ +
+ + + + + + + + + + + + + + + +
+
+ +
+ + + + +
+
+
+ +
+
+ Z-Crystals +
+
+

+ Z-Moves are disabled. +

+ + + + + + + + + + + + + + + + + + +
+ +
+ + +

bonus

+
+ 00:00 left +
+
+
+
+ + + + +
+
+ Pokémon List +
+
+
+
+
+ + + + + + + + + + + + + + + + + + +
+
+
+ Name +
+
Attack
+
Level
+
+
+ + +
+
+ Name + + + + + + +
+
+
+
+
+
+ + +
+
+
+ +
+
+
+ + +
+
+ +
+
+ Achievement Tracker +
+ +
+ +
+ Select an achievement to track! +
+ + + + + + + + + + + + +
+ Achievement Description +
+
+
+ 0 / 1000 +
+
+
+ +
+
+ + + +
+
+ Currency +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+ +
+
+
+ +
+
+ + + +
+ + +
+
+
+
+
+ Pokémon name + + + +
+
+
+
+ +
+
+
+
+
+
+ Pokémon sprite +
+
+ +
+ Catch Chance: + Catch Rate +
+
+
+
+ +
+
+ +

+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + 0 + / 10 +  Pokémon defeated + +
+ + + Click Attack: + + +
+

+
+
+ + +
+
+

+ + Pokémon name + + + + + + + +   + + + + + Trainer name + + + + + +

+
+ + + + + + + + + + + +
+
+ +
+
+

+ + +
+
+ +
+
+
+ Pokémon sprite +
+
+ +
+ Catch Chance: + Catch Rate +
+
+
+
+ +
+
+
+ + +
+
+ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +

+ + + + + + + + + +
+ Dungeon name + + + + + + + + + + + + + + + +
+ + + Click Attack: + + +
+

+
+
+ + + + +
+
+

+ + Pokémon name + + + + + + + + + + + +
+
+ +
+
+

+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Pokémon sprite +
+ +
+
+ +
+
+ + +

+ + + + + + + + + +
+ + + +
+ + + Click Attack: + + +
+

+
+
+ + + +
+
+

+ + Pokémon name + + + + + + + + + + + +
+
+ +
+
+

+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Pokémon sprite +
+ +
+ +
+ Catch Chance: + Catch Rate +
+ +
+
+ +
+
+

+ + + + + + + + +
+ + + Click Attack: + + +
+

+
+
+ + + +
+
+

+ + Pokémon name + + + + + +
+
+ +
+
+ +

+ +
+ Pokémon sprite +
+
+
+ +
+
+

+ + Stage 0 / 0 + + + + + +
+ + Pokémon Attack: + + + +
+

+
+
+ + + + +
+
+
+
+
+
+
+ +
+ +
+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ Town Name +
+ +
+
+ +
+
0
+
clears
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+ + +
+ + + + +
+ + + + +
+ +
+
+
+
+
+ + + +
+
+ +
+
+ +
+ +
    + +
  • + + + + + + + + + + + +
  • + + + +
  • + + + + + + + + + + + +
  • + +
+
+
+ +
+ +
    + +
  • + + + + +
  • + +
+
+
+
+
+ +
+
+ + +
+
+
+ + +
+ +
+ + +
+ + + + + + +
+
+ + + + + + +
+
+
+ + + + + +
+
+ Battle Frontier +
+ +
+
Welcome to the Battle Frontier!
+

+ Here you will be battling through many stages to earn Battle Points.
+ There is no regional attack debuff or weather effects.
+ You can leave early and return to your checkpoint later on.
+ You'll get special items if you reach special milestone stages.
+ When you are ready, click Start!
+ Note: there is no click damage in the Battle Frontier. +

+ Start + + Start at latest checkpoint (Stage 0) + + Leave +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
Upcoming Rewards
StageReward
+ + + +
– + + You've received every available reward. Congratulations! +
+ + Quit Battle +
+ +
+ + + +
+
+
+ Town Map +
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + + + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + 16 + + + + + + + + + + + + + + + + + 17 + + + + + + + + + + + + + + + + + 18 + + + + + + + + + + + + + + + + + 19 + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + 21 + + + + + + + + + + + + + + + + + 22 + + + + + + + + + + + + + + + + + 23 + + + + + + + + + + + + + + + + + 24 + + + + + + + + + + + + + + + + + 25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + T.B. + + + + + + + + + + + + + + + + + Kindle Road + + + + + + + + + + + + + + + + + C.B. + + + + + + + + + + + + + + + + + B.B. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FIM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MP + + + + + + + + + + + + + + + + + WL + + + + + + + + + + + + + + + + + + + + + + + + + + + + RG + + + + + + + + + + + + + + + + + WP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GP + + + + + + + + + + + + + + + + + + + + + + + + + + + + OI + + + + + + + + + + + + + + + + + RV + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CE + + + + + + + + + + + + + + + + + + + + + + + + + + + + SC + + + + + + + + + + + + + + + + + VI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27 + + + + + + + + + + + + + + + + + 26 + + + + + + + + + + + + + + + + + 28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 29 + + + + + + + + + + + + + + + + + 30 + + + + + + + + + + + + + + + + + 31 + + + + + + + + + + + + + + + + + 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 33 + + + + + + + + + + + + + + + + + 34 + + + + + + + + + + + + + + + + + 35 + + + + + + + + + + + + + + + + + 36 + + + + + + + + + + + + + + + + + 37 + + + + + + + + + + + + + + + + + 38 + + + + + + + + + + + + + + + + + 39 + + + + + + + + + + + + + + + + + 40 + + + + + + + + + + + + + + + + + 41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 43 + + + + + + + + + + + + + + + + + 44 + + + + + + + + + + + + + + + + + + + + + + + + + + + 45 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 46 + + + + + + + + + + + + + + + + + + + + + + + + + + + 47 + + + + + + + + + + + + + + + + + 48 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 101 + + + + + + + + + + + + + + + + + 102 + + + + + + + + + + + + + + + + + 103 + + + + + + + + + + + + + + + + + 104 + + + + + + + + + + + + + + + + + + + + + + + + + + + 105 + + + + + + + + + + + + + + + + + 106 + + + + + + + + + + + + + + + + + 107 + + + + + + + + + + + + + + + + + 108 + + + + + + + + + + + + + + + + + 109 + + + + + + + + + + + + + + + + + 110 + + + + + + + + + + + + + + + + + 111 + + + + + + + + + + + + + + + + + 112 + + + + + + + + + + + + + + + + + 113 + + + + + + + + + + + + + + + + + 114 + + + + + + + + + + + + + + + + + + + + + + + + + + + 115 + + + + + + + + + + + + + + + + + + + + + + + + + + + 116 + + + + + + + + + + + + + + + + + + + + + + + + + + + 117 + + + + + + + + + + + + + + + + + 118 + + + + + + + + + + + + + + + + + 119 + + + + + + + + + + + + + + + + + 120 + + + + + + + + + + + + + + + + + 121 + + + + + + + + + + + + + + + + + 122 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 123 + + + + + + + + + + + + + + + + + 124 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 125 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 126 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 127 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 128 + + + + + + + + + + + + + + + + + 129 + + + + + + + + + + + + + + + + + 130 + + + + + + + + + + + + + + + + + 131 + + + + + + + + + + + + + + + + + 132 + + + + + + + + + + + + + + + + + 133 + + + + + + + + + + + + + + + + + 134 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RPS + + + + + + + + + + + + + + + + + OPS + + + + + + + + + + + + + + + + + CPS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 201 + + + + + + + + + + + + + + + + + 202 + + + + + + + + + + + + + + + + + 203 + + + + + + + + + + + + + + + + + 204 + + + + + + + + + + + + + + + + + + + + + + + + + + + 205 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 206 + + + + + + + + + + + + + + + + + + + + + + + + + + + 207 + + + + + + + + + + + + + + + + + 208 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 209 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 210 + + + + + + + + + + + + + + + + + 211 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 212 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 213 + + + + + + + + + + + + + + + + + 214 + + + + + + + + + + + + + + + + + 215 + + + + + + + + + + + + + + + + + 216 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 217 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 218 + + + + + + + + + + + + + + + + + 219 + + + + + + + + + + + + + + + + + 220 + + + + + + + + + + + + + + + + + 221 + + + + + + + + + + + + + + + + + 222 + + + + + + + + + + + + + + + + + 223 + + + + + + + + + + + + + + + + + 224 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 225 + + + + + + + + + + + + + + + + + + + + + + + + + + + 226 + + + + + + + + + + + + + + + + + 227 + + + + + + + + + + + + + + + + + 228 + + + + + + + + + + + + + + + + + 229 + + + + + + + + + + + + + + + + + 230 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + D.R. + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + 12 + + + + + + + + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + + + + + + + + + + + + 16 + + + + + + + + + + + + + + + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 18 + + + + + + + + + + + + + + + + + 19 + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + 21 + + + + + + + + + + + + + + + + + U.B. + + + + + + + + + + + + + + + + + + + + + + + + + + + 22 + + + + + + + + + + + + + + + + + 23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + 12 + + + + + + + + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 17 + + + + + + + + + + + + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 19 + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + + + + + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + A.B. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Outskirts + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Melemele Sea + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kala'e Bay + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A.O. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + M.H. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + H.D. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Poni Wilds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A.P.P + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + P.B.C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Poni Grove + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Poni Plains + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Poni Coast + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Poni Gauntlet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + F.L.B. + + + + + + + + + + + + + + + + + Q.L.B. + + + + + + + + + + + + + + + + + + + + + + + + + + + H.L.B. + + + + + + + + + + + + + + + + + G.L.B. + + + + + + + + + + + + + + + + + + + + + + + + + + + F.L.B. + + + + + + + + + + + + + + + + + L.L.B. + + + + + + + + + + + + + + + + + + + + + + + + + + + H.L.B. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + U.L.B. + + + + + + + + + + + + + + + + + E4.L.P. + + + + + + + + + + + + + + + + + M.L.P. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + RF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DG + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WLA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ELA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GS + + + + + + + + + + + + + + + + + + + + + + + + + + + + SLM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NLM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AE + + + + + + + + + + + + + + + + + + + + + + + + + + + + WR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + MO + + + + + + + + + + + + + + + + + MR + + + + + + + + + + + + + + + + + + + + + + + + + + + + BF + + + + + + + + + + + + + + + + + + + + + + + + + + + + SW + + + + + + + + + + + + + + + + + + + + + + + + + + + + GM + + + + + + + + + + + + + + + + + + + + + + + + + + + + GC + + + + + + + + + + + + + + + + + LoO + + + + + + + + + + + + + + + + + + + + + + + + + + + + HH + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2LS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + SW + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + CB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OS + + + + + + + + + + + + + + + + + + + + + + + + + + + + WHS + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FoH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FoF + + + + + + + + + + + + + + + + + + + + + + + + + + + + CB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PD + + + + + + + + + + + + + + + + + CR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SSS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FF + + + + + + + + + + + + + + + + + + + + + + + + + + + + GB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OC + + + + + + + + + + + + + + + + + GF + + + + + + + + + + + + + + + + + FS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TPP + + + + + + + + + + + + + + + + + BL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PttP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GG + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TD + + + + + + + + + + + + + + + + + + + + + + + + + + + OF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HoT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CS + + + + + + + + + + + + + + + + + GL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WV + + + + + + + + + + + + + + + + + + + + + + + + + + + BW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IF + + + + + + + + + + + + + + + + + HC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SHS + + + + + + + + + + + + + + + + + + + + + + + + + + + GT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PP + + + + + + + + + + + + + + + + + SP1 + + + + + + + + + + + + + + + + + SP2 + + + + + + + + + + + + + + + + + SP3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +
+
+
+ + +
+
+ Oak Items +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + Upgrade + + + + MAX LEVEL! + +
+
+
+ Equip another Oak Item! +
+ Oak Items are disabled. +
+
+ +
+ + + + +
+ +
+
+ +
+ + + +
+ +
+ +
+ + + +
+ + Click "List" to start a new quest. + + + + + + + + + + + + +
+
+
+ 0 / 1000 +
+
+
+ + + + + + +
+
+ + +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ 0/1000 +
+
+
+
+
+ 0/1000 +
+
+
+
+
+ +
+ + + +
+
+ Hatchery +
+ +
+
+
+
+
+

+
+ +

+ +
+
+ +
+
+
+ +
+
+ +
+ + + + +
+ +
+ +
+ + +
+
+ + + + + + +
+
+
+
+
+
+
+ +
+
+
+
+ + + + +
+ + + +
+
+ Farm +
+ + + + +
+ +
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + + +
+
+
+
+ + + +
+
+
+ + +
+ +
+ +
+
+
+ + +
+ lock +
+ + + + +
+
+ + + + + +
+ +
+ + + + +
+
+
+
+ +
+ +
+ + + +
+
+ Underground +
+ + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+ + +
+ +
+ +
+ + + +
+ +
+
+
+ + +
+ Daily trades +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + +
+
+ +
+ + + +
+
+ Shortcuts +
+
+ + + + + + + + + + + + +
+ +
+ +
+ +
+
+
+ +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/preview/pr-5723/libs b/docs/preview/pr-5723/libs new file mode 120000 index 00000000000..31cb30e4709 --- /dev/null +++ b/docs/preview/pr-5723/libs @@ -0,0 +1 @@ +../../libs \ No newline at end of file diff --git a/docs/preview/pr-5723/package.json b/docs/preview/pr-5723/package.json new file mode 100644 index 00000000000..f557f9afd39 --- /dev/null +++ b/docs/preview/pr-5723/package.json @@ -0,0 +1,106 @@ +{ + "name": "pokeclicker", + "version": "0.10.22", + "description": "PokéClicker repository", + "main": "index.js", + "scripts": { + "start": "cross-env NODE_ENV=development gulp", + "build": "cross-env NODE_ENV=development gulp build", + "test": "npm run ts-test && npm run eslint && npm run stylelint && npm run vitest", + "ts-test": "gulp scripts", + "vitest": "vitest --run", + "eslint": "eslint --ext ts ./src/scripts ./src/modules", + "eslint-fix": "eslint --ext ts --fix ./src/scripts ./src/modules", + "stylelint": "stylelint \"./src/**/*.less\" --cache", + "stylelint-fix": "npm run stylelint -- --fix", + "website": "npm run tl:update && npm test && cross-env NODE_ENV=production gulp website", + "publish": "npm test && node publish.js", + "tl:init": "git submodule update --init", + "tl:update": "git submodule update --remote", + "clean": "npm ci && npm run tl:init" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/pokeclicker/pokeclicker.git" + }, + "babel": { + "presets": [ + "env" + ] + }, + "author": "RedSparr0w", + "license": "ISC", + "bugs": { + "url": "https://github.com/pokeclicker/pokeclicker/issues" + }, + "homepage": "https://github.com/pokeclicker/pokeclicker#readme", + "devDependencies": { + "@types/bootstrap": "^4.3.1", + "@types/bootstrap-notify": "^3.1.34", + "@types/intro.js": "^2.4.7", + "@types/jquery": "^3.5.16", + "@types/knockout": "^3.4.66", + "@types/sortablejs": "^1.10.5", + "@typescript-eslint/eslint-plugin": "^5.50.0", + "@typescript-eslint/parser": "^5.50.0", + "@vitest/coverage-c8": "^0.29.8", + "babel-core": "^6.26.3", + "babel-preset-env": "^1.7.0", + "babel-register": "^6.26.0", + "bootstrap-notify": "^3.1.3", + "browser-sync": "^2.28.3", + "cross-env": "^7.0.2", + "del": "^5.1.0", + "es6-promise": "^4.2.8", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-plugin-import": "^2.22.1", + "gh-pages": "^4.0.0", + "gulp": "^4.0.2", + "gulp-autoprefixer": "^7.0.1", + "gulp-changed": "^4.0.2", + "gulp-clean": "^0.4.0", + "gulp-concat": "^2.6.0", + "gulp-connect": "^5.7.0", + "gulp-ejs": "^5.1.0", + "gulp-file-include": "^2.2.2", + "gulp-filter": "^6.0.0", + "gulp-html-import": "^0.0.2", + "gulp-less": "^4.0.1", + "gulp-minify-css": "^1.2.1", + "gulp-minify-html": "^1.0.4", + "gulp-plumber": "^1.2.1", + "gulp-rename": "^2.0.0", + "gulp-replace": "^1.0.0", + "gulp-size": "^3.0.0", + "gulp-sourcemaps": "^2.6.5", + "gulp-stream-to-promise": "^0.1.0", + "gulp-strip-debug": "^3.0.0", + "gulp-typescript": "^5.0.1", + "gulp-util": "^3.0.7", + "husky": "^4.3.8", + "natives": "^1.1.6", + "postcss-less": "^6.0.0", + "stylelint": "^15.10.1", + "stylelint-config-standard-less": "^1.0.0", + "ts-loader": "^8.0.4", + "ts-node": "^10.9.1", + "typescript": "^4.9.5", + "vitest": "^0.29.8", + "webpack": "^5.76.0", + "webpack-cli": "^5.0.1", + "webpack-stream": "^6.1.0" + }, + "dependencies": { + "bootstrap": "^4.5.3", + "eslint": "^7.4.0", + "i18next": "^21.9.2", + "i18next-browser-languagedetector": "^6.1.5", + "i18next-chained-backend": "^3.1.0", + "i18next-http-backend": "^1.4.4", + "intro.js": "^2.9.3", + "jquery": "^3.5.1", + "knockout": "^3.5.1", + "popper.js": "^1.16.0", + "sortablejs": "^1.10.2" + } +} diff --git a/docs/preview/pr-5723/scripts/modules.min.js b/docs/preview/pr-5723/scripts/modules.min.js new file mode 100644 index 00000000000..90db7fc27a8 --- /dev/null +++ b/docs/preview/pr-5723/scripts/modules.min.js @@ -0,0 +1,3238 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/cross-fetch/dist/browser-ponyfill.js": +/*!***********************************************************!*\ + !*** ./node_modules/cross-fetch/dist/browser-ponyfill.js ***! + \***********************************************************/ +/***/ (function(module, exports) { + +eval("var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = self.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.onabort = function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!self.fetch) {\n self.fetch = fetch;\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n})({});\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports[\"default\"] = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n\n\n//# sourceURL=webpack://pokeclicker/./node_modules/cross-fetch/dist/browser-ponyfill.js?"); + +/***/ }), + +/***/ "./node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js ***! + \**************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Browser)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"./node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./node_modules/@babel/runtime/helpers/esm/createClass.js\");\n\n\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\n\n// eslint-disable-next-line no-control-regex\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\nvar serializeCookie = function serializeCookie(name, val, options) {\n var opt = options || {};\n opt.path = opt.path || '/';\n var value = encodeURIComponent(val);\n var str = \"\".concat(name, \"=\").concat(value);\n\n if (opt.maxAge > 0) {\n var maxAge = opt.maxAge - 0;\n if (Number.isNaN(maxAge)) throw new Error('maxAge should be a Number');\n str += \"; Max-Age=\".concat(Math.floor(maxAge));\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += \"; Domain=\".concat(opt.domain);\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += \"; Path=\".concat(opt.path);\n }\n\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n\n str += \"; Expires=\".concat(opt.expires.toUTCString());\n }\n\n if (opt.httpOnly) str += '; HttpOnly';\n if (opt.secure) str += '; Secure';\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n\n case 'lax':\n str += '; SameSite=Lax';\n break;\n\n case 'strict':\n str += '; SameSite=Strict';\n break;\n\n case 'none':\n str += '; SameSite=None';\n break;\n\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n};\n\nvar cookie = {\n create: function create(name, value, minutes, domain) {\n var cookieOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n path: '/',\n sameSite: 'strict'\n };\n\n if (minutes) {\n cookieOptions.expires = new Date();\n cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000);\n }\n\n if (domain) cookieOptions.domain = domain;\n document.cookie = serializeCookie(name, encodeURIComponent(value), cookieOptions);\n },\n read: function read(name) {\n var nameEQ = \"\".concat(name, \"=\");\n var ca = document.cookie.split(';');\n\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n\n return null;\n },\n remove: function remove(name) {\n this.create(name, '', -1);\n }\n};\nvar cookie$1 = {\n name: 'cookie',\n lookup: function lookup(options) {\n var found;\n\n if (options.lookupCookie && typeof document !== 'undefined') {\n var c = cookie.read(options.lookupCookie);\n if (c) found = c;\n }\n\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupCookie && typeof document !== 'undefined') {\n cookie.create(options.lookupCookie, lng, options.cookieMinutes, options.cookieDomain, options.cookieOptions);\n }\n }\n};\n\nvar querystring = {\n name: 'querystring',\n lookup: function lookup(options) {\n var found;\n\n if (typeof window !== 'undefined') {\n var search = window.location.search;\n\n if (!window.location.search && window.location.hash && window.location.hash.indexOf('?') > -1) {\n search = window.location.hash.substring(window.location.hash.indexOf('?'));\n }\n\n var query = search.substring(1);\n var params = query.split('&');\n\n for (var i = 0; i < params.length; i++) {\n var pos = params[i].indexOf('=');\n\n if (pos > 0) {\n var key = params[i].substring(0, pos);\n\n if (key === options.lookupQuerystring) {\n found = params[i].substring(pos + 1);\n }\n }\n }\n }\n\n return found;\n }\n};\n\nvar hasLocalStorageSupport = null;\n\nvar localStorageAvailable = function localStorageAvailable() {\n if (hasLocalStorageSupport !== null) return hasLocalStorageSupport;\n\n try {\n hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null;\n var testKey = 'i18next.translate.boo';\n window.localStorage.setItem(testKey, 'foo');\n window.localStorage.removeItem(testKey);\n } catch (e) {\n hasLocalStorageSupport = false;\n }\n\n return hasLocalStorageSupport;\n};\n\nvar localStorage = {\n name: 'localStorage',\n lookup: function lookup(options) {\n var found;\n\n if (options.lookupLocalStorage && localStorageAvailable()) {\n var lng = window.localStorage.getItem(options.lookupLocalStorage);\n if (lng) found = lng;\n }\n\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupLocalStorage && localStorageAvailable()) {\n window.localStorage.setItem(options.lookupLocalStorage, lng);\n }\n }\n};\n\nvar hasSessionStorageSupport = null;\n\nvar sessionStorageAvailable = function sessionStorageAvailable() {\n if (hasSessionStorageSupport !== null) return hasSessionStorageSupport;\n\n try {\n hasSessionStorageSupport = window !== 'undefined' && window.sessionStorage !== null;\n var testKey = 'i18next.translate.boo';\n window.sessionStorage.setItem(testKey, 'foo');\n window.sessionStorage.removeItem(testKey);\n } catch (e) {\n hasSessionStorageSupport = false;\n }\n\n return hasSessionStorageSupport;\n};\n\nvar sessionStorage = {\n name: 'sessionStorage',\n lookup: function lookup(options) {\n var found;\n\n if (options.lookupSessionStorage && sessionStorageAvailable()) {\n var lng = window.sessionStorage.getItem(options.lookupSessionStorage);\n if (lng) found = lng;\n }\n\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupSessionStorage && sessionStorageAvailable()) {\n window.sessionStorage.setItem(options.lookupSessionStorage, lng);\n }\n }\n};\n\nvar navigator$1 = {\n name: 'navigator',\n lookup: function lookup(options) {\n var found = [];\n\n if (typeof navigator !== 'undefined') {\n if (navigator.languages) {\n // chrome only; not an array, so can't use .push.apply instead of iterating\n for (var i = 0; i < navigator.languages.length; i++) {\n found.push(navigator.languages[i]);\n }\n }\n\n if (navigator.userLanguage) {\n found.push(navigator.userLanguage);\n }\n\n if (navigator.language) {\n found.push(navigator.language);\n }\n }\n\n return found.length > 0 ? found : undefined;\n }\n};\n\nvar htmlTag = {\n name: 'htmlTag',\n lookup: function lookup(options) {\n var found;\n var htmlTag = options.htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n\n if (htmlTag && typeof htmlTag.getAttribute === 'function') {\n found = htmlTag.getAttribute('lang');\n }\n\n return found;\n }\n};\n\nvar path = {\n name: 'path',\n lookup: function lookup(options) {\n var found;\n\n if (typeof window !== 'undefined') {\n var language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n\n if (language instanceof Array) {\n if (typeof options.lookupFromPathIndex === 'number') {\n if (typeof language[options.lookupFromPathIndex] !== 'string') {\n return undefined;\n }\n\n found = language[options.lookupFromPathIndex].replace('/', '');\n } else {\n found = language[0].replace('/', '');\n }\n }\n }\n\n return found;\n }\n};\n\nvar subdomain = {\n name: 'subdomain',\n lookup: function lookup(options) {\n // If given get the subdomain index else 1\n var lookupFromSubdomainIndex = typeof options.lookupFromSubdomainIndex === 'number' ? options.lookupFromSubdomainIndex + 1 : 1; // get all matches if window.location. is existing\n // first item of match is the match itself and the second is the first group macht which sould be the first subdomain match\n // is the hostname no public domain get the or option of localhost\n\n var language = typeof window !== 'undefined' && window.location && window.location.hostname && window.location.hostname.match(/^(\\w{2,5})\\.(([a-z0-9-]{1,63}\\.[a-z]{2,6})|localhost)/i); // if there is no match (null) return undefined\n\n if (!language) return undefined; // return the given group match\n\n return language[lookupFromSubdomainIndex];\n }\n};\n\nfunction getDefaults() {\n return {\n order: ['querystring', 'cookie', 'localStorage', 'sessionStorage', 'navigator', 'htmlTag'],\n lookupQuerystring: 'lng',\n lookupCookie: 'i18next',\n lookupLocalStorage: 'i18nextLng',\n lookupSessionStorage: 'i18nextLng',\n // cache user language\n caches: ['localStorage'],\n excludeCacheFor: ['cimode'] // cookieMinutes: 10,\n // cookieDomain: 'myDomain'\n\n };\n}\n\nvar Browser = /*#__PURE__*/function () {\n function Browser(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, Browser);\n\n this.type = 'languageDetector';\n this.detectors = {};\n this.init(services, options);\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Browser, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults()); // backwards compatibility\n\n if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n this.i18nOptions = i18nOptions;\n this.addDetector(cookie$1);\n this.addDetector(querystring);\n this.addDetector(localStorage);\n this.addDetector(sessionStorage);\n this.addDetector(navigator$1);\n this.addDetector(htmlTag);\n this.addDetector(path);\n this.addDetector(subdomain);\n }\n }, {\n key: \"addDetector\",\n value: function addDetector(detector) {\n this.detectors[detector.name] = detector;\n }\n }, {\n key: \"detect\",\n value: function detect(detectionOrder) {\n var _this = this;\n\n if (!detectionOrder) detectionOrder = this.options.order;\n var detected = [];\n detectionOrder.forEach(function (detectorName) {\n if (_this.detectors[detectorName]) {\n var lookup = _this.detectors[detectorName].lookup(_this.options);\n\n if (lookup && typeof lookup === 'string') lookup = [lookup];\n if (lookup) detected = detected.concat(lookup);\n }\n });\n if (this.services.languageUtils.getBestMatchFromCodes) return detected; // new i18next v19.5.0\n\n return detected.length > 0 ? detected[0] : null; // a little backward compatibility\n }\n }, {\n key: \"cacheUserLanguage\",\n value: function cacheUserLanguage(lng, caches) {\n var _this2 = this;\n\n if (!caches) caches = this.options.caches;\n if (!caches) return;\n if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n caches.forEach(function (cacheName) {\n if (_this2.detectors[cacheName]) _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options);\n });\n }\n }]);\n\n return Browser;\n}();\n\nBrowser.type = 'languageDetector';\n\n\n\n\n//# sourceURL=webpack://pokeclicker/./node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js?"); + +/***/ }), + +/***/ "./node_modules/i18next-chained-backend/dist/esm/i18nextChainedBackend.js": +/*!********************************************************************************!*\ + !*** ./node_modules/i18next-chained-backend/dist/esm/i18nextChainedBackend.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Backend)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"./node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./node_modules/@babel/runtime/helpers/esm/createClass.js\");\n\n\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nfunction createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n}\n\nfunction getDefaults() {\n return {\n handleEmptyResourcesAsFailed: true\n };\n}\n\nvar Backend = /*#__PURE__*/function () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, Backend);\n\n this.backends = [];\n this.type = 'backend';\n this.init(services, options);\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Backend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nextOptions = arguments.length > 2 ? arguments[2] : undefined;\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n this.options.backends && this.options.backends.forEach(function (b, i) {\n _this.backends[i] = _this.backends[i] || createClassOnDemand(b);\n\n _this.backends[i].init(services, _this.options.backendOptions && _this.options.backendOptions[i] || {}, i18nextOptions);\n });\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n var _this2 = this;\n\n var bLen = this.backends.length;\n\n var loadPosition = function loadPosition(pos) {\n if (pos >= bLen) return callback(new Error('non of the backend loaded data;', true)); // failed pass retry flag\n\n var isLastBackend = pos === bLen - 1;\n var lengthCheckAmount = _this2.options.handleEmptyResourcesAsFailed && !isLastBackend ? 0 : -1;\n var backend = _this2.backends[pos];\n\n if (backend.read) {\n backend.read(language, namespace, function (err, data) {\n if (!err && data && Object.keys(data).length > lengthCheckAmount) {\n callback(null, data, pos);\n savePosition(pos - 1, data); // save one in front\n } else {\n loadPosition(pos + 1); // try load from next\n }\n });\n } else {\n loadPosition(pos + 1); // try load from next\n }\n };\n\n var savePosition = function savePosition(pos, data) {\n if (pos < 0) return;\n var backend = _this2.backends[pos];\n\n if (backend.save) {\n backend.save(language, namespace, data);\n savePosition(pos - 1, data);\n } else {\n savePosition(pos - 1, data);\n }\n };\n\n loadPosition(0);\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue, callback, options) {\n this.backends.forEach(function (b) {\n if (b.create) b.create(languages, namespace, key, fallbackValue, null, options);\n });\n }\n }]);\n\n return Backend;\n}();\n\nBackend.type = 'backend';\n\n\n\n\n//# sourceURL=webpack://pokeclicker/./node_modules/i18next-chained-backend/dist/esm/i18nextChainedBackend.js?"); + +/***/ }), + +/***/ "./node_modules/intro.js/intro.js": +/*!****************************************!*\ + !*** ./node_modules/intro.js/intro.js ***! + \****************************************/ +/***/ ((module) => { + +eval("/**\n * Intro.js v2.9.3\n * https://github.com/usablica/intro.js\n *\n * Copyright (C) 2017 Afshin Mehrabani (@afshinmeh)\n */\n\n(function(f) {\n if (true) {\n module.exports = f();\n // deprecated function\n // @since 2.8.0\n module.exports.introJs = function () {\n console.warn('Deprecated: please use require(\"intro.js\") directly, instead of the introJs method of the function');\n // introJs()\n return f().apply(this, arguments);\n };\n } else { var g; }\n})(function () {\n //Default config/variables\n var VERSION = '2.9.3';\n\n /**\n * IntroJs main class\n *\n * @class IntroJs\n */\n function IntroJs(obj) {\n this._targetElement = obj;\n this._introItems = [];\n\n this._options = {\n /* Next button label in tooltip box */\n nextLabel: 'Next →',\n /* Previous button label in tooltip box */\n prevLabel: '← Back',\n /* Skip button label in tooltip box */\n skipLabel: 'Skip',\n /* Done button label in tooltip box */\n doneLabel: 'Done',\n /* Hide previous button in the first step? Otherwise, it will be disabled button. */\n hidePrev: false,\n /* Hide next button in the last step? Otherwise, it will be disabled button. */\n hideNext: false,\n /* Default tooltip box position */\n tooltipPosition: 'bottom',\n /* Next CSS class for tooltip boxes */\n tooltipClass: '',\n /* CSS class that is added to the helperLayer */\n highlightClass: '',\n /* Close introduction when pressing Escape button? */\n exitOnEsc: true,\n /* Close introduction when clicking on overlay layer? */\n exitOnOverlayClick: true,\n /* Show step numbers in introduction? */\n showStepNumbers: true,\n /* Let user use keyboard to navigate the tour? */\n keyboardNavigation: true,\n /* Show tour control buttons? */\n showButtons: true,\n /* Show tour bullets? */\n showBullets: true,\n /* Show tour progress? */\n showProgress: false,\n /* Scroll to highlighted element? */\n scrollToElement: true,\n /*\n * Should we scroll the tooltip or target element?\n *\n * Options are: 'element' or 'tooltip'\n */\n scrollTo: 'element',\n /* Padding to add after scrolling when element is not in the viewport (in pixels) */\n scrollPadding: 30,\n /* Set the overlay opacity */\n overlayOpacity: 0.8,\n /* Precedence of positions, when auto is enabled */\n positionPrecedence: [\"bottom\", \"top\", \"right\", \"left\"],\n /* Disable an interaction with element? */\n disableInteraction: false,\n /* Set how much padding to be used around helper element */\n helperElementPadding: 10,\n /* Default hint position */\n hintPosition: 'top-middle',\n /* Hint button label */\n hintButtonLabel: 'Got it',\n /* Adding animation to hints? */\n hintAnimation: true,\n /* additional classes to put on the buttons */\n buttonClass: \"introjs-button\"\n };\n }\n\n /**\n * Initiate a new introduction/guide from an element in the page\n *\n * @api private\n * @method _introForElement\n * @param {Object} targetElm\n * @param {String} group\n * @returns {Boolean} Success or not?\n */\n function _introForElement(targetElm, group) {\n var allIntroSteps = targetElm.querySelectorAll(\"*[data-intro]\"),\n introItems = [];\n\n if (this._options.steps) {\n //use steps passed programmatically\n _forEach(this._options.steps, function (step) {\n var currentItem = _cloneObject(step);\n\n //set the step\n currentItem.step = introItems.length + 1;\n\n //use querySelector function only when developer used CSS selector\n if (typeof (currentItem.element) === 'string') {\n //grab the element with given selector from the page\n currentItem.element = document.querySelector(currentItem.element);\n }\n\n //intro without element\n if (typeof (currentItem.element) === 'undefined' || currentItem.element === null) {\n var floatingElementQuery = document.querySelector(\".introjsFloatingElement\");\n\n if (floatingElementQuery === null) {\n floatingElementQuery = document.createElement('div');\n floatingElementQuery.className = 'introjsFloatingElement';\n\n document.body.appendChild(floatingElementQuery);\n }\n\n currentItem.element = floatingElementQuery;\n currentItem.position = 'floating';\n }\n\n currentItem.scrollTo = currentItem.scrollTo || this._options.scrollTo;\n\n if (typeof (currentItem.disableInteraction) === 'undefined') {\n currentItem.disableInteraction = this._options.disableInteraction;\n }\n\n if (currentItem.element !== null) {\n introItems.push(currentItem);\n } \n }.bind(this));\n\n } else {\n //use steps from data-* annotations\n var elmsLength = allIntroSteps.length;\n var disableInteraction;\n \n //if there's no element to intro\n if (elmsLength < 1) {\n return false;\n }\n\n _forEach(allIntroSteps, function (currentElement) {\n \n // PR #80\n // start intro for groups of elements\n if (group && (currentElement.getAttribute(\"data-intro-group\") !== group)) {\n return;\n }\n\n // skip hidden elements\n if (currentElement.style.display === 'none') {\n return;\n }\n\n var step = parseInt(currentElement.getAttribute('data-step'), 10);\n\n if (typeof (currentElement.getAttribute('data-disable-interaction')) !== 'undefined') {\n disableInteraction = !!currentElement.getAttribute('data-disable-interaction');\n } else {\n disableInteraction = this._options.disableInteraction;\n }\n\n if (step > 0) {\n introItems[step - 1] = {\n element: currentElement,\n intro: currentElement.getAttribute('data-intro'),\n step: parseInt(currentElement.getAttribute('data-step'), 10),\n tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n highlightClass: currentElement.getAttribute('data-highlightclass'),\n position: currentElement.getAttribute('data-position') || this._options.tooltipPosition,\n scrollTo: currentElement.getAttribute('data-scrollto') || this._options.scrollTo,\n disableInteraction: disableInteraction\n };\n }\n }.bind(this));\n\n //next add intro items without data-step\n //todo: we need a cleanup here, two loops are redundant\n var nextStep = 0;\n\n _forEach(allIntroSteps, function (currentElement) {\n \n // PR #80\n // start intro for groups of elements\n if (group && (currentElement.getAttribute(\"data-intro-group\") !== group)) {\n return;\n }\n \n if (currentElement.getAttribute('data-step') === null) {\n\n while (true) {\n if (typeof introItems[nextStep] === 'undefined') {\n break;\n } else {\n nextStep++;\n }\n } \n\n if (typeof (currentElement.getAttribute('data-disable-interaction')) !== 'undefined') {\n disableInteraction = !!currentElement.getAttribute('data-disable-interaction');\n } else {\n disableInteraction = this._options.disableInteraction;\n }\n\n introItems[nextStep] = {\n element: currentElement,\n intro: currentElement.getAttribute('data-intro'),\n step: nextStep + 1,\n tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n highlightClass: currentElement.getAttribute('data-highlightclass'),\n position: currentElement.getAttribute('data-position') || this._options.tooltipPosition,\n scrollTo: currentElement.getAttribute('data-scrollto') || this._options.scrollTo,\n disableInteraction: disableInteraction\n };\n }\n }.bind(this));\n }\n\n //removing undefined/null elements\n var tempIntroItems = [];\n for (var z = 0; z < introItems.length; z++) {\n if (introItems[z]) {\n // copy non-falsy values to the end of the array\n tempIntroItems.push(introItems[z]); \n } \n }\n\n introItems = tempIntroItems;\n\n //Ok, sort all items with given steps\n introItems.sort(function (a, b) {\n return a.step - b.step;\n });\n\n //set it to the introJs object\n this._introItems = introItems;\n\n //add overlay layer to the page\n if(_addOverlayLayer.call(this, targetElm)) {\n //then, start the show\n _nextStep.call(this);\n\n if (this._options.keyboardNavigation) {\n DOMEvent.on(window, 'keydown', _onKeyDown, this, true);\n }\n //for window resize\n DOMEvent.on(window, 'resize', _onResize, this, true);\n }\n return false;\n }\n\n function _onResize () {\n this.refresh.call(this);\n }\n\n /**\n * on keyCode:\n * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\n * This feature has been removed from the Web standards.\n * Though some browsers may still support it, it is in\n * the process of being dropped.\n * Instead, you should use KeyboardEvent.code,\n * if it's implemented.\n *\n * jQuery's approach is to test for\n * (1) e.which, then\n * (2) e.charCode, then\n * (3) e.keyCode\n * https://github.com/jquery/jquery/blob/a6b0705294d336ae2f63f7276de0da1195495363/src/event.js#L638\n *\n * @param type var\n * @return type\n */\n function _onKeyDown (e) {\n var code = (e.code === null) ? e.which : e.code;\n\n // if code/e.which is null\n if (code === null) {\n code = (e.charCode === null) ? e.keyCode : e.charCode;\n }\n \n if ((code === 'Escape' || code === 27) && this._options.exitOnEsc === true) {\n //escape key pressed, exit the intro\n //check if exit callback is defined\n _exitIntro.call(this, this._targetElement);\n } else if (code === 'ArrowLeft' || code === 37) {\n //left arrow\n _previousStep.call(this);\n } else if (code === 'ArrowRight' || code === 39) {\n //right arrow\n _nextStep.call(this);\n } else if (code === 'Enter' || code === 13) {\n //srcElement === ie\n var target = e.target || e.srcElement;\n if (target && target.className.match('introjs-prevbutton')) {\n //user hit enter while focusing on previous button\n _previousStep.call(this);\n } else if (target && target.className.match('introjs-skipbutton')) {\n //user hit enter while focusing on skip button\n if (this._introItems.length - 1 === this._currentStep && typeof (this._introCompleteCallback) === 'function') {\n this._introCompleteCallback.call(this);\n }\n\n _exitIntro.call(this, this._targetElement);\n } else if (target && target.getAttribute('data-stepnumber')) {\n // user hit enter while focusing on step bullet\n target.click();\n } else {\n //default behavior for responding to enter\n _nextStep.call(this);\n }\n\n //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers\n if(e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n }\n\n /*\n * makes a copy of the object\n * @api private\n * @method _cloneObject\n */\n function _cloneObject(object) {\n if (object === null || typeof (object) !== 'object' || typeof (object.nodeType) !== 'undefined') {\n return object;\n }\n var temp = {};\n for (var key in object) {\n if (typeof(window.jQuery) !== 'undefined' && object[key] instanceof window.jQuery) {\n temp[key] = object[key];\n } else {\n temp[key] = _cloneObject(object[key]);\n }\n }\n return temp;\n }\n /**\n * Go to specific step of introduction\n *\n * @api private\n * @method _goToStep\n */\n function _goToStep(step) {\n //because steps starts with zero\n this._currentStep = step - 2;\n if (typeof (this._introItems) !== 'undefined') {\n _nextStep.call(this);\n }\n }\n\n /**\n * Go to the specific step of introduction with the explicit [data-step] number\n *\n * @api private\n * @method _goToStepNumber\n */\n function _goToStepNumber(step) {\n this._currentStepNumber = step;\n if (typeof (this._introItems) !== 'undefined') {\n _nextStep.call(this);\n }\n }\n\n /**\n * Go to next step on intro\n *\n * @api private\n * @method _nextStep\n */\n function _nextStep() {\n this._direction = 'forward';\n\n if (typeof (this._currentStepNumber) !== 'undefined') {\n _forEach(this._introItems, function (item, i) {\n if( item.step === this._currentStepNumber ) {\n this._currentStep = i - 1;\n this._currentStepNumber = undefined;\n }\n }.bind(this));\n }\n\n if (typeof (this._currentStep) === 'undefined') {\n this._currentStep = 0;\n } else {\n ++this._currentStep;\n }\n\n var nextStep = this._introItems[this._currentStep];\n var continueStep = true;\n\n if (typeof (this._introBeforeChangeCallback) !== 'undefined') {\n continueStep = this._introBeforeChangeCallback.call(this, nextStep.element);\n }\n\n // if `onbeforechange` returned `false`, stop displaying the element\n if (continueStep === false) {\n --this._currentStep;\n return false;\n }\n\n if ((this._introItems.length) <= this._currentStep) {\n //end of the intro\n //check if any callback is defined\n if (typeof (this._introCompleteCallback) === 'function') {\n this._introCompleteCallback.call(this);\n }\n _exitIntro.call(this, this._targetElement);\n return;\n }\n\n _showElement.call(this, nextStep);\n }\n\n /**\n * Go to previous step on intro\n *\n * @api private\n * @method _previousStep\n */\n function _previousStep() {\n this._direction = 'backward';\n\n if (this._currentStep === 0) {\n return false;\n }\n\n --this._currentStep;\n\n var nextStep = this._introItems[this._currentStep];\n var continueStep = true;\n\n if (typeof (this._introBeforeChangeCallback) !== 'undefined') {\n continueStep = this._introBeforeChangeCallback.call(this, nextStep.element);\n }\n\n // if `onbeforechange` returned `false`, stop displaying the element\n if (continueStep === false) {\n ++this._currentStep;\n return false;\n }\n\n _showElement.call(this, nextStep);\n }\n\n /**\n * Update placement of the intro objects on the screen\n * @api private\n */\n function _refresh() {\n // re-align intros\n _setHelperLayerPosition.call(this, document.querySelector('.introjs-helperLayer'));\n _setHelperLayerPosition.call(this, document.querySelector('.introjs-tooltipReferenceLayer'));\n _setHelperLayerPosition.call(this, document.querySelector('.introjs-disableInteraction'));\n\n // re-align tooltip\n if(this._currentStep !== undefined && this._currentStep !== null) {\n var oldHelperNumberLayer = document.querySelector('.introjs-helperNumberLayer'),\n oldArrowLayer = document.querySelector('.introjs-arrow'),\n oldtooltipContainer = document.querySelector('.introjs-tooltip');\n _placeTooltip.call(this, this._introItems[this._currentStep].element, oldtooltipContainer, oldArrowLayer, oldHelperNumberLayer);\n }\n\n //re-align hints\n _reAlignHints.call(this);\n return this;\n }\n\n /**\n * Exit from intro\n *\n * @api private\n * @method _exitIntro\n * @param {Object} targetElement\n * @param {Boolean} force - Setting to `true` will skip the result of beforeExit callback\n */\n function _exitIntro(targetElement, force) {\n var continueExit = true;\n\n // calling onbeforeexit callback\n //\n // If this callback return `false`, it would halt the process\n if (this._introBeforeExitCallback !== undefined) {\n continueExit = this._introBeforeExitCallback.call(this);\n }\n\n // skip this check if `force` parameter is `true`\n // otherwise, if `onbeforeexit` returned `false`, don't exit the intro\n if (!force && continueExit === false) return;\n\n //remove overlay layers from the page\n var overlayLayers = targetElement.querySelectorAll('.introjs-overlay');\n\n if (overlayLayers && overlayLayers.length) {\n _forEach(overlayLayers, function (overlayLayer) {\n overlayLayer.style.opacity = 0;\n window.setTimeout(function () {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n }.bind(overlayLayer), 500);\n }.bind(this));\n }\n\n //remove all helper layers\n var helperLayer = targetElement.querySelector('.introjs-helperLayer');\n if (helperLayer) {\n helperLayer.parentNode.removeChild(helperLayer);\n }\n\n var referenceLayer = targetElement.querySelector('.introjs-tooltipReferenceLayer');\n if (referenceLayer) {\n referenceLayer.parentNode.removeChild(referenceLayer);\n }\n\n //remove disableInteractionLayer\n var disableInteractionLayer = targetElement.querySelector('.introjs-disableInteraction');\n if (disableInteractionLayer) {\n disableInteractionLayer.parentNode.removeChild(disableInteractionLayer);\n }\n\n //remove intro floating element\n var floatingElement = document.querySelector('.introjsFloatingElement');\n if (floatingElement) {\n floatingElement.parentNode.removeChild(floatingElement);\n }\n\n _removeShowElement();\n\n //remove `introjs-fixParent` class from the elements\n var fixParents = document.querySelectorAll('.introjs-fixParent');\n _forEach(fixParents, function (parent) {\n _removeClass(parent, /introjs-fixParent/g);\n });\n\n //clean listeners\n DOMEvent.off(window, 'keydown', _onKeyDown, this, true);\n DOMEvent.off(window, 'resize', _onResize, this, true);\n\n //check if any callback is defined\n if (this._introExitCallback !== undefined) {\n this._introExitCallback.call(this);\n }\n\n //set the step to zero\n this._currentStep = undefined;\n }\n\n /**\n * Render tooltip box in the page\n *\n * @api private\n * @method _placeTooltip\n * @param {HTMLElement} targetElement\n * @param {HTMLElement} tooltipLayer\n * @param {HTMLElement} arrowLayer\n * @param {HTMLElement} helperNumberLayer\n * @param {Boolean} hintMode\n */\n function _placeTooltip(targetElement, tooltipLayer, arrowLayer, helperNumberLayer, hintMode) {\n var tooltipCssClass = '',\n currentStepObj,\n tooltipOffset,\n targetOffset,\n windowSize,\n currentTooltipPosition;\n\n hintMode = hintMode || false;\n\n //reset the old style\n tooltipLayer.style.top = null;\n tooltipLayer.style.right = null;\n tooltipLayer.style.bottom = null;\n tooltipLayer.style.left = null;\n tooltipLayer.style.marginLeft = null;\n tooltipLayer.style.marginTop = null;\n\n arrowLayer.style.display = 'inherit';\n\n if (typeof(helperNumberLayer) !== 'undefined' && helperNumberLayer !== null) {\n helperNumberLayer.style.top = null;\n helperNumberLayer.style.left = null;\n }\n\n //prevent error when `this._currentStep` is undefined\n if (!this._introItems[this._currentStep]) return;\n\n //if we have a custom css class for each step\n currentStepObj = this._introItems[this._currentStep];\n if (typeof (currentStepObj.tooltipClass) === 'string') {\n tooltipCssClass = currentStepObj.tooltipClass;\n } else {\n tooltipCssClass = this._options.tooltipClass;\n }\n\n tooltipLayer.className = ('introjs-tooltip ' + tooltipCssClass).replace(/^\\s+|\\s+$/g, '');\n tooltipLayer.setAttribute('role', 'dialog');\n\n currentTooltipPosition = this._introItems[this._currentStep].position;\n\n // Floating is always valid, no point in calculating\n if (currentTooltipPosition !== \"floating\") { \n currentTooltipPosition = _determineAutoPosition.call(this, targetElement, tooltipLayer, currentTooltipPosition);\n }\n\n var tooltipLayerStyleLeft;\n targetOffset = _getOffset(targetElement);\n tooltipOffset = _getOffset(tooltipLayer);\n windowSize = _getWinSize();\n\n _addClass(tooltipLayer, 'introjs-' + currentTooltipPosition);\n\n switch (currentTooltipPosition) {\n case 'top-right-aligned':\n arrowLayer.className = 'introjs-arrow bottom-right';\n\n var tooltipLayerStyleRight = 0;\n _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer);\n tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n break;\n\n case 'top-middle-aligned':\n arrowLayer.className = 'introjs-arrow bottom-middle';\n\n var tooltipLayerStyleLeftRight = targetOffset.width / 2 - tooltipOffset.width / 2;\n\n // a fix for middle aligned hints\n if (hintMode) {\n tooltipLayerStyleLeftRight += 5;\n }\n\n if (_checkLeft(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, tooltipLayer)) {\n tooltipLayer.style.right = null;\n _checkRight(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, windowSize, tooltipLayer);\n }\n tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n break;\n\n case 'top-left-aligned':\n // top-left-aligned is the same as the default top\n case 'top':\n arrowLayer.className = 'introjs-arrow bottom';\n\n tooltipLayerStyleLeft = (hintMode) ? 0 : 15;\n\n _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer);\n tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n break;\n case 'right':\n tooltipLayer.style.left = (targetOffset.width + 20) + 'px';\n if (targetOffset.top + tooltipOffset.height > windowSize.height) {\n // In this case, right would have fallen below the bottom of the screen.\n // Modify so that the bottom of the tooltip connects with the target\n arrowLayer.className = \"introjs-arrow left-bottom\";\n tooltipLayer.style.top = \"-\" + (tooltipOffset.height - targetOffset.height - 20) + \"px\";\n } else {\n arrowLayer.className = 'introjs-arrow left';\n }\n break;\n case 'left':\n if (!hintMode && this._options.showStepNumbers === true) {\n tooltipLayer.style.top = '15px';\n }\n\n if (targetOffset.top + tooltipOffset.height > windowSize.height) {\n // In this case, left would have fallen below the bottom of the screen.\n // Modify so that the bottom of the tooltip connects with the target\n tooltipLayer.style.top = \"-\" + (tooltipOffset.height - targetOffset.height - 20) + \"px\";\n arrowLayer.className = 'introjs-arrow right-bottom';\n } else {\n arrowLayer.className = 'introjs-arrow right';\n }\n tooltipLayer.style.right = (targetOffset.width + 20) + 'px';\n\n break;\n case 'floating':\n arrowLayer.style.display = 'none';\n\n //we have to adjust the top and left of layer manually for intro items without element\n tooltipLayer.style.left = '50%';\n tooltipLayer.style.top = '50%';\n tooltipLayer.style.marginLeft = '-' + (tooltipOffset.width / 2) + 'px';\n tooltipLayer.style.marginTop = '-' + (tooltipOffset.height / 2) + 'px';\n\n if (typeof(helperNumberLayer) !== 'undefined' && helperNumberLayer !== null) {\n helperNumberLayer.style.left = '-' + ((tooltipOffset.width / 2) + 18) + 'px';\n helperNumberLayer.style.top = '-' + ((tooltipOffset.height / 2) + 18) + 'px';\n }\n\n break;\n case 'bottom-right-aligned':\n arrowLayer.className = 'introjs-arrow top-right';\n\n tooltipLayerStyleRight = 0;\n _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer);\n tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n break;\n\n case 'bottom-middle-aligned':\n arrowLayer.className = 'introjs-arrow top-middle';\n\n tooltipLayerStyleLeftRight = targetOffset.width / 2 - tooltipOffset.width / 2;\n\n // a fix for middle aligned hints\n if (hintMode) {\n tooltipLayerStyleLeftRight += 5;\n }\n\n if (_checkLeft(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, tooltipLayer)) {\n tooltipLayer.style.right = null;\n _checkRight(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, windowSize, tooltipLayer);\n }\n tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n break;\n\n // case 'bottom-left-aligned':\n // Bottom-left-aligned is the same as the default bottom\n // case 'bottom':\n // Bottom going to follow the default behavior\n default:\n arrowLayer.className = 'introjs-arrow top';\n\n tooltipLayerStyleLeft = 0;\n _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer);\n tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n }\n }\n\n /**\n * Set tooltip left so it doesn't go off the right side of the window\n *\n * @return boolean true, if tooltipLayerStyleLeft is ok. false, otherwise.\n */\n function _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer) {\n if (targetOffset.left + tooltipLayerStyleLeft + tooltipOffset.width > windowSize.width) {\n // off the right side of the window\n tooltipLayer.style.left = (windowSize.width - tooltipOffset.width - targetOffset.left) + 'px';\n return false;\n }\n tooltipLayer.style.left = tooltipLayerStyleLeft + 'px';\n return true;\n }\n\n /**\n * Set tooltip right so it doesn't go off the left side of the window\n *\n * @return boolean true, if tooltipLayerStyleRight is ok. false, otherwise.\n */\n function _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer) {\n if (targetOffset.left + targetOffset.width - tooltipLayerStyleRight - tooltipOffset.width < 0) {\n // off the left side of the window\n tooltipLayer.style.left = (-targetOffset.left) + 'px';\n return false;\n }\n tooltipLayer.style.right = tooltipLayerStyleRight + 'px';\n return true;\n }\n\n /**\n * Determines the position of the tooltip based on the position precedence and availability\n * of screen space.\n *\n * @param {Object} targetElement\n * @param {Object} tooltipLayer\n * @param {String} desiredTooltipPosition\n * @return {String} calculatedPosition\n */\n function _determineAutoPosition(targetElement, tooltipLayer, desiredTooltipPosition) {\n\n // Take a clone of position precedence. These will be the available\n var possiblePositions = this._options.positionPrecedence.slice();\n\n var windowSize = _getWinSize();\n var tooltipHeight = _getOffset(tooltipLayer).height + 10;\n var tooltipWidth = _getOffset(tooltipLayer).width + 20;\n var targetElementRect = targetElement.getBoundingClientRect();\n\n // If we check all the possible areas, and there are no valid places for the tooltip, the element\n // must take up most of the screen real estate. Show the tooltip floating in the middle of the screen.\n var calculatedPosition = \"floating\";\n\n /*\n * auto determine position \n */\n\n // Check for space below\n if (targetElementRect.bottom + tooltipHeight + tooltipHeight > windowSize.height) {\n _removeEntry(possiblePositions, \"bottom\");\n }\n\n // Check for space above\n if (targetElementRect.top - tooltipHeight < 0) {\n _removeEntry(possiblePositions, \"top\");\n }\n\n // Check for space to the right\n if (targetElementRect.right + tooltipWidth > windowSize.width) {\n _removeEntry(possiblePositions, \"right\");\n }\n\n // Check for space to the left\n if (targetElementRect.left - tooltipWidth < 0) {\n _removeEntry(possiblePositions, \"left\");\n }\n\n // @var {String} ex: 'right-aligned'\n var desiredAlignment = (function (pos) {\n var hyphenIndex = pos.indexOf('-');\n if (hyphenIndex !== -1) {\n // has alignment\n return pos.substr(hyphenIndex);\n }\n return '';\n })(desiredTooltipPosition || '');\n\n // strip alignment from position\n if (desiredTooltipPosition) {\n // ex: \"bottom-right-aligned\"\n // should return 'bottom'\n desiredTooltipPosition = desiredTooltipPosition.split('-')[0];\n }\n\n if (possiblePositions.length) {\n if (desiredTooltipPosition !== \"auto\" &&\n possiblePositions.indexOf(desiredTooltipPosition) > -1) {\n // If the requested position is in the list, choose that\n calculatedPosition = desiredTooltipPosition;\n } else {\n // Pick the first valid position, in order\n calculatedPosition = possiblePositions[0];\n }\n }\n\n // only top and bottom positions have optional alignments\n if (['top', 'bottom'].indexOf(calculatedPosition) !== -1) {\n calculatedPosition += _determineAutoAlignment(targetElementRect.left, tooltipWidth, windowSize, desiredAlignment);\n }\n\n return calculatedPosition;\n }\n\n /**\n * auto-determine alignment\n * @param {Integer} offsetLeft\n * @param {Integer} tooltipWidth\n * @param {Object} windowSize\n * @param {String} desiredAlignment\n * @return {String} calculatedAlignment\n */\n function _determineAutoAlignment (offsetLeft, tooltipWidth, windowSize, desiredAlignment) {\n var halfTooltipWidth = tooltipWidth / 2,\n winWidth = Math.min(windowSize.width, window.screen.width),\n possibleAlignments = ['-left-aligned', '-middle-aligned', '-right-aligned'],\n calculatedAlignment = '';\n \n // valid left must be at least a tooltipWidth\n // away from right side\n if (winWidth - offsetLeft < tooltipWidth) {\n _removeEntry(possibleAlignments, '-left-aligned');\n }\n\n // valid middle must be at least half \n // width away from both sides\n if (offsetLeft < halfTooltipWidth || \n winWidth - offsetLeft < halfTooltipWidth) {\n _removeEntry(possibleAlignments, '-middle-aligned');\n }\n\n // valid right must be at least a tooltipWidth\n // width away from left side\n if (offsetLeft < tooltipWidth) {\n _removeEntry(possibleAlignments, '-right-aligned');\n }\n\n if (possibleAlignments.length) {\n if (possibleAlignments.indexOf(desiredAlignment) !== -1) {\n // the desired alignment is valid\n calculatedAlignment = desiredAlignment;\n } else {\n // pick the first valid position, in order\n calculatedAlignment = possibleAlignments[0];\n }\n } else {\n // if screen width is too small \n // for ANY alignment, middle is \n // probably the best for visibility\n calculatedAlignment = '-middle-aligned';\n }\n\n return calculatedAlignment;\n }\n\n /**\n * Remove an entry from a string array if it's there, does nothing if it isn't there.\n *\n * @param {Array} stringArray\n * @param {String} stringToRemove\n */\n function _removeEntry(stringArray, stringToRemove) {\n if (stringArray.indexOf(stringToRemove) > -1) {\n stringArray.splice(stringArray.indexOf(stringToRemove), 1);\n }\n }\n\n /**\n * Update the position of the helper layer on the screen\n *\n * @api private\n * @method _setHelperLayerPosition\n * @param {Object} helperLayer\n */\n function _setHelperLayerPosition(helperLayer) {\n if (helperLayer) {\n //prevent error when `this._currentStep` in undefined\n if (!this._introItems[this._currentStep]) return;\n\n var currentElement = this._introItems[this._currentStep],\n elementPosition = _getOffset(currentElement.element),\n widthHeightPadding = this._options.helperElementPadding;\n\n // If the target element is fixed, the tooltip should be fixed as well.\n // Otherwise, remove a fixed class that may be left over from the previous\n // step.\n if (_isFixed(currentElement.element)) {\n _addClass(helperLayer, 'introjs-fixedTooltip');\n } else {\n _removeClass(helperLayer, 'introjs-fixedTooltip');\n }\n\n if (currentElement.position === 'floating') {\n widthHeightPadding = 0;\n }\n\n //set new position to helper layer\n helperLayer.style.cssText = 'width: ' + (elementPosition.width + widthHeightPadding) + 'px; ' +\n 'height:' + (elementPosition.height + widthHeightPadding) + 'px; ' +\n 'top:' + (elementPosition.top - widthHeightPadding / 2) + 'px;' +\n 'left: ' + (elementPosition.left - widthHeightPadding / 2) + 'px;';\n\n }\n }\n\n /**\n * Add disableinteraction layer and adjust the size and position of the layer\n *\n * @api private\n * @method _disableInteraction\n */\n function _disableInteraction() {\n var disableInteractionLayer = document.querySelector('.introjs-disableInteraction');\n\n if (disableInteractionLayer === null) {\n disableInteractionLayer = document.createElement('div');\n disableInteractionLayer.className = 'introjs-disableInteraction';\n this._targetElement.appendChild(disableInteractionLayer);\n }\n\n _setHelperLayerPosition.call(this, disableInteractionLayer);\n }\n\n /**\n * Setting anchors to behave like buttons\n *\n * @api private\n * @method _setAnchorAsButton\n */\n function _setAnchorAsButton(anchor){\n anchor.setAttribute('role', 'button');\n anchor.tabIndex = 0;\n }\n\n /**\n * Show an element on the page\n *\n * @api private\n * @method _showElement\n * @param {Object} targetElement\n */\n function _showElement(targetElement) {\n if (typeof (this._introChangeCallback) !== 'undefined') {\n this._introChangeCallback.call(this, targetElement.element);\n }\n\n var self = this,\n oldHelperLayer = document.querySelector('.introjs-helperLayer'),\n oldReferenceLayer = document.querySelector('.introjs-tooltipReferenceLayer'),\n highlightClass = 'introjs-helperLayer',\n nextTooltipButton,\n prevTooltipButton,\n skipTooltipButton,\n scrollParent;\n\n //check for a current step highlight class\n if (typeof (targetElement.highlightClass) === 'string') {\n highlightClass += (' ' + targetElement.highlightClass);\n }\n //check for options highlight class\n if (typeof (this._options.highlightClass) === 'string') {\n highlightClass += (' ' + this._options.highlightClass);\n }\n\n if (oldHelperLayer !== null) {\n var oldHelperNumberLayer = oldReferenceLayer.querySelector('.introjs-helperNumberLayer'),\n oldtooltipLayer = oldReferenceLayer.querySelector('.introjs-tooltiptext'),\n oldArrowLayer = oldReferenceLayer.querySelector('.introjs-arrow'),\n oldtooltipContainer = oldReferenceLayer.querySelector('.introjs-tooltip');\n \n skipTooltipButton = oldReferenceLayer.querySelector('.introjs-skipbutton');\n prevTooltipButton = oldReferenceLayer.querySelector('.introjs-prevbutton');\n nextTooltipButton = oldReferenceLayer.querySelector('.introjs-nextbutton');\n\n //update or reset the helper highlight class\n oldHelperLayer.className = highlightClass;\n //hide the tooltip\n oldtooltipContainer.style.opacity = 0;\n oldtooltipContainer.style.display = \"none\";\n\n if (oldHelperNumberLayer !== null) {\n var lastIntroItem = this._introItems[(targetElement.step - 2 >= 0 ? targetElement.step - 2 : 0)];\n\n if (lastIntroItem !== null && (this._direction === 'forward' && lastIntroItem.position === 'floating') || (this._direction === 'backward' && targetElement.position === 'floating')) {\n oldHelperNumberLayer.style.opacity = 0;\n }\n }\n\n // scroll to element\n scrollParent = _getScrollParent( targetElement.element );\n\n if (scrollParent !== document.body) {\n // target is within a scrollable element\n _scrollParentToElement(scrollParent, targetElement.element);\n }\n\n // set new position to helper layer\n _setHelperLayerPosition.call(self, oldHelperLayer);\n _setHelperLayerPosition.call(self, oldReferenceLayer);\n\n //remove `introjs-fixParent` class from the elements\n var fixParents = document.querySelectorAll('.introjs-fixParent');\n _forEach(fixParents, function (parent) {\n _removeClass(parent, /introjs-fixParent/g);\n });\n \n //remove old classes if the element still exist\n _removeShowElement();\n\n //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation\n if (self._lastShowElementTimer) {\n window.clearTimeout(self._lastShowElementTimer);\n }\n\n self._lastShowElementTimer = window.setTimeout(function() {\n //set current step to the label\n if (oldHelperNumberLayer !== null) {\n oldHelperNumberLayer.innerHTML = targetElement.step;\n }\n //set current tooltip text\n oldtooltipLayer.innerHTML = targetElement.intro;\n //set the tooltip position\n oldtooltipContainer.style.display = \"block\";\n _placeTooltip.call(self, targetElement.element, oldtooltipContainer, oldArrowLayer, oldHelperNumberLayer);\n\n //change active bullet\n if (self._options.showBullets) {\n oldReferenceLayer.querySelector('.introjs-bullets li > a.active').className = '';\n oldReferenceLayer.querySelector('.introjs-bullets li > a[data-stepnumber=\"' + targetElement.step + '\"]').className = 'active';\n }\n oldReferenceLayer.querySelector('.introjs-progress .introjs-progressbar').style.cssText = 'width:' + _getProgress.call(self) + '%;';\n oldReferenceLayer.querySelector('.introjs-progress .introjs-progressbar').setAttribute('aria-valuenow', _getProgress.call(self));\n\n //show the tooltip\n oldtooltipContainer.style.opacity = 1;\n if (oldHelperNumberLayer) oldHelperNumberLayer.style.opacity = 1;\n\n //reset button focus\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null && /introjs-donebutton/gi.test(skipTooltipButton.className)) {\n // skip button is now \"done\" button\n skipTooltipButton.focus();\n } else if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n //still in the tour, focus on next\n nextTooltipButton.focus();\n }\n\n // change the scroll of the window, if needed\n _scrollTo.call(self, targetElement.scrollTo, targetElement, oldtooltipLayer);\n }, 350);\n\n // end of old element if-else condition\n } else {\n var helperLayer = document.createElement('div'),\n referenceLayer = document.createElement('div'),\n arrowLayer = document.createElement('div'),\n tooltipLayer = document.createElement('div'),\n tooltipTextLayer = document.createElement('div'),\n bulletsLayer = document.createElement('div'),\n progressLayer = document.createElement('div'),\n buttonsLayer = document.createElement('div');\n\n helperLayer.className = highlightClass;\n referenceLayer.className = 'introjs-tooltipReferenceLayer';\n\n // scroll to element\n scrollParent = _getScrollParent( targetElement.element );\n\n if (scrollParent !== document.body) {\n // target is within a scrollable element\n _scrollParentToElement(scrollParent, targetElement.element);\n }\n\n //set new position to helper layer\n _setHelperLayerPosition.call(self, helperLayer);\n _setHelperLayerPosition.call(self, referenceLayer);\n\n //add helper layer to target element\n this._targetElement.appendChild(helperLayer);\n this._targetElement.appendChild(referenceLayer);\n\n arrowLayer.className = 'introjs-arrow';\n\n tooltipTextLayer.className = 'introjs-tooltiptext';\n tooltipTextLayer.innerHTML = targetElement.intro;\n\n bulletsLayer.className = 'introjs-bullets';\n\n if (this._options.showBullets === false) {\n bulletsLayer.style.display = 'none';\n }\n\n var ulContainer = document.createElement('ul');\n ulContainer.setAttribute('role', 'tablist');\n\n var anchorClick = function () {\n self.goToStep(this.getAttribute('data-stepnumber'));\n };\n\n _forEach(this._introItems, function (item, i) {\n var innerLi = document.createElement('li');\n var anchorLink = document.createElement('a');\n \n innerLi.setAttribute('role', 'presentation');\n anchorLink.setAttribute('role', 'tab');\n\n anchorLink.onclick = anchorClick;\n\n if (i === (targetElement.step-1)) {\n anchorLink.className = 'active';\n } \n\n _setAnchorAsButton(anchorLink);\n anchorLink.innerHTML = \" \";\n anchorLink.setAttribute('data-stepnumber', item.step);\n\n innerLi.appendChild(anchorLink);\n ulContainer.appendChild(innerLi);\n });\n\n bulletsLayer.appendChild(ulContainer);\n\n progressLayer.className = 'introjs-progress';\n\n if (this._options.showProgress === false) {\n progressLayer.style.display = 'none';\n }\n var progressBar = document.createElement('div');\n progressBar.className = 'introjs-progressbar';\n progressBar.setAttribute('role', 'progress');\n progressBar.setAttribute('aria-valuemin', 0);\n progressBar.setAttribute('aria-valuemax', 100);\n progressBar.setAttribute('aria-valuenow', _getProgress.call(this));\n progressBar.style.cssText = 'width:' + _getProgress.call(this) + '%;';\n\n progressLayer.appendChild(progressBar);\n\n buttonsLayer.className = 'introjs-tooltipbuttons';\n if (this._options.showButtons === false) {\n buttonsLayer.style.display = 'none';\n }\n\n tooltipLayer.className = 'introjs-tooltip';\n tooltipLayer.appendChild(tooltipTextLayer);\n tooltipLayer.appendChild(bulletsLayer);\n tooltipLayer.appendChild(progressLayer);\n\n //add helper layer number\n var helperNumberLayer = document.createElement('span');\n if (this._options.showStepNumbers === true) {\n helperNumberLayer.className = 'introjs-helperNumberLayer';\n helperNumberLayer.innerHTML = targetElement.step;\n referenceLayer.appendChild(helperNumberLayer);\n }\n\n tooltipLayer.appendChild(arrowLayer);\n referenceLayer.appendChild(tooltipLayer);\n\n //next button\n nextTooltipButton = document.createElement('a');\n\n nextTooltipButton.onclick = function() {\n if (self._introItems.length - 1 !== self._currentStep) {\n _nextStep.call(self);\n }\n };\n\n _setAnchorAsButton(nextTooltipButton);\n nextTooltipButton.innerHTML = this._options.nextLabel;\n\n //previous button\n prevTooltipButton = document.createElement('a');\n\n prevTooltipButton.onclick = function() {\n if (self._currentStep !== 0) {\n _previousStep.call(self);\n }\n };\n\n _setAnchorAsButton(prevTooltipButton);\n prevTooltipButton.innerHTML = this._options.prevLabel;\n\n //skip button\n skipTooltipButton = document.createElement('a');\n skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton ';\n _setAnchorAsButton(skipTooltipButton);\n skipTooltipButton.innerHTML = this._options.skipLabel;\n\n skipTooltipButton.onclick = function() {\n if (self._introItems.length - 1 === self._currentStep && typeof (self._introCompleteCallback) === 'function') {\n self._introCompleteCallback.call(self);\n }\n\n if (self._introItems.length - 1 !== self._currentStep && typeof (self._introExitCallback) === 'function') {\n self._introExitCallback.call(self);\n }\n\n if (typeof(self._introSkipCallback) === 'function') {\n self._introSkipCallback.call(self);\n }\n\n _exitIntro.call(self, self._targetElement);\n };\n\n buttonsLayer.appendChild(skipTooltipButton);\n\n //in order to prevent displaying next/previous button always\n if (this._introItems.length > 1) {\n buttonsLayer.appendChild(prevTooltipButton);\n buttonsLayer.appendChild(nextTooltipButton);\n }\n\n tooltipLayer.appendChild(buttonsLayer);\n\n //set proper position\n _placeTooltip.call(self, targetElement.element, tooltipLayer, arrowLayer, helperNumberLayer);\n\n // change the scroll of the window, if needed\n _scrollTo.call(this, targetElement.scrollTo, targetElement, tooltipLayer);\n\n //end of new element if-else condition\n }\n\n // removing previous disable interaction layer\n var disableInteractionLayer = self._targetElement.querySelector('.introjs-disableInteraction');\n if (disableInteractionLayer) {\n disableInteractionLayer.parentNode.removeChild(disableInteractionLayer);\n }\n\n //disable interaction\n if (targetElement.disableInteraction) {\n _disableInteraction.call(self);\n }\n\n // when it's the first step of tour\n if (this._currentStep === 0 && this._introItems.length > 1) {\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton';\n }\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton';\n }\n\n if (this._options.hidePrev === true) {\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton introjs-hidden';\n }\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n _addClass(nextTooltipButton, 'introjs-fullbutton');\n }\n } else {\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton introjs-disabled';\n }\n }\n\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.innerHTML = this._options.skipLabel;\n }\n } else if (this._introItems.length - 1 === this._currentStep || this._introItems.length === 1) {\n // last step of tour\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.innerHTML = this._options.doneLabel;\n // adding donebutton class in addition to skipbutton\n _addClass(skipTooltipButton, 'introjs-donebutton');\n }\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton';\n }\n\n if (this._options.hideNext === true) {\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton introjs-hidden';\n }\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n _addClass(prevTooltipButton, 'introjs-fullbutton');\n }\n } else {\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton introjs-disabled';\n }\n }\n } else {\n // steps between start and end\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton';\n }\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton';\n }\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton';\n }\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.innerHTML = this._options.skipLabel;\n }\n }\n\n prevTooltipButton.setAttribute('role', 'button');\n nextTooltipButton.setAttribute('role', 'button');\n skipTooltipButton.setAttribute('role', 'button');\n\n //Set focus on \"next\" button, so that hitting Enter always moves you onto the next step\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.focus();\n }\n\n _setShowElement(targetElement);\n\n if (typeof (this._introAfterChangeCallback) !== 'undefined') {\n this._introAfterChangeCallback.call(this, targetElement.element);\n }\n }\n\n /**\n * To change the scroll of `window` after highlighting an element\n *\n * @api private\n * @method _scrollTo\n * @param {String} scrollTo\n * @param {Object} targetElement\n * @param {Object} tooltipLayer\n */\n function _scrollTo(scrollTo, targetElement, tooltipLayer) {\n if (scrollTo === 'off') return; \n var rect;\n\n if (!this._options.scrollToElement) return;\n\n if (scrollTo === 'tooltip') {\n rect = tooltipLayer.getBoundingClientRect();\n } else {\n rect = targetElement.element.getBoundingClientRect();\n }\n\n if (!_elementInViewport(targetElement.element)) {\n var winHeight = _getWinSize().height;\n var top = rect.bottom - (rect.bottom - rect.top);\n\n // TODO (afshinm): do we need scroll padding now?\n // I have changed the scroll option and now it scrolls the window to\n // the center of the target element or tooltip.\n\n if (top < 0 || targetElement.element.clientHeight > winHeight) {\n window.scrollBy(0, rect.top - ((winHeight / 2) - (rect.height / 2)) - this._options.scrollPadding); // 30px padding from edge to look nice\n\n //Scroll down\n } else {\n window.scrollBy(0, rect.top - ((winHeight / 2) - (rect.height / 2)) + this._options.scrollPadding); // 30px padding from edge to look nice\n }\n }\n }\n\n /**\n * To remove all show element(s)\n *\n * @api private\n * @method _removeShowElement\n */\n function _removeShowElement() {\n var elms = document.querySelectorAll('.introjs-showElement');\n\n _forEach(elms, function (elm) {\n _removeClass(elm, /introjs-[a-zA-Z]+/g);\n });\n }\n\n /**\n * To set the show element\n * This function set a relative (in most cases) position and changes the z-index\n *\n * @api private\n * @method _setShowElement\n * @param {Object} targetElement\n */\n function _setShowElement(targetElement) {\n var parentElm;\n // we need to add this show element class to the parent of SVG elements\n // because the SVG elements can't have independent z-index\n if (targetElement.element instanceof SVGElement) {\n parentElm = targetElement.element.parentNode;\n\n while (targetElement.element.parentNode !== null) {\n if (!parentElm.tagName || parentElm.tagName.toLowerCase() === 'body') break;\n\n if (parentElm.tagName.toLowerCase() === 'svg') {\n _addClass(parentElm, 'introjs-showElement introjs-relativePosition');\n }\n\n parentElm = parentElm.parentNode;\n }\n }\n\n _addClass(targetElement.element, 'introjs-showElement');\n\n var currentElementPosition = _getPropValue(targetElement.element, 'position');\n if (currentElementPosition !== 'absolute' &&\n currentElementPosition !== 'relative' &&\n currentElementPosition !== 'fixed') {\n //change to new intro item\n _addClass(targetElement.element, 'introjs-relativePosition');\n }\n\n parentElm = targetElement.element.parentNode;\n while (parentElm !== null) {\n if (!parentElm.tagName || parentElm.tagName.toLowerCase() === 'body') break;\n\n //fix The Stacking Context problem.\n //More detail: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context\n var zIndex = _getPropValue(parentElm, 'z-index');\n var opacity = parseFloat(_getPropValue(parentElm, 'opacity'));\n var transform = _getPropValue(parentElm, 'transform') || _getPropValue(parentElm, '-webkit-transform') || _getPropValue(parentElm, '-moz-transform') || _getPropValue(parentElm, '-ms-transform') || _getPropValue(parentElm, '-o-transform');\n if (/[0-9]+/.test(zIndex) || opacity < 1 || (transform !== 'none' && transform !== undefined)) {\n _addClass(parentElm, 'introjs-fixParent');\n }\n\n parentElm = parentElm.parentNode;\n }\n }\n\n /**\n * Iterates arrays\n *\n * @param {Array} arr\n * @param {Function} forEachFnc\n * @param {Function} completeFnc\n * @return {Null}\n */\n function _forEach(arr, forEachFnc, completeFnc) {\n // in case arr is an empty query selector node list\n if (arr) {\n for (var i = 0, len = arr.length; i < len; i++) {\n forEachFnc(arr[i], i);\n }\n }\n\n if (typeof(completeFnc) === 'function') {\n completeFnc();\n }\n }\n\n /**\n * Mark any object with an incrementing number\n * used for keeping track of objects\n *\n * @param Object obj Any object or DOM Element\n * @param String key\n * @return Object\n */\n var _stamp = (function () {\n var keys = {};\n return function stamp (obj, key) {\n \n // get group key\n key = key || 'introjs-stamp';\n\n // each group increments from 0\n keys[key] = keys[key] || 0;\n\n // stamp only once per object\n if (obj[key] === undefined) {\n // increment key for each new object\n obj[key] = keys[key]++;\n }\n\n return obj[key];\n };\n })();\n\n /**\n * DOMEvent Handles all DOM events\n *\n * methods:\n *\n * on - add event handler\n * off - remove event\n */\n var DOMEvent = (function () {\n function DOMEvent () {\n var events_key = 'introjs_event';\n \n /**\n * Gets a unique ID for an event listener\n *\n * @param Object obj\n * @param String type event type\n * @param Function listener\n * @param Object context\n * @return String\n */\n this._id = function (obj, type, listener, context) {\n return type + _stamp(listener) + (context ? '_' + _stamp(context) : '');\n };\n\n /**\n * Adds event listener\n *\n * @param Object obj\n * @param String type event type\n * @param Function listener\n * @param Object context\n * @param Boolean useCapture\n * @return null\n */\n this.on = function (obj, type, listener, context, useCapture) {\n var id = this._id.apply(this, arguments),\n handler = function (e) {\n return listener.call(context || obj, e || window.event);\n };\n\n if ('addEventListener' in obj) {\n obj.addEventListener(type, handler, useCapture);\n } else if ('attachEvent' in obj) {\n obj.attachEvent('on' + type, handler);\n }\n\n obj[events_key] = obj[events_key] || {};\n obj[events_key][id] = handler;\n };\n\n /**\n * Removes event listener\n *\n * @param Object obj\n * @param String type event type\n * @param Function listener\n * @param Object context\n * @param Boolean useCapture\n * @return null\n */\n this.off = function (obj, type, listener, context, useCapture) {\n var id = this._id.apply(this, arguments),\n handler = obj[events_key] && obj[events_key][id];\n\n if (!handler) {\n return;\n }\n\n if ('removeEventListener' in obj) {\n obj.removeEventListener(type, handler, useCapture);\n } else if ('detachEvent' in obj) {\n obj.detachEvent('on' + type, handler);\n }\n\n obj[events_key][id] = null;\n };\n }\n\n return new DOMEvent();\n })();\n\n /**\n * Append a class to an element\n *\n * @api private\n * @method _addClass\n * @param {Object} element\n * @param {String} className\n * @returns null\n */\n function _addClass(element, className) {\n if (element instanceof SVGElement) {\n // svg\n var pre = element.getAttribute('class') || '';\n\n element.setAttribute('class', pre + ' ' + className);\n } else {\n if (element.classList !== undefined) {\n // check for modern classList property\n var classes = className.split(' ');\n _forEach(classes, function (cls) {\n element.classList.add( cls );\n });\n } else if (!element.className.match( className )) {\n // check if element doesn't already have className\n element.className += ' ' + className;\n }\n }\n }\n\n /**\n * Remove a class from an element\n *\n * @api private\n * @method _removeClass\n * @param {Object} element\n * @param {RegExp|String} classNameRegex can be regex or string\n * @returns null\n */\n function _removeClass(element, classNameRegex) {\n if (element instanceof SVGElement) {\n var pre = element.getAttribute('class') || '';\n\n element.setAttribute('class', pre.replace(classNameRegex, '').replace(/^\\s+|\\s+$/g, ''));\n } else {\n element.className = element.className.replace(classNameRegex, '').replace(/^\\s+|\\s+$/g, '');\n }\n }\n\n /**\n * Get an element CSS property on the page\n * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml\n *\n * @api private\n * @method _getPropValue\n * @param {Object} element\n * @param {String} propName\n * @returns Element's property value\n */\n function _getPropValue (element, propName) {\n var propValue = '';\n if (element.currentStyle) { //IE\n propValue = element.currentStyle[propName];\n } else if (document.defaultView && document.defaultView.getComputedStyle) { //Others\n propValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propName);\n }\n\n //Prevent exception in IE\n if (propValue && propValue.toLowerCase) {\n return propValue.toLowerCase();\n } else {\n return propValue;\n }\n }\n\n /**\n * Checks to see if target element (or parents) position is fixed or not\n *\n * @api private\n * @method _isFixed\n * @param {Object} element\n * @returns Boolean\n */\n function _isFixed (element) {\n var p = element.parentNode;\n\n if (!p || p.nodeName === 'HTML') {\n return false;\n }\n\n if (_getPropValue(element, 'position') === 'fixed') {\n return true;\n }\n\n return _isFixed(p);\n }\n\n /**\n * Provides a cross-browser way to get the screen dimensions\n * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight\n *\n * @api private\n * @method _getWinSize\n * @returns {Object} width and height attributes\n */\n function _getWinSize() {\n if (window.innerWidth !== undefined) {\n return { width: window.innerWidth, height: window.innerHeight };\n } else {\n var D = document.documentElement;\n return { width: D.clientWidth, height: D.clientHeight };\n }\n }\n\n /**\n * Check to see if the element is in the viewport or not\n * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport\n *\n * @api private\n * @method _elementInViewport\n * @param {Object} el\n */\n function _elementInViewport(el) {\n var rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n (rect.bottom+80) <= window.innerHeight && // add 80 to get the text right\n rect.right <= window.innerWidth\n );\n }\n\n /**\n * Add overlay layer to the page\n *\n * @api private\n * @method _addOverlayLayer\n * @param {Object} targetElm\n */\n function _addOverlayLayer(targetElm) {\n var overlayLayer = document.createElement('div'),\n styleText = '',\n self = this;\n\n //set css class name\n overlayLayer.className = 'introjs-overlay';\n\n //check if the target element is body, we should calculate the size of overlay layer in a better way\n if (!targetElm.tagName || targetElm.tagName.toLowerCase() === 'body') {\n styleText += 'top: 0;bottom: 0; left: 0;right: 0;position: fixed;';\n overlayLayer.style.cssText = styleText;\n } else {\n //set overlay layer position\n var elementPosition = _getOffset(targetElm);\n if (elementPosition) {\n styleText += 'width: ' + elementPosition.width + 'px; height:' + elementPosition.height + 'px; top:' + elementPosition.top + 'px;left: ' + elementPosition.left + 'px;';\n overlayLayer.style.cssText = styleText;\n }\n }\n\n targetElm.appendChild(overlayLayer);\n\n overlayLayer.onclick = function() {\n if (self._options.exitOnOverlayClick === true) {\n _exitIntro.call(self, targetElm);\n }\n };\n\n window.setTimeout(function() {\n styleText += 'opacity: ' + self._options.overlayOpacity.toString() + ';';\n overlayLayer.style.cssText = styleText;\n }, 10);\n\n return true;\n }\n\n /**\n * Removes open hint (tooltip hint)\n *\n * @api private\n * @method _removeHintTooltip\n */\n function _removeHintTooltip() {\n var tooltip = document.querySelector('.introjs-hintReference');\n\n if (tooltip) {\n var step = tooltip.getAttribute('data-step');\n tooltip.parentNode.removeChild(tooltip);\n return step;\n }\n }\n\n /**\n * Start parsing hint items\n *\n * @api private\n * @param {Object} targetElm\n * @method _startHint\n */\n function _populateHints(targetElm) {\n\n this._introItems = [];\n\n if (this._options.hints) {\n _forEach(this._options.hints, function (hint) {\n var currentItem = _cloneObject(hint);\n\n if (typeof(currentItem.element) === 'string') {\n //grab the element with given selector from the page\n currentItem.element = document.querySelector(currentItem.element);\n }\n\n currentItem.hintPosition = currentItem.hintPosition || this._options.hintPosition;\n currentItem.hintAnimation = currentItem.hintAnimation || this._options.hintAnimation;\n\n if (currentItem.element !== null) {\n this._introItems.push(currentItem);\n }\n }.bind(this));\n } else {\n var hints = targetElm.querySelectorAll('*[data-hint]');\n\n if (!hints || !hints.length) {\n return false;\n }\n\n //first add intro items with data-step\n _forEach(hints, function (currentElement) {\n // hint animation\n var hintAnimation = currentElement.getAttribute('data-hintanimation');\n\n if (hintAnimation) {\n hintAnimation = (hintAnimation === 'true');\n } else {\n hintAnimation = this._options.hintAnimation;\n }\n\n this._introItems.push({\n element: currentElement,\n hint: currentElement.getAttribute('data-hint'),\n hintPosition: currentElement.getAttribute('data-hintposition') || this._options.hintPosition,\n hintAnimation: hintAnimation,\n tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n position: currentElement.getAttribute('data-position') || this._options.tooltipPosition\n });\n }.bind(this));\n }\n\n _addHints.call(this);\n\n /* \n todo:\n these events should be removed at some point \n */\n DOMEvent.on(document, 'click', _removeHintTooltip, this, false);\n DOMEvent.on(window, 'resize', _reAlignHints, this, true);\n }\n\n /**\n * Re-aligns all hint elements\n *\n * @api private\n * @method _reAlignHints\n */\n function _reAlignHints() {\n _forEach(this._introItems, function (item) {\n if (typeof(item.targetElement) === 'undefined') {\n return;\n }\n\n _alignHintPosition.call(this, item.hintPosition, item.element, item.targetElement);\n }.bind(this));\n }\n\n /**\n * Get a queryselector within the hint wrapper\n *\n * @param {String} selector\n * @return {NodeList|Array}\n */\n function _hintQuerySelectorAll(selector) {\n var hintsWrapper = document.querySelector('.introjs-hints');\n return (hintsWrapper) ? hintsWrapper.querySelectorAll(selector) : [];\n }\n\n /**\n * Hide a hint\n *\n * @api private\n * @method _hideHint\n */\n function _hideHint(stepId) {\n var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n \n _removeHintTooltip.call(this);\n\n if (hint) {\n _addClass(hint, 'introjs-hidehint');\n }\n\n // call the callback function (if any)\n if (typeof (this._hintCloseCallback) !== 'undefined') {\n this._hintCloseCallback.call(this, stepId);\n }\n }\n\n /**\n * Hide all hints\n *\n * @api private\n * @method _hideHints\n */\n function _hideHints() {\n var hints = _hintQuerySelectorAll('.introjs-hint');\n\n _forEach(hints, function (hint) {\n _hideHint.call(this, hint.getAttribute('data-step'));\n }.bind(this));\n }\n\n /**\n * Show all hints\n *\n * @api private\n * @method _showHints\n */\n function _showHints() {\n var hints = _hintQuerySelectorAll('.introjs-hint');\n\n if (hints && hints.length) {\n _forEach(hints, function (hint) {\n _showHint.call(this, hint.getAttribute('data-step'));\n }.bind(this));\n } else {\n _populateHints.call(this, this._targetElement);\n }\n }\n\n /**\n * Show a hint\n *\n * @api private\n * @method _showHint\n */\n function _showHint(stepId) {\n var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n\n if (hint) {\n _removeClass(hint, /introjs-hidehint/g);\n }\n }\n\n /**\n * Removes all hint elements on the page\n * Useful when you want to destroy the elements and add them again (e.g. a modal or popup)\n *\n * @api private\n * @method _removeHints\n */\n function _removeHints() {\n var hints = _hintQuerySelectorAll('.introjs-hint');\n\n _forEach(hints, function (hint) {\n _removeHint.call(this, hint.getAttribute('data-step'));\n }.bind(this));\n }\n\n /**\n * Remove one single hint element from the page\n * Useful when you want to destroy the element and add them again (e.g. a modal or popup)\n * Use removeHints if you want to remove all elements.\n *\n * @api private\n * @method _removeHint\n */\n function _removeHint(stepId) {\n var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n\n if (hint) {\n hint.parentNode.removeChild(hint);\n }\n }\n\n /**\n * Add all available hints to the page\n *\n * @api private\n * @method _addHints\n */\n function _addHints() {\n var self = this;\n\n var hintsWrapper = document.querySelector('.introjs-hints');\n\n if (hintsWrapper === null) {\n hintsWrapper = document.createElement('div');\n hintsWrapper.className = 'introjs-hints';\n }\n\n /**\n * Returns an event handler unique to the hint iteration\n * \n * @param {Integer} i\n * @return {Function}\n */\n var getHintClick = function (i) {\n return function(e) {\n var evt = e ? e : window.event;\n \n if (evt.stopPropagation) {\n evt.stopPropagation();\n }\n\n if (evt.cancelBubble !== null) {\n evt.cancelBubble = true;\n }\n\n _showHintDialog.call(self, i);\n };\n };\n\n _forEach(this._introItems, function(item, i) {\n // avoid append a hint twice\n if (document.querySelector('.introjs-hint[data-step=\"' + i + '\"]')) {\n return;\n }\n\n var hint = document.createElement('a');\n _setAnchorAsButton(hint);\n\n hint.onclick = getHintClick(i);\n\n hint.className = 'introjs-hint';\n\n if (!item.hintAnimation) {\n _addClass(hint, 'introjs-hint-no-anim');\n }\n\n // hint's position should be fixed if the target element's position is fixed\n if (_isFixed(item.element)) {\n _addClass(hint, 'introjs-fixedhint');\n }\n\n var hintDot = document.createElement('div');\n hintDot.className = 'introjs-hint-dot';\n var hintPulse = document.createElement('div');\n hintPulse.className = 'introjs-hint-pulse';\n\n hint.appendChild(hintDot);\n hint.appendChild(hintPulse);\n hint.setAttribute('data-step', i);\n\n // we swap the hint element with target element\n // because _setHelperLayerPosition uses `element` property\n item.targetElement = item.element;\n item.element = hint;\n\n // align the hint position\n _alignHintPosition.call(this, item.hintPosition, hint, item.targetElement);\n\n hintsWrapper.appendChild(hint);\n }.bind(this));\n\n // adding the hints wrapper\n document.body.appendChild(hintsWrapper);\n\n // call the callback function (if any)\n if (typeof (this._hintsAddedCallback) !== 'undefined') {\n this._hintsAddedCallback.call(this);\n }\n }\n\n /**\n * Aligns hint position\n *\n * @api private\n * @method _alignHintPosition\n * @param {String} position\n * @param {Object} hint\n * @param {Object} element\n */\n function _alignHintPosition(position, hint, element) {\n // get/calculate offset of target element\n var offset = _getOffset.call(this, element);\n var iconWidth = 20;\n var iconHeight = 20;\n\n // align the hint element\n switch (position) {\n default:\n case 'top-left':\n hint.style.left = offset.left + 'px';\n hint.style.top = offset.top + 'px';\n break;\n case 'top-right':\n hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n hint.style.top = offset.top + 'px';\n break;\n case 'bottom-left':\n hint.style.left = offset.left + 'px';\n hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n break;\n case 'bottom-right':\n hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n break;\n case 'middle-left':\n hint.style.left = offset.left + 'px';\n hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n break;\n case 'middle-right':\n hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n break;\n case 'middle-middle':\n hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n break;\n case 'bottom-middle':\n hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n break;\n case 'top-middle':\n hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n hint.style.top = offset.top + 'px';\n break;\n }\n }\n\n /**\n * Triggers when user clicks on the hint element\n *\n * @api private\n * @method _showHintDialog\n * @param {Number} stepId\n */\n function _showHintDialog(stepId) {\n var hintElement = document.querySelector('.introjs-hint[data-step=\"' + stepId + '\"]');\n var item = this._introItems[stepId];\n\n // call the callback function (if any)\n if (typeof (this._hintClickCallback) !== 'undefined') {\n this._hintClickCallback.call(this, hintElement, item, stepId);\n }\n\n // remove all open tooltips\n var removedStep = _removeHintTooltip.call(this);\n\n // to toggle the tooltip\n if (parseInt(removedStep, 10) === stepId) {\n return;\n }\n\n var tooltipLayer = document.createElement('div');\n var tooltipTextLayer = document.createElement('div');\n var arrowLayer = document.createElement('div');\n var referenceLayer = document.createElement('div');\n\n tooltipLayer.className = 'introjs-tooltip';\n\n tooltipLayer.onclick = function (e) {\n //IE9 & Other Browsers\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n //IE8 and Lower\n else {\n e.cancelBubble = true;\n }\n };\n\n tooltipTextLayer.className = 'introjs-tooltiptext';\n\n var tooltipWrapper = document.createElement('p');\n tooltipWrapper.innerHTML = item.hint;\n\n var closeButton = document.createElement('a');\n closeButton.className = this._options.buttonClass;\n closeButton.setAttribute('role', 'button');\n closeButton.innerHTML = this._options.hintButtonLabel;\n closeButton.onclick = _hideHint.bind(this, stepId);\n\n tooltipTextLayer.appendChild(tooltipWrapper);\n tooltipTextLayer.appendChild(closeButton);\n\n arrowLayer.className = 'introjs-arrow';\n tooltipLayer.appendChild(arrowLayer);\n\n tooltipLayer.appendChild(tooltipTextLayer);\n\n // set current step for _placeTooltip function\n this._currentStep = hintElement.getAttribute('data-step');\n\n // align reference layer position\n referenceLayer.className = 'introjs-tooltipReferenceLayer introjs-hintReference';\n referenceLayer.setAttribute('data-step', hintElement.getAttribute('data-step'));\n _setHelperLayerPosition.call(this, referenceLayer);\n\n referenceLayer.appendChild(tooltipLayer);\n document.body.appendChild(referenceLayer);\n\n //set proper position\n _placeTooltip.call(this, hintElement, tooltipLayer, arrowLayer, null, true);\n }\n\n /**\n * Get an element position on the page\n * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966\n *\n * @api private\n * @method _getOffset\n * @param {Object} element\n * @returns Element's position info\n */\n function _getOffset(element) {\n var body = document.body;\n var docEl = document.documentElement;\n var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n var x = element.getBoundingClientRect();\n return {\n top: x.top + scrollTop,\n width: x.width,\n height: x.height,\n left: x.left + scrollLeft\n };\n }\n\n /**\n * Find the nearest scrollable parent\n * copied from https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\n *\n * @param Element element\n * @return Element\n */\n function _getScrollParent(element) {\n var style = window.getComputedStyle(element);\n var excludeStaticParent = (style.position === \"absolute\");\n var overflowRegex = /(auto|scroll)/;\n\n if (style.position === \"fixed\") return document.body;\n \n for (var parent = element; (parent = parent.parentElement);) {\n style = window.getComputedStyle(parent);\n if (excludeStaticParent && style.position === \"static\") {\n continue;\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\n }\n\n return document.body;\n }\n\n /**\n * scroll a scrollable element to a child element\n *\n * @param Element parent\n * @param Element element\n * @return Null\n */\n function _scrollParentToElement (parent, element) {\n parent.scrollTop = element.offsetTop - parent.offsetTop;\n }\n\n /**\n * Gets the current progress percentage\n *\n * @api private\n * @method _getProgress\n * @returns current progress percentage\n */\n function _getProgress() {\n // Steps are 0 indexed\n var currentStep = parseInt((this._currentStep + 1), 10);\n return ((currentStep / this._introItems.length) * 100);\n }\n\n /**\n * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1\n * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically\n *\n * @param obj1\n * @param obj2\n * @returns obj3 a new object based on obj1 and obj2\n */\n function _mergeOptions(obj1,obj2) {\n var obj3 = {},\n attrname;\n for (attrname in obj1) { obj3[attrname] = obj1[attrname]; }\n for (attrname in obj2) { obj3[attrname] = obj2[attrname]; }\n return obj3;\n }\n\n var introJs = function (targetElm) {\n var instance;\n\n if (typeof (targetElm) === 'object') {\n //Ok, create a new instance\n instance = new IntroJs(targetElm);\n\n } else if (typeof (targetElm) === 'string') {\n //select the target element with query selector\n var targetElement = document.querySelector(targetElm);\n\n if (targetElement) {\n instance = new IntroJs(targetElement);\n } else {\n throw new Error('There is no element with given selector.');\n }\n } else {\n instance = new IntroJs(document.body);\n }\n // add instance to list of _instances\n // passing group to _stamp to increment\n // from 0 onward somewhat reliably\n introJs.instances[ _stamp(instance, 'introjs-instance') ] = instance;\n\n return instance;\n };\n\n /**\n * Current IntroJs version\n *\n * @property version\n * @type String\n */\n introJs.version = VERSION;\n\n /**\n * key-val object helper for introJs instances\n *\n * @property instances\n * @type Object\n */\n introJs.instances = {};\n\n //Prototype\n introJs.fn = IntroJs.prototype = {\n clone: function () {\n return new IntroJs(this);\n },\n setOption: function(option, value) {\n this._options[option] = value;\n return this;\n },\n setOptions: function(options) {\n this._options = _mergeOptions(this._options, options);\n return this;\n },\n start: function (group) {\n _introForElement.call(this, this._targetElement, group);\n return this;\n },\n goToStep: function(step) {\n _goToStep.call(this, step);\n return this;\n },\n addStep: function(options) {\n if (!this._options.steps) {\n this._options.steps = [];\n }\n\n this._options.steps.push(options);\n\n return this;\n },\n addSteps: function(steps) {\n if (!steps.length) return;\n\n for(var index = 0; index < steps.length; index++) {\n this.addStep(steps[index]);\n }\n\n return this;\n },\n goToStepNumber: function(step) {\n _goToStepNumber.call(this, step);\n\n return this;\n },\n nextStep: function() {\n _nextStep.call(this);\n return this;\n },\n previousStep: function() {\n _previousStep.call(this);\n return this;\n },\n exit: function(force) {\n _exitIntro.call(this, this._targetElement, force);\n return this;\n },\n refresh: function() {\n _refresh.call(this);\n return this;\n },\n onbeforechange: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introBeforeChangeCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onbeforechange was not a function');\n }\n return this;\n },\n onchange: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introChangeCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onchange was not a function.');\n }\n return this;\n },\n onafterchange: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introAfterChangeCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onafterchange was not a function');\n }\n return this;\n },\n oncomplete: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introCompleteCallback = providedCallback;\n } else {\n throw new Error('Provided callback for oncomplete was not a function.');\n }\n return this;\n },\n onhintsadded: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._hintsAddedCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onhintsadded was not a function.');\n }\n return this;\n },\n onhintclick: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._hintClickCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onhintclick was not a function.');\n }\n return this;\n },\n onhintclose: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._hintCloseCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onhintclose was not a function.');\n }\n return this;\n },\n onexit: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introExitCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onexit was not a function.');\n }\n return this;\n },\n onskip: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introSkipCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onskip was not a function.');\n }\n return this;\n },\n onbeforeexit: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introBeforeExitCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onbeforeexit was not a function.');\n }\n return this;\n },\n addHints: function() {\n _populateHints.call(this, this._targetElement);\n return this;\n },\n hideHint: function (stepId) {\n _hideHint.call(this, stepId);\n return this;\n },\n hideHints: function () {\n _hideHints.call(this);\n return this;\n },\n showHint: function (stepId) {\n _showHint.call(this, stepId);\n return this;\n },\n showHints: function () {\n _showHints.call(this);\n return this;\n },\n removeHints: function () {\n _removeHints.call(this);\n return this;\n },\n removeHint: function (stepId) {\n _removeHint.call(this, stepId);\n return this;\n },\n showHintDialog: function (stepId) {\n _showHintDialog.call(this, stepId);\n return this;\n }\n };\n\n return introJs;\n});\n\n\n//# sourceURL=webpack://pokeclicker/./node_modules/intro.js/intro.js?"); + +/***/ }), + +/***/ "./node_modules/sortablejs/modular/sortable.esm.js": +/*!*********************************************************!*\ + !*** ./node_modules/sortablejs/modular/sortable.esm.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MultiDrag\": () => (/* binding */ MultiDragPlugin),\n/* harmony export */ \"Sortable\": () => (/* binding */ Sortable),\n/* harmony export */ \"Swap\": () => (/* binding */ SwapPlugin),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**!\n * Sortable 1.10.2\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar version = \"1.10.2\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !!\n /*@__PURE__*/\n navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\n\n\nfunction getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, [\"evt\"]);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n if (lastChild(sortable)) return;\n var rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (threshold && insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // assign target only if condition is true\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (rootEl.contains(dragEl) && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Sortable);\n\n\n\n//# sourceURL=webpack://pokeclicker/./node_modules/sortablejs/modular/sortable.esm.js?"); + +/***/ }), + +/***/ "./src/modules/Credits.ts": +/*!********************************!*\ + !*** ./src/modules/Credits.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CodeCredits\": () => (/* binding */ CodeCredits),\n/* harmony export */ \"SpriteCredits\": () => (/* binding */ SpriteCredits)\n/* harmony export */ });\n/* harmony import */ var _profile_Profile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./profile/Profile */ \"./src/modules/profile/Profile.ts\");\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n\n\n// Sort alphabetically\nconst SpriteCredits = [\n {\n name: 'Akuma-Tsubasa',\n link: 'https://www.deviantart.com/akuma-tsubasa',\n image: 'https://a.deviantart.net/avatars-big/a/k/akuma-tsubasa.png?13',\n resources: [\n 'Agnol',\n 'Cail',\n 'Cipher Peon (male and female)',\n 'Cipher Peon XD (male and female)',\n 'Dakim',\n 'Ein',\n 'Gonzap',\n 'Nascour',\n 'Venus',\n ],\n // Notes: Akuma-Tsubasa is the creator, LightningKillua15 is the owner allowing use if the creator is credited.\n },\n {\n name: 'Anarlaurendil',\n link: 'https://www.deviantart.com/anarlaurendil',\n image: 'https://a.deviantart.net/avatars-big/a/n/anarlaurendil.png',\n resources: [\n 'Dynamic Background Wyrdeer',\n ],\n // Notes: Allowed use with credit\n },\n {\n name: 'arduousFrivolity',\n link: 'https://discordapp.com/users/200069836724764673/',\n resources: [\n 'Pinkan Scyther',\n 'Sealed Chamber Braille',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'AutumnSpire',\n link: 'https://www.deviantart.com/autumnspire',\n image: 'https://a.deviantart.net/avatars-big/a/u/autumnspire.png',\n resources: [\n 'Team Aqua Grunt Revamps',\n ],\n // Notes: Allowed use with credit.\n },\n {\n name: 'aveontrainer',\n link: 'https://www.deviantart.com/aveontrainer',\n image: 'https://a.deviantart.net/avatars-big/a/v/aveontrainer.png',\n resources: [\n 'Overworld Klara',\n 'Overworld Avery',\n 'Trevor',\n ],\n // Notes: Gives credit on image page if asked.\n },\n {\n name: 'B1ackZer0',\n link: 'https://discordapp.com/users/346730382009565196',\n image: 'assets/images/profile/trainer-111.png',\n resources: [\n 'Shiny Alcremie',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'Beliot419',\n link: 'https://www.deviantart.com/beliot419',\n image: 'https://a.deviantart.net/avatars-big/b/e/beliot419.png',\n resources: [\n 'Acerola',\n 'Aether Branch Chief Faba',\n 'Aether Foundation Employee (female)',\n 'Aether Foundation Employee (male)',\n 'Aether President Lusamine',\n 'Gladion',\n 'Gladion (stance)',\n 'Hala',\n 'Hapu',\n 'Hau',\n 'Ilima',\n 'Kahili',\n 'Kiawe',\n 'Lana',\n 'Lusamine (nihilego)',\n 'Mallow',\n 'Masked Royal',\n 'Mina',\n 'Molayne',\n 'Nanu',\n 'Olivia',\n 'Plumeria',\n 'Professor Burnet (gen7)',\n 'Professor Kukui',\n 'Rising Star (male)',\n 'Rival Hau',\n 'Ryuki',\n 'Sightseer (female)',\n 'Sophocles',\n 'Teacher (Gen 7)',\n 'Team Skull Boss (guzma)',\n 'Wicke',\n 'Youth Athlete (female)',\n ],\n // Notes: Found in spritesheet description: \"Feel free to use them, just give me credit.\"\n },\n {\n name: 'Brumirage, Altthiel, Pujolly, Irpachuza',\n link: 'https://www.smogon.com/forums/threads/revamped-add-sword-and-shield-trainer-avatars-for-everyone.3672829/',\n image: 'https://www.smogon.com/forums/media/zracknel-beta.svg.m.1',\n resources: [\n 'Adaman',\n 'AI Sada',\n 'AI Turo',\n 'Akari',\n 'Allister',\n 'Arezu',\n 'Avery',\n 'Bea',\n 'Bede',\n 'Calaba',\n 'Cogita',\n 'Gym Leader Bede',\n 'Gordie',\n 'Hop',\n 'Irida',\n 'Kabu',\n 'Klara',\n 'Leon',\n 'Lian',\n 'Lisia',\n 'Mai',\n 'Marnie',\n 'Master Dojo Student',\n 'Melony',\n 'Milo',\n 'Mustard',\n 'Nessa',\n 'Oleana',\n 'Opal',\n 'Peony',\n 'Piers',\n 'Professor Magnolia',\n 'Professor Sonia',\n 'Raihan',\n 'Rose',\n 'Sabi',\n 'Shielbert',\n 'Sonia',\n 'Sordward',\n 'Team Yell Grunts',\n 'Volo',\n ],\n // NOTES: No notes about credit, but is made for public use. Unclear who made what, so credited together\n },\n {\n name: 'CGMetalDragon',\n link: 'https://www.deviantart.com/cgmetaldragon',\n image: 'https://a.deviantart.net/avatars-big/c/g/cgmetaldragon.png',\n resources: [\n 'Contest Champion (Johanna)',\n ],\n // Notes: No notes about credit, have messaged asking for permission, awaiting confirmation\n },\n {\n name: 'CorgiOnNeptune',\n link: 'https://linktr.ee/CorgiOnNeptune',\n resources: [\n 'Recolours of Duncapham\\'s sprite revamps',\n 'Dynamic BG Shiny Meltan/Melmetal',\n 'Rainbow Rocket sprite re-colours',\n 'Sounds:',\n ' - Wandering encounter',\n ' - Roaming encounter',\n ' - Battle Frontier',\n ' - Empty Queue',\n ' - Dream Orbs',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'Croak',\n link: 'https://discordapp.com/users/206839451069054976/',\n resources: [\n 'Plasma Frigate overworld sprite',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'Cthulhu Follower',\n link: 'https://discordapp.com/users/303604152733270017/',\n resources: [\n 'Higher quality Underground stones',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'DaleArwin',\n link: 'https://www.deviantart.com/dalearwin',\n resources: [\n 'Aether Foundation Employee (masked)',\n 'Brains & Brawn',\n 'Dancer (female)',\n 'Golfer',\n 'Surfer',\n 'Team Flare Grunts',\n 'Wonder Chest',\n ],\n // Notes: DaleArwin aka IanWalder, a GitHub contributor to this project, gives his permission\n },\n {\n name: 'DapperDwarf',\n link: 'https://discordapp.com/users/385866382593622018/',\n resources: [\n 'Pokerus Resistant Icon (colorblind friendly)',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'DarkusShadow',\n link: 'https://www.deviantart.com/darkusshadow',\n image: 'https://a.deviantart.net/avatars-big/d/a/darkusshadow.jpg',\n resources: [\n 'Dynamic Background Kleavor',\n 'Dynamic Background Ursaluna',\n 'Dynamic Background Sneasler',\n 'Dynamic Background Overqwil',\n 'Dynamic Background Enamorus',\n 'Paldea dynamic background before edits',\n ],\n // Notes: Allowed use with credit\n },\n {\n name: 'Data',\n link: 'https://discordapp.com/users/240607391807307777/',\n resources: [\n 'Pokerus Virus key item sprite',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'DommyThicc',\n link: 'https://discordapp.com/users/519860373890007050/',\n resources: [\n 'Chobin',\n 'Cipher Admin Ardos',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'DraKay',\n link: 'https://discordapp.com/users/272336444297707521/',\n image: 'assets/images/profile/trainer-121.png',\n resources: [\n 'Alcremie sweets big icons',\n 'Arctovish shop image',\n 'Arctozolt shop image',\n 'Argus Steel',\n 'Ash\\'s Butterfree',\n 'Bill\\'s Grandpa with Eevee',\n 'Bill\\'s Grandpa without Eevee',\n 'Black Augurite',\n 'Black mane hair big icon',\n 'Blank Plate (item and underground)',\n 'Blimp base',\n 'Burmy (No Coat) Overworld',\n 'Butler',\n 'Camp map sprite',\n 'Cipher Admin Lovrina',\n 'Cipher Commander Exol',\n 'Cipher Peon Yellosix',\n 'Charitative chansey shuffle',\n 'Client Island town image',\n 'Clouds',\n 'Clown Jessie & James',\n 'Cosplay Pikachu Shuffle Icons',\n 'Cracked pot big icon',\n 'Danny',\n 'Day cycle images',\n 'Detective Pikachu Overworld',\n 'Dr. Splash',\n 'Dracovish shop image',\n 'Dracozolt shop image',\n 'Dream Orbs',\n 'Dungeon Ladder',\n 'Dungeon Chest Tiers',\n 'Exeggcute (Single)',\n 'Exposed Applin + Overworld',\n 'Flabébé Overworld (All but Red)',\n 'Galar fossils items',\n 'Galarian Articuno overworld image',\n 'Galarian Moltres overworld image',\n 'Galarian Zapdos overworld image',\n 'Galarica cuff and wreath icons',\n 'Gimmighoul Coin',\n 'Go-Rock Squad Commander',\n 'Go-Rock Squad Grunt (male)',\n 'Go-Rock Squad Grunt (female)',\n 'Gooey Mulch',\n 'Sudowoodo (Golden) Shop Icon',\n 'Grotle (Acorn)',\n 'Grotle (Acorn) Shop Icon',\n 'Grotle and Friends',\n 'Honey',\n 'Hopo berry image and trees',\n 'Hoppip (Chimecho)',\n 'Inkay (Pikachu)',\n 'Key Stone',\n 'Koko',\n 'Komala overworld image',\n 'Legend Plate',\n 'Linking cord cartoon style',\n 'Luana',\n 'Magikarp Skelly',\n 'Magikarp Calico (Orange, White)',\n 'Magikarp Calico (Orange, White, Black)',\n 'Magikarp Calico (White, Orange)',\n 'Magikarp Calico (Orange, Gold)',\n 'Magikarp Orange Two-Tone',\n 'Magikarp Orange Orca',\n 'Magikarp Orange Dapples',\n 'Magikarp Pink Two-Tone',\n 'Magikarp Pink Orca',\n 'Magikarp Pink Dapples',\n 'Magikarp Apricot Tiger',\n 'Magikarp Apricot Zebra',\n 'Magikarp Apricot Stripes',\n 'Magikarp Brown Tiger',\n 'Magikarp Brown Zebra',\n 'Magikarp Brown Stripes',\n 'Magikarp Brown Stripes Shop Icon',\n 'Magikarp Blue Raindrops Shop Icon',\n 'Magikarp Saucy Violet Shop Icon',\n 'Magikarp (Feebas)',\n 'Magikarp alt OverWorld sprites',\n 'Magma Admin Courtney',\n 'Magma Stone',\n 'Man of Mystery',\n 'Meowth (Phanpy)',\n 'Merilyn',\n 'Meta Groudon Overworld',\n 'Meteorite',\n 'Milcery (Cheesy)',\n 'Miror B.',\n 'Mismagius (Illusion)',\n 'Mismagius (Illusion) Shop Icon',\n 'Morpeko (Hungry) Overworld',\n 'Mr Stone',\n 'Naganadel (Overworld)',\n 'New Island Overworld',\n 'Oricorio Overworld (All)',\n 'Peat Block',\n 'Peonia',\n 'Pikachu (Clone)',\n 'Pikachu (Easter)',\n 'Pinkan Arbok',\n 'Pinkan Bellsprout',\n 'Pink Butterfree',\n 'Pinkan Caterpie',\n 'Pinkan Diglett',\n 'Pinkan Dodrio',\n 'Pinkan Dodrio Shuffle',\n 'Pinkan Exeggutor',\n 'Pinkan Geodude Shuffle',\n 'Pinkan Jessie & James',\n 'Pinkan Paras',\n 'Pinkan Pikachu',\n 'Pinkan Poliwhirl',\n 'Pinkan Rhyhorn (shiny)',\n 'Pinkan Scyther Shuffle + Overworld',\n 'Pinkan Weedle',\n 'Pinkan Weezing',\n 'Professor Burnet',\n 'Profile Characters: Kris, Green (LGFR and LGPE), Firefarmer, Ghetsis',\n 'Purify Icon',\n 'Robo Groudon',\n 'Roddy Tackle',\n 'Rudy',\n 'Rusted Shield and Sword icons',\n 'Sacred Blank Plate',\n 'Sacred Draco Plate',\n 'Sacred Earth Plate',\n 'Sacred Fist Plate',\n 'Sacred Flame Plate',\n 'Sacred Icicle Plate',\n 'Sacred Insect Plate',\n 'Sacred Iron Plate',\n 'Sacred Meadow Plate',\n 'Sacred Mind Plate',\n 'Sacred Pixie Plate',\n 'Sacred Sky Plate',\n 'Sacred Splash Plate',\n 'Sacred Spooky Plate',\n 'Sacred Stone Plate',\n 'Sacred Toxic Plate',\n 'Sacred Zap Plate',\n 'Sea Mauville',\n 'Shadow Absol',\n 'Shadow Arbok',\n 'Shadow Articuno',\n 'Shadow Baltoy',\n 'Shadow Banette',\n 'Shadow Beedrill',\n 'Shadow Butterfree',\n 'Shadow Carvanha',\n 'Shadow Chansey',\n 'Shadow Crocanaw',\n 'Shadow Delcatty',\n 'Shadow Dodrio',\n 'Shadow Dragonite',\n 'Shadow Duskull',\n 'Shadow Electabuzz',\n 'Shadow Farfetch\\'d',\n 'Shadow Grimer',\n 'Shadow Houndoom',\n 'Shadow Hypno',\n 'Shadow Icon',\n 'Shadow Lickitung',\n 'Shadow Lunatone',\n 'Shadow Magmar',\n 'Shadow Magneton',\n 'Shadow Makuhita',\n 'Shadow Mawile',\n 'Shadow Meowth',\n 'Shadow Metagross',\n 'Shadow Miltank',\n 'Shadow Moltres',\n 'Shadow Murkrow',\n 'Shadow Nosepass',\n 'Shadow Numel',\n 'Shadow Paras',\n 'Shadow Pineco',\n 'Shadow Poliwrath',\n 'Shadow Primeape',\n 'Shadow Ralts',\n 'Shadow Rapidash',\n 'Shadow Raticate',\n 'Shadow Remoraid',\n 'Shadow Roselia',\n 'Shadow Seedot',\n 'Shadow Seel',\n 'Shadow Shroomish',\n 'Shadow Shuckle',\n 'Shadow Smeargle',\n 'Shadow Sneasel',\n 'Shadow Snorlax',\n 'Shadow Solrock',\n 'Shadow Spearow',\n 'Shadow Starmie',\n 'Shadow Sudowoodo',\n 'Shadow Suicune',\n 'Shadow Swellow',\n 'Shadow Tangela',\n 'Shadow Teddiursa',\n 'Shadow Tropius',\n 'Shadow Ursaring',\n 'Shadow Venomoth',\n 'Shadow Voltorb',\n 'Shadow Vulpix',\n 'Shadow Weepinbell',\n 'Shadow Zapdos',\n 'Shady Salesman',\n 'Shauna overworld',\n 'Ship Front View',\n 'Shuckle (Corked) + Overworld',\n 'Silvally (Bug) Shuffle',\n 'Silvally (Dark) Shuffle',\n 'Silvally (Dragon) Shuffle',\n 'Silvally (Electric) Shuffle',\n 'Silvally (Fairy) Shuffle',\n 'Silvally (Fighting) Shuffle',\n 'Silvally (Fire) Shuffle',\n 'Silvally (Flying) Shuffle',\n 'Silvally (Ghost) Shuffle',\n 'Silvally (Grass) Shuffle',\n 'Silvally (Ground) Shuffle',\n 'Silvally (Ice) Shuffle',\n 'Silvally (Poison) Shuffle',\n 'Silvally (Psychic) Shuffle',\n 'Silvally (Rock) Shuffle',\n 'Silvally (Steel) Shuffle',\n 'Silvally (Water) Shuffle',\n 'Snorlax (Snowman)',\n 'Snover Berry and Trees',\n 'Snover (Berry) + Overworld',\n 'Spooky Togepi (shiny)',\n 'Spooky Togetic',\n 'Spooky Togekiss',\n 'Strange Boulders',\n 'Supreme Gym Leader Drake',\n 'Sweet and Tart apple icons',\n 'Team Flare Admin (male)',\n 'Team Flare Admin (female)',\n 'Team Flare Aliana',\n 'Team Magma and Aqua Admins',\n 'Team Magma Grunts',\n 'Team Rocket (Disguised)',\n 'Thug Zook',\n 'Tierno overworld',\n 'Togepi (Flowering Crown)',\n 'Torchic (Egg)',\n 'Tourist Couple/Bellhop',\n 'Tower of Darkness',\n 'Tower of Waters',\n 'Trevor overworld',\n 'Underground Aerodactylite',\n 'Underground Mawilite',\n 'Underground Sablenite',\n 'Valencian Raticate',\n 'Valencian Paras',\n 'Dugtrio (Punk) shop image',\n 'Gengar (Punk) shop image',\n 'Goldeen (Diva) shop image',\n 'Onix (Rocker) shop image',\n 'Tangela (Pom-pom) shop image',\n 'Weepinbell (Fancy) shop image',\n 'Vertical cave entrance map sprites',\n 'Vivillon Photobook',\n 'Volo (Ginkgo)',\n 'White mane hair icon',\n 'Zarude (Dada) shop image',\n 'Zero',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'Drawnamu',\n link: 'https://www.deviantart.com/drawnamu',\n image: 'https://a.deviantart.net/avatars-big/d/r/drawnamu.png',\n resources: [\n 'Marnie (Gym Leader)',\n 'Mustard (battle pose)',\n ],\n // NOTES: Gives permission to everyone who asks in the comments section of the spritesheet as long as credit is given\n },\n {\n name: 'Duncapham',\n link: 'https://www.deviantart.com/duncapham',\n image: 'https://a.deviantart.net/avatars-big/d/u/duncapham.png',\n resources: [\n 'Kanto Gym Leader/E4 sprite revamps',\n 'Aqua and Magma leader revamps',\n 'Blue recolours',\n 'Channeler revamp',\n 'Cool Couple revamps',\n 'Crush Kin revamp',\n 'Drake revamp',\n 'Lady revamp',\n 'May revamp',\n 'Norman revamp',\n 'Old Couple revamp',\n 'Painter revamp',\n 'Phoebe revamp',\n 'Professor Oak revamp',\n 'Roxanne revamp',\n 'Ruin Maniac revamp',\n 'Scientist revamp',\n 'Sidney revamp',\n 'Steven revamp',\n 'Tamer revamp',\n 'Tate & Liza revamp',\n 'Team Rocket Grunt revamps',\n 'Wally revamp',\n 'Winona revamp',\n ],\n // NOTES: Allowed use with credit given.\n },\n {\n name: 'Eat Pant',\n link: 'https://discordapp.com/users/736029608587296819',\n image: 'assets/images/profile/trainer-119.png',\n resources: [\n 'Ditto (Magikarp)',\n 'Dugtrio (Punk)',\n 'Genesect (High-Speed) and Drive Forms',\n 'Koga Trainer',\n 'Miracle Chest',\n 'Pinkan Geodude',\n 'Pinkan Mankey',\n 'Pinkan Nidoking',\n 'Pinkan Nidoran(F)',\n 'Pinkan Nidoran(M)',\n 'Pinkan Oddish',\n 'Pinkan Primeape',\n 'Pinkan Venonat',\n 'Reindeer Stantler',\n 'Spooky Ivysaur',\n 'Spooky Venusaur',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'EmmaRoak',\n link: 'https://www.deviantart.com/emmaroak',\n image: 'https://a.deviantart.net/avatars-big/e/m/emmaroak.png',\n resources: [\n 'Blastoise (clone)',\n 'Bulbasaur (clone)',\n 'Charizard (clone)',\n 'Charmander (clone)',\n 'Charmeleon (clone)',\n 'Ivysaur (clone)',\n 'Squirtle (clone)',\n 'Venusaur (clone)',\n 'Wartortle (clone)',\n ],\n // NOTES: No notes about credit, have messaged asking for permission, awaiting confirmation\n },\n {\n name: 'Ezerart',\n link: 'https://www.deviantart.com/ezerart',\n image: 'https://a.deviantart.net/avatars-big/e/z/ezerart.jpg',\n resources: [\n 'Dynamic Background Basculegion',\n ],\n // Notes: Allowed use with credit\n },\n {\n name: 'Farboo171',\n link: 'https://github.com/Farboo171',\n resources: [\n 'Athlete (male)',\n 'Bodybuilder (male)',\n 'Evice',\n 'Exeggcute (Single) Item',\n 'Flowering Celebi',\n 'Freeze Mulch',\n 'Old Lady',\n 'Underground Fossilized Dino',\n 'Underground Fossilized Drake',\n 'Zook (Overworld)',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'Gnomowladny',\n link: 'https://www.deviantart.com/gnomowladny',\n image: 'https://a.deviantart.net/avatars-big/g/n/gnomowladny.gif',\n resources: [\n 'Clemont',\n 'Drasna',\n 'Guzma',\n 'Korrina',\n 'Malva',\n 'Onympia',\n 'Ramos',\n 'Siebold',\n 'Team Flare Bryony',\n 'Team Flare Xerosic',\n 'Tierno',\n 'Valerie',\n 'Viola',\n 'Wikstrom',\n 'Wulfric',\n 'Zinnia',\n ],\n // NOTES: Feel free to use it if you like, but don\\'t forget to give me credit~!\n },\n {\n name: 'HighOnMushrooms',\n link: 'https://www.pokecommunity.com/showthread.php?p=9366810#9370990',\n resources: [\n 'Flying Pikachu',\n 'Surfing Pikachu',\n ],\n // NOTES: No notes about credit, can no longer find an existing profile for the user\n },\n {\n name: 'izzyvicious',\n link: 'https://www.deviantart.com/izzyvicious',\n image: 'https://a.deviantart.net/avatars-big/i/z/izzyvicious.png',\n resources: [\n 'Overworld Marnie',\n ],\n // Notes: Gives credit on image page if asked.\n },\n {\n name: 'JapuDCret',\n link: 'https://github.com/JapuDCret',\n image: 'https://avatars.githubusercontent.com/u/14893450?v=4',\n resources: [\n 'Egg Hunter',\n ],\n // NOTES: Permission given via PRs\n },\n {\n name: 'JorMxDos',\n link: 'https://www.deviantart.com/jormxdos',\n image: 'https://a.deviantart.net/avatars-big/j/o/jormxdos.png?8',\n resources: [\n 'All Vectorized Badges images',\n 'Vectorized Z Crystals',\n ],\n // NOTES: Permission given in the bio comment section\n },\n {\n name: 'Jostav',\n link: 'https://discordapp.com/users/823666951565344828/',\n resources: [\n 'Athlete (female)',\n 'Bandana Guy',\n 'Bodybuilder (female)',\n 'Chaser (male and female)',\n 'Cipher Peon (yellow)',\n 'Es Cade',\n 'Hunter (male and female)',\n 'Lillie',\n 'Lusamine (nihilego) shiny',\n 'Rider (male and female)',\n 'Roller Boy',\n 'Rotom-Dex',\n 'Rui',\n 'Street Performer',\n 'Team Snagem',\n 'Trial Site',\n 'Willie',\n 'XD001',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'Kelp1490',\n link: 'https://discordapp.com/users/463397969102766080/',\n resources: [\n 'cipher Admin Eldes',\n 'Cipher Admin Gorigan',\n 'Cipher Admin Snattle',\n 'Cipher Peon Browsix',\n 'Cipher Peon Greesix',\n 'Cipher Peon Purpsix',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'Kensuyjin33',\n link: 'https://www.deviantart.com/kensuyjin33',\n image: 'https://a.deviantart.net/avatars-big/k/e/kensuyjin33.png',\n resources: [\n 'Blue sprite revamps',\n ],\n // NOTES: Allowed use with credit given.\n },\n {\n name: 'Kilima',\n link: 'https://archive.pokecharms.com/works/diantha-sprite.52739/',\n resources: [\n 'Diantha',\n ],\n // NOTES: Permission given to Krush via Discord DM\n },\n {\n name: 'Kita',\n link: 'https://discordapp.com/users/312651496766308352/',\n resources: [\n 'Dynamic Background sprite recolors (shiny Bounsweet, nonshiny Decidueye, nonshiny Incineroar)',\n ],\n // Notes: This wording is a bit clunky, but information on who made the original later-gen DB sprites that these were based on doesn't seem to be available, so...\"\n },\n {\n name: 'Krokotips',\n link: 'https://www.deviantart.com/krokotips',\n resources: [\n 'Team Flare Celosia',\n 'Team Flare Mable',\n ],\n // NOTES: No notes about credit, have messaged asking for permission, awaiting confirmation\n },\n {\n name: 'Kyle-Dove',\n link: 'https://www.deviantart.com/kyle-dove',\n image: 'https://a.deviantart.net/avatars-big/k/y/kyle-dove.png',\n resources: [\n 'Artist (Gen 8)',\n 'Artist (male)',\n 'Arven',\n 'Battle Café Master',\n 'Beni',\n 'Beni (Ninja)',\n 'Bill',\n 'Blue-LGPE',\n 'Blue-Masters',\n 'Brassius',\n 'Clavell',\n 'Clover',\n 'Cook (Gen 8)',\n 'Cyllene',\n 'Dendra',\n 'Fairy Tale Girl',\n 'Gaeric',\n 'Geeta',\n 'Gen 8 Reporter (Lucy Stevens)',\n 'Hassel',\n 'Hex Maniac',\n 'Hiker (Gen 8)',\n 'Ingo',\n 'Iono',\n 'Iscan',\n 'Jacq',\n 'Kamado',\n 'Kamado (Armor)',\n 'Katy',\n 'Kofu',\n 'Kurt',\n 'Larry',\n 'Laventon',\n 'Looker',\n 'Lillie (z powererd)',\n 'Melli',\n 'Miriam',\n 'Mr. Fuji',\n 'Nemona',\n 'Owner',\n 'Palina',\n 'Plumeria (league)',\n 'Poppy',\n 'Prof. Birch',\n 'Prof. Elm',\n 'Prof. Rowan',\n 'Punk Girl',\n 'Punk Guy',\n 'Rail Staff',\n 'Rika',\n 'Red-Masters',\n 'Ryme',\n 'Sada',\n 'Scratch Cat Girl (Alola Mom)',\n 'Sightseer (male)',\n 'Sky Trainer (female)',\n 'Sky Trainer (male)',\n 'Team Star Grunt (female)',\n 'Team Star Grunt (male)',\n 'Triathlete',\n 'Tourist (female)',\n 'Tourist (male)',\n 'Tulip',\n 'Turo',\n 'Tyme',\n 'Worker (female)',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'Larryturbo',\n link: 'https://www.deviantart.com/larryturbo',\n image: 'https://a.deviantart.net/avatars-big/l/a/larryturbo.png',\n resources: [\n 'Blacephalon (Overworld)',\n 'Celesteela (Overworld)',\n 'Dynamic BG Meltan',\n 'Dynamic BG Melmetal',\n 'Guzzlord (Overworld)',\n 'Kyurem (Overworld)',\n 'Lunala (Overworld)',\n 'Mega Houndoom (Overworld)',\n 'Mega Manectric (Overworld)',\n 'Mega Mewtwo X (Overworld)',\n 'Mega Mewtwo Y (Overworld)',\n 'Necromza (Overworld)',\n 'Primal Groudon (Overworld)',\n 'Primal Kyogre (Overworld)',\n 'Reshiram (Overworld)',\n 'Stakataka (Overworld)',\n 'Tapu Bulu (Overworld)',\n 'Xurketree (Overworld)',\n 'Zekrom (Overworld)',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'lasse00',\n link: 'https://www.deviantart.com/lasse00',\n image: 'https://a.deviantart.net/avatars-big/l/a/lasse00.jpg',\n resources: [\n 'Hisui Dynamic Background Shinies',\n ],\n // Notes: Allowed use with credit\n },\n {\n name: 'Leaf',\n link: 'https://twitter.com/Leafalie',\n resources: [\n 'Totem Alolan Marowak',\n 'Totem Alolan Raticate',\n 'Totem Araquanid',\n 'Totem Gumshoos',\n 'Totem Lurantis',\n 'Totem Kommo-o',\n 'Totem Mimikyu',\n 'Totem Salazzle',\n 'Totem Togedemaru',\n 'Totem Vikavolt',\n 'Totem Wishiwashi',\n ],\n // Notes: Permission given via Discord\n },\n {\n name: 'leparagon',\n link: 'https://www.deviantart.com/leparagon',\n image: 'https://a.deviantart.net/avatars-big/l/e/leparagon.jpg',\n resources: [\n 'Armored Mewtwo',\n ],\n // NOTES: No notes about credit, have messaged asking for permission, awaiting confirmation\n },\n {\n name: 'mid117',\n link: 'https://www.deviantart.com/mid117',\n image: 'https://a.deviantart.net/avatars-big/m/i/mid117.jpg',\n resources: [\n 'Team Skull Grunt (female)',\n 'Team Skull Grunt (male)',\n ],\n // NOTES: Found on DeviantArt About page: \"All Sprites here are free to use as long you give credit to me\"\n },\n {\n name: 'NiCeDiCe',\n link: 'https://twitter.com/NiCeDiCe90',\n resources: [\n 'Blessing Blissey',\n 'Bulbasaur (Rose)',\n 'Charity Chansey',\n 'Crystal Onix',\n 'Crystal Steelix',\n 'Handout Happiny',\n 'Pinkan Rhyhorn (non shiny)',\n 'Red Spearow',\n 'shiny Totem Ribombee',\n 'misc Map sprite edits',\n 'Bulbasaur (Rose)',\n ],\n // NOTES: Created specifically for PokéClicker.\n },\n {\n name: 'nileplumb',\n link: 'https://www.deviantart.com/nileplumb',\n resources: [\n 'Furfrou Trim Shop Icons',\n ],\n // NOTES: Granted permission on devianart to NiceDice via PN\n },\n {\n name: 'pixie-rings',\n link: 'https://www.deviantart.com/pixie-rings/art/Pokemon-Trainer-Sprite-Furisode-Girl-560892832',\n image: 'https://a.deviantart.net/avatars-big/p/i/pixie-rings.jpg?14',\n resources: [\n 'Furisode Girl Katherine',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'PKMNTrainerSpriterC, akuma-tsubasa & Metapod23',\n link: 'https://www.deviantart.com/pkmntrainerspriterc/art/Ash-Ketchum-Sprite-Set-435950341',\n resources: [\n 'Ash Ketchum',\n ],\n // NOTES: Permission given on image page if credited.\n },\n {\n name: 'Pokémon Reborn\\'s cass and Amethyst',\n link: 'https://www.rebornevo.com/pr/index.html/',\n resources: [\n 'Underground Shiny stone',\n 'Underground Dusk stone',\n 'Underground Dawn stone',\n 'Underground Ice stone',\n ],\n // Notes: Permission given to SomeoneAlive via Discord DM\n },\n {\n name: 'PhoenixOfLight92',\n link: 'https://www.deviantart.com/phoenixoflight92',\n image: 'https://a.deviantart.net/avatars-big/p/h/phoenixoflight92.png',\n resources: [\n 'Shauna',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'Pokemon Showdown',\n link: 'https://play.pokemonshowdown.com/sprites/trainers/',\n resources: [\n 'Jessie and James',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'Prodigal96',\n link: 'https://www.deviantart.com/prodigal96',\n image: 'https://a.deviantart.net/avatars-big/p/r/prodigal96.jpg',\n resources: [\n 'Rainbow Rocket overworld sprites',\n ],\n // Notes: Free to use, no credit required\n },\n {\n name: 'procompyart',\n link: 'https://www.instagram.com/procompyart/',\n resources: [\n 'Elf Munchlax',\n 'Grinch Celebi',\n 'Ivysaur (Rose)',\n 'Venusaur (Rose)',\n ],\n // Notes: Permission given via Discord #development-chat\n },\n {\n name: 'Qwertypop04',\n link: 'https://discordapp.com/users/345944451472031744/',\n resources: [\n 'Pinkan Rhydon',\n 'Shadow Altaria',\n 'Shadow Ariados',\n 'Shadow Dugtrio',\n 'Shadow Entei',\n 'Shadow Exeggutor',\n 'Shadow Flaaffy',\n 'Shadow Forretress',\n 'Shadow Gligar',\n 'Shadow Golduck',\n 'Shadow Granbull',\n 'Shadow Growlithe',\n 'Shadow Gulpin',\n 'Shadow Heracross',\n 'Shadow Hitmonchan',\n 'Shadow Hitmonlee',\n 'Shadow Kangaskhan',\n 'Shadow Lapras',\n 'Shadow Ledian',\n 'Shadow Magcargo',\n 'Shadow Manectric',\n 'Shadow Mantine',\n 'Shadow Mareep',\n 'Shadow Marowak',\n 'Shadow Mr. Mime',\n 'Shadow Natu',\n 'Shadow Pidgeotto',\n 'Shadow Pinsir',\n 'Shadow Quagsire',\n 'Shadow Raikou',\n 'Shadow Rhydon',\n 'Shadow Sableye',\n 'Shadow Salamence',\n 'Shadow Scizor',\n 'Shadow Scyther',\n 'Shadow Shellder',\n 'Shadow Skarmory',\n 'Shadow Skiploom',\n 'Shadow Slugma',\n 'Shadow Snorunt',\n 'Shadow Spheal',\n 'Shadow Spinarak',\n 'Shadow Swablu',\n 'Shadow Swinub',\n 'Shadow Tauros',\n 'Shadow Togepi',\n 'Shadow Togetic',\n 'Shadow Tyranitar',\n 'Shadow Vibrava',\n 'Shadow Zangoose',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'RedSparr0w',\n link: 'https://github.com/RedSparr0w',\n image: 'https://avatars.githubusercontent.com/u/7288322?v=4',\n resources: [\n 'Let\\'s Go Eevee',\n 'Let\\'s Go Pikachu',\n 'Pikachu (Gengar)',\n 'Santa Snorlax',\n 'Spooky Bulbasaur',\n 'Spooky Togepi',\n 'Totem Ribombee',\n 'Underground Fossilized Bird',\n 'Underground Fossilized Fish',\n ],\n },\n {\n name: 'RekiemLock',\n link: 'https://www.deviantart.com/rekiemlock',\n image: 'https://a.deviantart.net/avatars-big/r/e/rekiemlock.jpg',\n resources: [\n 'Team Skull overworld sprite',\n ],\n // Notes: Permission given if credited\n },\n {\n name: 'Robbinspook',\n link: 'https://discordapp.com/users/359364624526868480/',\n resources: [\n 'Grand Master Greevil',\n ],\n // Notes: Made specifically for PokéClicker.\n },\n {\n name: 'SageDeoxys, Wolfang62, LarryTurbo, tammyclaydon',\n link: 'https://www.pokecommunity.com/showthread.php?t=474312',\n resources: [\n 'Dynamic BG Galar (Gen 8) sprites',\n ],\n },\n {\n name: 'Sandi315',\n link: 'https://www.reddit.com/user/Sandi315/',\n resources: [\n 'Pokémon background',\n ],\n },\n {\n name: 'Similation',\n link: 'https://www.deviantart.com/similation',\n image: 'https://a.deviantart.net/avatars-big/s/i/similation.jpg',\n resources: [\n 'Professor Sycamore',\n ],\n // Notes: Permission given on image page if credited\n },\n {\n name: 'Smogon Sprite Project',\n link: 'https://www.smogon.com/forums/forums/smeargles-laptop.325/',\n resources: [\n 'Alola Sprites',\n 'Galar Sprites',\n 'Kalos Sprites',\n 'Paldea Sprites',\n ],\n // NOTES: free for non-profit use.\n },\n {\n name: 'Someone Soul',\n link: 'https://discordapp.com/users/824384977633411082',\n resources: [\n 'Bede overworld image',\n 'Burmy (No Coat)',\n 'Cactus',\n 'Camouflaged Kecleon image',\n 'Cissy',\n 'Cipher Key Lair',\n 'Miror B. Peons',\n 'Cipher Peon Blusix',\n 'Cipher Peon Resix',\n 'Cipher Peon (skrub)',\n 'Cipher Peon (mirakle b)',\n 'Coastland route map sprites',\n 'Christmas Present',\n 'Crystalline Cocoon',\n 'Dead tree map sprite',\n 'Detective Pikachu',\n 'Detective Raichu',\n 'Dr Cozmo',\n 'Draconid Elder',\n 'Dyna Tree',\n 'Elf Munchlax Shuffle',\n 'Friend Safari',\n 'Sudowoodo (Golden)',\n 'Heart Diamond',\n 'Iceland route map sprites',\n 'Macro Cosmos (male) and (female)',\n 'Magikarp Grey Bubbles',\n 'Magikarp Grey Diamonds',\n 'Magikarp Grey Patches',\n 'Magikarp Purple Bubbles',\n 'Magikarp Purple Diamonds',\n 'Magikarp Purple Patches',\n 'Magikarp Orange Forehead',\n 'Magikarp Orange Mask',\n 'Magikarp Black Forehead',\n 'Magikarp Black Mask',\n 'Magikarp Saucy Blue',\n 'Magikarp Blue Raindrops',\n 'Magikarp Saucy Violet',\n 'Magikarp Violet Raindrops',\n 'Max Raid Den map sprites (active and inactive)',\n 'Meta Groudon',\n 'Millis Steel',\n 'Mireland route map sprites',\n 'Murph',\n 'Mystery Troop Blue',\n 'Mystery Troop Green',\n 'Mystery Troop Red',\n 'Noble Arcanine',\n 'Noble Avalugg',\n 'Noble Electrode',\n 'Noble Kleavor',\n 'Noble Lilligant',\n 'Outskirt Stand',\n 'Pillar map sprite',\n 'Pinkan Berry',\n 'Pinkan Electabuzz',\n 'Pinkan Pidgey',\n 'Pinkan Pidgeotto',\n 'Pinkan Rattata',\n 'Pinkan Vileplume',\n 'Professor Hastings',\n 'Professor Juniper',\n 'Realgam Tower',\n 'Riot',\n 'Salazzle overworld images',\n 'Santa Jynx',\n 'Shadow Aipom',\n 'Shadow Bayleef',\n 'Shadow Delibird',\n 'Shadow Dunsparce',\n 'Shadow Furret',\n 'Shadow Hitmontop',\n 'Shadow Houndour',\n 'Shadow Ledyba',\n 'Shadow Meditite',\n 'Shadow Misdreavus',\n 'Shadow Noctowl',\n 'Shadow Piloswine',\n 'Shadow Poochyena',\n 'Shadow Quilava',\n 'Shadow Qwilfish',\n 'Shadow Stantler',\n 'Shadow Sunflora',\n 'Shadow Yanma',\n 'Shady Guy (wes)',\n 'Team Flare Boss Lysandre',\n 'Valencian Butterfree',\n 'Valencian Vileplume',\n 'Valencian Weepinbell',\n 'Onix (Rocker)',\n 'Weepinbell (Fancy)',\n 'Gengar (Punk)',\n 'Tangela (Pom-pom)',\n 'Goldeen (Diva)',\n ],\n // NOTES: Made specifically for Pokeclicker.\n },\n {\n name: 'tebited15',\n link: 'https://www.deviantart.com/tebited15',\n image: 'https://a.deviantart.net/avatars-big/t/e/tebited15.png',\n resources: [\n 'Grant',\n 'Calem overworld',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'TintjeMadelintje101',\n link: 'https://www.deviantart.com/tintjemadelintje101',\n image: 'https://a.deviantart.net/avatars-big/t/i/tintjemadelintje101.jpg',\n resources: [\n 'Calem',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'Ulithium_Dragon',\n link: 'https://www.pokecommunity.com/showthread.php?t=397580',\n image: 'https://data.pokecommunity.com/avatars/o/531/531836.jpg',\n resources: [\n 'Ultra Wormhole',\n ],\n // Notes: Permission given on image page, credit optional, still given cuz we're nice like that.\n },\n {\n name: 'VictorV111',\n link: 'https://www.deviantart.com/victorv111',\n image: 'https://a.deviantart.net/avatars-big/v/i/victorv111.png',\n resources: [\n 'Celio',\n 'Mr. Pokémon',\n 'Professor Ivy',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'Vur3',\n link: 'https://www.deviantart.com/vur3',\n image: 'https://a.deviantart.net/avatars-big/v/u/vur3.png',\n resources: [\n 'Glacia revamp',\n ],\n // Notes: Permission if credited.\n },\n {\n name: 'Wolfang62',\n link: 'https://www.deviantart.com/wolfang62',\n image: 'https://a.deviantart.net/avatars-big/w/o/wolfang62.jpg',\n resources: [\n 'Overworld Hop',\n 'Dynamic BG Meltan',\n 'Dynamic BG Melmetal',\n ],\n // Notes: Permission given on image page if credited.\n },\n {\n name: 'X-5-4-5-2',\n link: 'https://www.deviantart.com/x-5-4-5-2',\n image: 'https://a.deviantart.net/avatars-big/x/_/x-5-4-5-2.png',\n resources: [\n 'Officer Jenny',\n ],\n // Notes: Permission given on image page.\n },\n {\n name: 'ZacWeavile',\n link: 'https://www.smogon.com/forums/threads/zacweavile-galery.3712625/',\n image: 'https://www.smogon.com/forums/media/data/avatars/o/522/522483.jpg?1650909371',\n resources: [\n 'Atticus',\n 'Charm',\n 'Coin',\n 'Dexio (Gen 6)',\n 'Dulse',\n 'Eri',\n 'Giacomo',\n 'Green',\n 'Grusha',\n 'Mela',\n 'Ortega',\n 'Penny',\n 'Phyco',\n 'Soliera',\n 'Zossie',\n ],\n // Notes: Permission given if credited.\n },\n {\n name: 'Zender1752',\n link: 'https://www.deviantart.com/zender1752',\n image: 'https://a.deviantart.net/avatars-big/z/e/zender1752.png',\n resources: [\n 'Hau overworld',\n 'Gladion overworld',\n 'Plumeria overworld',\n 'Overworld Klara',\n 'Overworld Avery',\n 'Overworld Miror B.',\n ],\n // Notes: Permission given on image page if credited\n },\n].map((c) => {\n var _a, _b;\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].seed(parseInt(c.name, 36));\n // eslint-disable-next-line no-param-reassign\n c.image = (_a = c.image) !== null && _a !== void 0 ? _a : `assets/images/profile/trainer-${_utilities_SeededRand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].intBetween(0, _profile_Profile__WEBPACK_IMPORTED_MODULE_0__[\"default\"].MAX_TRAINER - 1)}.png`;\n // eslint-disable-next-line no-param-reassign\n c.link = (_b = c.link) !== null && _b !== void 0 ? _b : `#${c.name}`;\n return c;\n});\n/*\nfetch(`https://api.github.com/repos/pokeclicker/pokeclicker/contributors?per_page=100&anon=1`).then(async res => {\n const json = await res.json();\n console.log(json.map(c => {\n if (!c.login) return c;\n const anon = json.find(_c => _c.name == c.login);\n c.contributions += anon ? anon.contributions : 0;\n return c;\n }).filter(c => c.login).sort((a, b) => b.contributions - a.contributions).map(c => ` {\n resources: [\n ${c.contributions},\n ],\n name: '${c.login}',\n link: '${c.html_url}',\n image: '${c.avatar_url}',\n },`).join('\\n'));\n});\n*/\nconst CodeCredits = [\n {\n resources: [\n 1463,\n ],\n name: 'RedSparr0w',\n link: 'https://github.com/RedSparr0w',\n image: 'https://avatars.githubusercontent.com/u/7288322?v=4',\n },\n {\n resources: [\n 565,\n ],\n name: 'Ishadijcks',\n link: 'https://github.com/Ishadijcks',\n image: 'https://avatars.githubusercontent.com/u/9715314?v=4',\n },\n {\n resources: [\n 464,\n ],\n name: 'Aegyo',\n link: 'https://github.com/Aegyo',\n image: 'https://avatars.githubusercontent.com/u/4183969?v=4',\n },\n {\n resources: [\n 390,\n ],\n name: 'dennism1997',\n link: 'https://github.com/dennism1997',\n image: 'https://avatars.githubusercontent.com/u/8763360?v=4',\n },\n {\n resources: [\n 246,\n ],\n name: 'Jaaslet',\n link: 'https://github.com/Jaaslet',\n image: 'https://avatars.githubusercontent.com/u/2961347?v=4',\n },\n {\n resources: [\n 180,\n ],\n name: 'Ultima1990',\n link: 'https://github.com/Ultima1990',\n image: 'https://avatars.githubusercontent.com/u/69112975?v=4',\n },\n {\n resources: [\n 170,\n ],\n name: 'CypherX',\n link: 'https://github.com/CypherX',\n image: 'https://avatars.githubusercontent.com/u/672420?v=4',\n },\n {\n resources: [\n 161,\n ],\n name: 'Qwertypop04',\n link: 'https://github.com/Qwertypop04',\n image: 'https://avatars.githubusercontent.com/u/63805905?v=4',\n },\n {\n resources: [\n 115,\n ],\n name: 'Farboo171',\n link: 'https://github.com/Farboo171',\n image: 'https://avatars.githubusercontent.com/u/109317224?v=4',\n },\n {\n resources: [\n 96,\n ],\n name: 'RegisCoaxans',\n link: 'https://github.com/RegisCoaxans',\n image: 'https://avatars.githubusercontent.com/u/68825215?v=4',\n },\n {\n resources: [\n 91,\n ],\n name: 'EatPant2nd',\n link: 'https://github.com/EatPant2nd',\n image: 'https://avatars.githubusercontent.com/u/106291026?v=4',\n },\n {\n resources: [\n 91,\n ],\n name: 'CorgiOnNeptune',\n link: 'https://github.com/CorgiOnNeptune',\n image: 'https://avatars.githubusercontent.com/u/104700780?v=4',\n },\n {\n resources: [\n 78,\n ],\n name: 'jk13pclick',\n link: 'https://github.com/jk13pclick',\n image: 'https://avatars.githubusercontent.com/u/83479938?v=4',\n },\n {\n resources: [\n 72,\n ],\n name: 'umbralOptimatum',\n link: 'https://github.com/umbralOptimatum',\n image: 'https://avatars.githubusercontent.com/u/12092270?v=4',\n },\n {\n resources: [\n 71,\n ],\n name: 'osherwott',\n link: 'https://github.com/osherwott',\n image: 'https://avatars.githubusercontent.com/u/114451054?v=4',\n },\n {\n resources: [\n 64,\n ],\n name: 'fujnw',\n link: 'https://github.com/fujnw',\n image: 'https://avatars.githubusercontent.com/u/36806183?v=4',\n },\n {\n resources: [\n 51,\n ],\n name: 'BaineGames',\n link: 'https://github.com/BaineGames',\n image: 'https://avatars.githubusercontent.com/u/8126876?v=4',\n },\n {\n resources: [\n 43,\n ],\n name: 'HLXII',\n link: 'https://github.com/HLXII',\n image: 'https://avatars.githubusercontent.com/u/33099029?v=4',\n },\n {\n resources: [\n 40,\n ],\n name: 'Crobat4',\n link: 'https://github.com/Crobat4',\n image: 'https://avatars.githubusercontent.com/u/104547700?v=4',\n },\n {\n resources: [\n 37,\n ],\n name: 'DraKay',\n link: 'https://github.com/DraKay',\n image: 'https://avatars.githubusercontent.com/u/114853432?v=4',\n },\n {\n resources: [\n 34,\n ],\n name: 'LuchoDreamer',\n link: 'https://github.com/LuchoDreamer',\n image: 'https://avatars.githubusercontent.com/u/120585930?v=4',\n },\n {\n resources: [\n 32,\n ],\n name: 'apple096',\n link: 'https://github.com/apple096',\n image: 'https://avatars.githubusercontent.com/u/62083669?v=4',\n },\n {\n resources: [\n 31,\n ],\n name: 'imgbot[bot]',\n link: 'https://github.com/apps/imgbot',\n image: 'https://avatars.githubusercontent.com/in/4706?v=4',\n },\n {\n resources: [\n 28,\n ],\n name: 'tkatchen',\n link: 'https://github.com/tkatchen',\n image: 'https://avatars.githubusercontent.com/u/26515965?v=4',\n },\n {\n resources: [\n 28,\n ],\n name: 'dependabot[bot]',\n link: 'https://github.com/apps/dependabot',\n image: 'https://avatars.githubusercontent.com/in/29110?v=4',\n },\n {\n resources: [\n 28,\n ],\n name: 'amative1',\n link: 'https://github.com/amative1',\n image: 'https://avatars.githubusercontent.com/u/14666630?v=4',\n },\n {\n resources: [\n 27,\n ],\n name: 'PixLSteam',\n link: 'https://github.com/PixLSteam',\n image: 'https://avatars.githubusercontent.com/u/21047644?v=4',\n },\n {\n resources: [\n 24,\n ],\n name: 'DataCrusade',\n link: 'https://github.com/DataCrusade',\n image: 'https://avatars.githubusercontent.com/u/36621129?v=4',\n },\n {\n resources: [\n 24,\n ],\n name: 'davmillar',\n link: 'https://github.com/davmillar',\n image: 'https://avatars.githubusercontent.com/u/576958?v=4',\n },\n {\n resources: [\n 23,\n ],\n name: 'LuqDragon',\n link: 'https://github.com/LuqDragon',\n image: 'https://avatars.githubusercontent.com/u/27972070?v=4',\n },\n {\n resources: [\n 23,\n ],\n name: 'RedzepR',\n link: 'https://github.com/RedzepR',\n image: 'https://avatars.githubusercontent.com/u/143606926?v=4',\n },\n {\n resources: [\n 23,\n ],\n name: 'Someonealive-QN',\n link: 'https://github.com/Someonealive-QN',\n image: 'https://avatars.githubusercontent.com/u/97617298?v=4',\n },\n {\n resources: [\n 21,\n ],\n name: 'SpenserJ',\n link: 'https://github.com/SpenserJ',\n image: 'https://avatars.githubusercontent.com/u/90011?v=4',\n },\n {\n resources: [\n 18,\n ],\n name: 'NiCeDiCe90',\n link: 'https://github.com/NiCeDiCe90',\n image: 'https://avatars.githubusercontent.com/u/82889773?v=4',\n },\n {\n resources: [\n 17,\n ],\n name: 'Vodovik',\n link: 'https://github.com/Vodovik',\n image: 'https://avatars.githubusercontent.com/u/25463975?v=4',\n },\n {\n resources: [\n 17,\n ],\n name: 'walkerboh',\n link: 'https://github.com/walkerboh',\n image: 'https://avatars.githubusercontent.com/u/6124960?v=4',\n },\n {\n resources: [\n 15,\n ],\n name: 'DaveYognaught',\n link: 'https://github.com/DaveYognaught',\n image: 'https://avatars.githubusercontent.com/u/58609098?v=4',\n },\n {\n resources: [\n 15,\n ],\n name: 'Mephistic',\n link: 'https://github.com/Mephistic',\n image: 'https://avatars.githubusercontent.com/u/2694761?v=4',\n },\n {\n resources: [\n 14,\n ],\n name: 'AevitasDragonkin',\n link: 'https://github.com/AevitasDragonkin',\n image: 'https://avatars.githubusercontent.com/u/77356760?v=4',\n },\n {\n resources: [\n 14,\n ],\n name: 'wormania',\n link: 'https://github.com/wormania',\n image: 'https://avatars.githubusercontent.com/u/16630222?v=4',\n },\n {\n resources: [\n 13,\n ],\n name: 'Nydaleclya',\n link: 'https://github.com/Nydaleclya',\n image: 'https://avatars.githubusercontent.com/u/21280367?v=4',\n },\n {\n resources: [\n 12,\n ],\n name: 'DreamNya',\n link: 'https://github.com/DreamNya',\n image: 'https://avatars.githubusercontent.com/u/34838824?v=4',\n },\n {\n resources: [\n 12,\n ],\n name: 'Razorflamekun',\n link: 'https://github.com/Razorflamekun',\n image: 'https://avatars.githubusercontent.com/u/53189811?v=4',\n },\n {\n resources: [\n 10,\n ],\n name: 'nls0',\n link: 'https://github.com/nls0',\n image: 'https://avatars.githubusercontent.com/u/41541662?v=4',\n },\n {\n resources: [\n 10,\n ],\n name: 'Symi001',\n link: 'https://github.com/Symi001',\n image: 'https://avatars.githubusercontent.com/u/86664830?v=4',\n },\n {\n resources: [\n 9,\n ],\n name: 'KrushGames',\n link: 'https://github.com/KrushGames',\n image: 'https://avatars.githubusercontent.com/u/71728117?v=4',\n },\n {\n resources: [\n 9,\n ],\n name: 'xslk',\n link: 'https://github.com/xslk',\n image: 'https://avatars.githubusercontent.com/u/100386196?v=4',\n },\n {\n resources: [\n 8,\n ],\n name: 'CoolgirlOmega',\n link: 'https://github.com/CoolgirlOmega',\n image: 'https://avatars.githubusercontent.com/u/101759306?v=4',\n },\n {\n resources: [\n 8,\n ],\n name: 'unclebanks',\n link: 'https://github.com/unclebanks',\n image: 'https://avatars.githubusercontent.com/u/49108377?v=4',\n },\n {\n resources: [\n 7,\n ],\n name: 'morcousw',\n link: 'https://github.com/morcousw',\n image: 'https://avatars.githubusercontent.com/u/819898?v=4',\n },\n {\n resources: [\n 7,\n ],\n name: 'Leafsw0rd',\n link: 'https://github.com/Leafsw0rd',\n image: 'https://avatars.githubusercontent.com/u/27202133?v=4',\n },\n {\n resources: [\n 7,\n ],\n name: 'JapuDCret',\n link: 'https://github.com/JapuDCret',\n image: 'https://avatars.githubusercontent.com/u/14893450?v=4',\n },\n {\n resources: [\n 7,\n ],\n name: 'IanWalder',\n link: 'https://github.com/IanWalder',\n image: 'https://avatars.githubusercontent.com/u/76807453?v=4',\n },\n {\n resources: [\n 7,\n ],\n name: 'HyruleTeam64',\n link: 'https://github.com/HyruleTeam64',\n image: 'https://avatars.githubusercontent.com/u/106347315?v=4',\n },\n {\n resources: [\n 6,\n ],\n name: 'jaahay',\n link: 'https://github.com/jaahay',\n image: 'https://avatars.githubusercontent.com/u/10636658?v=4',\n },\n {\n resources: [\n 6,\n ],\n name: 'arduousFrivolity',\n link: 'https://github.com/arduousFrivolity',\n image: 'https://avatars.githubusercontent.com/u/112739771?v=4',\n },\n {\n resources: [\n 5,\n ],\n name: 'jameswasson',\n link: 'https://github.com/jameswasson',\n image: 'https://avatars.githubusercontent.com/u/7018593?v=4',\n },\n {\n resources: [\n 5,\n ],\n name: 'Quindon',\n link: 'https://github.com/Quindon',\n image: 'https://avatars.githubusercontent.com/u/51273302?v=4',\n },\n {\n resources: [\n 4,\n ],\n name: 'Sinonea',\n link: 'https://github.com/Sinonea',\n image: 'https://avatars.githubusercontent.com/u/162829478?v=4',\n },\n {\n resources: [\n 4,\n ],\n name: 'kushpatel0703',\n link: 'https://github.com/kushpatel0703',\n image: 'https://avatars.githubusercontent.com/u/44878521?v=4',\n },\n {\n resources: [\n 4,\n ],\n name: 'pjeanjean',\n link: 'https://github.com/pjeanjean',\n image: 'https://avatars.githubusercontent.com/u/7363343?v=4',\n },\n {\n resources: [\n 4,\n ],\n name: 'kittenchilly',\n link: 'https://github.com/kittenchilly',\n image: 'https://avatars.githubusercontent.com/u/23617175?v=4',\n },\n {\n resources: [\n 4,\n ],\n name: 'lenormandSeb',\n link: 'https://github.com/lenormandSeb',\n image: 'https://avatars.githubusercontent.com/u/58883370?v=4',\n },\n {\n resources: [\n 4,\n ],\n name: 'RealPendragon',\n link: 'https://github.com/RealPendragon',\n image: 'https://avatars.githubusercontent.com/u/26049815?v=4',\n },\n {\n resources: [\n 3,\n ],\n name: 'mewCoyote',\n link: 'https://github.com/mewCoyote',\n image: 'https://avatars.githubusercontent.com/u/24418736?v=4',\n },\n {\n resources: [\n 3,\n ],\n name: 'aheadfrogg',\n link: 'https://github.com/aheadfrogg',\n image: 'https://avatars.githubusercontent.com/u/166861705?v=4',\n },\n {\n resources: [\n 3,\n ],\n name: 'Arkive86',\n link: 'https://github.com/Arkive86',\n image: 'https://avatars.githubusercontent.com/u/43861728?v=4',\n },\n {\n resources: [\n 3,\n ],\n name: 'GLoarer',\n link: 'https://github.com/GLoarer',\n image: 'https://avatars.githubusercontent.com/u/63751230?v=4',\n },\n {\n resources: [\n 3,\n ],\n name: 'Dragonchitos',\n link: 'https://github.com/Dragonchitos',\n image: 'https://avatars.githubusercontent.com/u/107852760?v=4',\n },\n {\n resources: [\n 3,\n ],\n name: 'Farigh',\n link: 'https://github.com/Farigh',\n image: 'https://avatars.githubusercontent.com/u/11090416?v=4',\n },\n {\n resources: [\n 3,\n ],\n name: 'Awec4',\n link: 'https://github.com/Awec4',\n image: 'https://avatars.githubusercontent.com/u/20971496?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'zyx-xyzzy',\n link: 'https://github.com/zyx-xyzzy',\n image: 'https://avatars.githubusercontent.com/u/106144712?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'shallotmama',\n link: 'https://github.com/shallotmama',\n image: 'https://avatars.githubusercontent.com/u/54243859?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'mog-kupo',\n link: 'https://github.com/mog-kupo',\n image: 'https://avatars.githubusercontent.com/u/72212222?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'YetiSpaghetti',\n link: 'https://github.com/YetiSpaghetti',\n image: 'https://avatars.githubusercontent.com/u/14989011?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'VodkaFR',\n link: 'https://github.com/VodkaFR',\n image: 'https://avatars.githubusercontent.com/u/106116092?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'switchlove',\n link: 'https://github.com/switchlove',\n image: 'https://avatars.githubusercontent.com/u/24837595?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'TheRealJoeFriel',\n link: 'https://github.com/TheRealJoeFriel',\n image: 'https://avatars.githubusercontent.com/u/32469171?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'Shinesprite41',\n link: 'https://github.com/Shinesprite41',\n image: 'https://avatars.githubusercontent.com/u/73353569?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'Penguindude2000',\n link: 'https://github.com/Penguindude2000',\n image: 'https://avatars.githubusercontent.com/u/80924419?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'Gameonlp',\n link: 'https://github.com/Gameonlp',\n image: 'https://avatars.githubusercontent.com/u/5724808?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'AbstractBeliefs',\n link: 'https://github.com/AbstractBeliefs',\n image: 'https://avatars.githubusercontent.com/u/1375203?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'FredisonP',\n link: 'https://github.com/FredisonP',\n image: 'https://avatars.githubusercontent.com/u/94978719?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'BaileyP2SR',\n link: 'https://github.com/BaileyP2SR',\n image: 'https://avatars.githubusercontent.com/u/82694334?v=4',\n },\n {\n resources: [\n 2,\n ],\n name: 'adapap',\n link: 'https://github.com/adapap',\n image: 'https://avatars.githubusercontent.com/u/19696846?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'alolan-sandslash',\n link: 'https://github.com/alolan-sandslash',\n image: 'https://avatars.githubusercontent.com/u/142755288?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'zarunet',\n link: 'https://github.com/zarunet',\n image: 'https://avatars.githubusercontent.com/u/43345608?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'yannhodiesne',\n link: 'https://github.com/yannhodiesne',\n image: 'https://avatars.githubusercontent.com/u/56298263?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'ValorBeastFlame',\n link: 'https://github.com/ValorBeastFlame',\n image: 'https://avatars.githubusercontent.com/u/86545048?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'greeny',\n link: 'https://github.com/greeny',\n image: 'https://avatars.githubusercontent.com/u/3734204?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'SymaLoernn',\n link: 'https://github.com/SymaLoernn',\n image: 'https://avatars.githubusercontent.com/u/48735156?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'r2d2rigo',\n link: 'https://github.com/r2d2rigo',\n image: 'https://avatars.githubusercontent.com/u/2871131?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'RobinLaevaert',\n link: 'https://github.com/RobinLaevaert',\n image: 'https://avatars.githubusercontent.com/u/33598142?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'fadedrob',\n link: 'https://github.com/fadedrob',\n image: 'https://avatars.githubusercontent.com/u/24292240?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'RichardPaulAstley',\n link: 'https://github.com/RichardPaulAstley',\n image: 'https://avatars.githubusercontent.com/u/25870563?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'Razikd29',\n link: 'https://github.com/Razikd29',\n image: 'https://avatars.githubusercontent.com/u/108469942?v=4',\n },\n {\n resources: [\n 1,\n ],\n name: 'QuantariusRay',\n link: 'https://github.com/QuantariusRay',\n image: 'https://avatars.githubusercontent.com/u/31900736?v=4',\n },\n].map((c) => {\n var _a;\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].seed(parseInt(c.name, 36));\n // eslint-disable-next-line no-param-reassign\n c.image = (_a = c.image) !== null && _a !== void 0 ? _a : `assets/images/profile/trainer-${_utilities_SeededRand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].intBetween(0, _profile_Profile__WEBPACK_IMPORTED_MODULE_0__[\"default\"].MAX_TRAINER - 1)}.png`;\n return c;\n});\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/Credits.ts?"); + +/***/ }), + +/***/ "./src/modules/DataStore/BadgeCase.ts": +/*!********************************************!*\ + !*** ./src/modules/DataStore/BadgeCase.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BadgeCase)\n/* harmony export */ });\n/* harmony import */ var _enums_Badges__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/Badges */ \"./src/modules/enums/Badges.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\nconst emptyBadgeList = new Array(_GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].enumLength(_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"])).fill(false);\nclass BadgeCase {\n constructor() {\n this.name = 'Badge Case';\n this.saveKey = 'badgeCase';\n this.defaults = {};\n this.badgeList = emptyBadgeList.map((v) => ko.observable(v));\n this.maxLevel = ko.pureComputed(() => Math.min(100, (this.badgeCount() + 2) * 10));\n this.badgeCaseTooltip = ko.pureComputed(() => {\n const maxLevel = this.maxLevel();\n return `Earning badges raises the maximum possible level of your Pokémon, up to 100.
The max level your Pokémon can currently reach is ${maxLevel}.`;\n });\n }\n badgeCount() {\n return this.badgeList.reduce((acc, b) => (acc + Number(b())), 0);\n }\n gainBadge(badge) {\n this.badgeList[badge](true);\n }\n hasBadge(badge) {\n if (badge === null || badge === _enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None) {\n return true;\n }\n return !!this.badgeList[badge]();\n }\n // This method intentionally left blank\n // eslint-disable-next-line class-methods-use-this\n initialize() { }\n // eslint-disable-next-line class-methods-use-this\n canAccess() { return true; }\n fromJSON(json) {\n if (json == null) {\n return;\n }\n json.forEach((hasBadge, index) => {\n this.badgeList[index](hasBadge);\n });\n }\n toJSON() {\n // We only want to save upto the highest badge we have obtained,\n // everything else is assumed to be false\n return _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].filterArrayEnd(this.badgeList.map(ko.unwrap));\n }\n // This method intentionally left blank\n // eslint-disable-next-line class-methods-use-this\n update() { }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/DataStore/BadgeCase.ts?"); + +/***/ }), + +/***/ "./src/modules/DataStore/StatisticStore/getRouteKillsProxy.ts": +/*!********************************************************************!*\ + !*** ./src/modules/DataStore/StatisticStore/getRouteKillsProxy.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../GameConstants */ \"./src/modules/GameConstants.ts\");\n\n\nconst failedSetValue = () => 0;\n// TODO: Determine what the return type is\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (() => {\n // Filter the Region constant to only the string values (names)\n const regionNames = Object.values(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region)\n .filter((v) => Number.isNaN(Number(v)));\n const zeroedRegions = Object.fromEntries(regionNames.map((region) => ([\n region,\n new Proxy({}, {\n get: (regionStats, prop) => {\n if (regionStats[prop]) {\n return regionStats[prop];\n }\n // Route Defeat are tracked by the route number as the key,\n // so only allow keys that can be numbers\n if (Number.isNaN(Number(prop))) {\n if (Number.isNaN(prop)) {\n // eslint-disable-next-line no-console\n console.trace(`[Statistics] [routeDefeat.${region}] Invalid property requested:`, prop);\n }\n return failedSetValue;\n }\n // eslint-disable-next-line no-param-reassign\n regionStats[prop] = ko.observable(0).extend({ numeric: 0 });\n return regionStats[prop];\n },\n // This makes it so the stats observable can't be accidently changed\n set: (obj, prop, value) => {\n const result = obj[prop](value);\n return result === failedSetValue;\n },\n }),\n ])));\n return new Proxy(zeroedRegions, {\n get: (regions, prop) => {\n // Convert the prop to the string version of the region\n const regionName = Number.isNaN(Number(prop))\n ? prop // A string was passed in\n : _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region[prop]; // Number was passed in\n if (!regionName) {\n // eslint-disable-next-line no-console\n console.trace('[Statistics] [routeKills] Attempted to get invalid region:', prop);\n }\n return regions[regionName];\n },\n // Prevent adding regions dynamically once the proxy is created\n set: (obj, prop, value) => {\n // eslint-disable-next-line no-console\n console.trace(`[Statistics] [routeKills] Attempted to dynamically set region ${String(prop)}:`, value);\n return false;\n },\n });\n});\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/DataStore/StatisticStore/getRouteKillsProxy.ts?"); + +/***/ }), + +/***/ "./src/modules/DataStore/StatisticStore/index.ts": +/*!*******************************************************!*\ + !*** ./src/modules/DataStore/StatisticStore/index.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Statistics)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _getRouteKillsProxy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getRouteKillsProxy */ \"./src/modules/DataStore/StatisticStore/getRouteKillsProxy.ts\");\n\n\nconst failedSetValue = () => 0;\nclass Statistics {\n constructor() {\n this.saveKey = 'statistics';\n this.defaults = {};\n this.selectedPokemonID = ko.observable(1);\n this.selectedBerryID = ko.observable(0).extend({ numeric: 0 });\n this.observables = [\n 'secondsPlayed',\n 'clickAttacks',\n 'questsCompleted',\n 'totalGemsGained',\n 'totalVitaminsPurchased',\n 'totalVitaminsObtained',\n 'totalMoney',\n 'totalDungeonTokens',\n 'totalQuestPoints',\n 'totalDiamonds',\n 'totalFarmPoints',\n 'totalBattlePoints',\n 'totalContestTokens',\n 'totalPokemonCaptured',\n 'totalPokemonDefeated',\n 'totalPokemonEncountered',\n 'totalPokemonHatched',\n 'totalShinyPokemonCaptured',\n 'totalShinyPokemonDefeated',\n 'totalShinyPokemonEncountered',\n 'totalShinyPokemonHatched',\n 'totalMalePokemonCaptured',\n 'totalMalePokemonDefeated',\n 'totalMalePokemonEncountered',\n 'totalMalePokemonHatched',\n 'totalFemalePokemonCaptured',\n 'totalFemalePokemonDefeated',\n 'totalFemalePokemonEncountered',\n 'totalFemalePokemonHatched',\n 'totalGenderlessPokemonCaptured',\n 'totalGenderlessPokemonDefeated',\n 'totalGenderlessPokemonEncountered',\n 'totalGenderlessPokemonHatched',\n 'totalShinyMalePokemonCaptured',\n 'totalShinyMalePokemonDefeated',\n 'totalShinyMalePokemonEncountered',\n 'totalShinyMalePokemonHatched',\n 'totalShinyFemalePokemonCaptured',\n 'totalShinyFemalePokemonDefeated',\n 'totalShinyFemalePokemonEncountered',\n 'totalShinyFemalePokemonHatched',\n 'totalShinyGenderlessPokemonCaptured',\n 'totalShinyGenderlessPokemonDefeated',\n 'totalShinyGenderlessPokemonEncountered',\n 'totalShinyGenderlessPokemonHatched',\n 'totalShadowPokemonCaptured',\n 'totalShadowPokemonDefeated',\n 'totalShadowMalePokemonCaptured',\n 'totalShadowMalePokemonDefeated',\n 'totalShadowFemalePokemonCaptured',\n 'totalShadowFemalePokemonDefeated',\n 'totalShadowGenderlessPokemonCaptured',\n 'totalShadowGenderlessPokemonDefeated',\n 'undergroundItemsFound',\n 'undergroundLayersMined',\n 'undergroundDailyDealTrades',\n 'totalManualHarvests',\n 'totalBerriesHarvested',\n 'totalBerriesObtained',\n 'totalBerriesReplanted',\n 'totalBerriesMutated',\n 'totalMulchesUsed',\n 'totalShovelsUsed',\n 'berryDailyDealTrades',\n 'battleFrontierTotalStagesCompleted',\n 'battleFrontierHighestStageCompleted',\n 'safariTimesEntered',\n 'safariRocksThrown',\n 'safariBaitThrown',\n 'safariBallsThrown',\n 'safariPokemonCaptured',\n 'safariShinyPokemonCaptured',\n 'safariStepsTaken',\n 'safariItemsObtained',\n ];\n this.arrayObservables = [\n 'gymsDefeated',\n 'dungeonsCleared',\n 'pokeballsUsed',\n 'pokeballsPurchased',\n 'pokeballsObtained',\n 'gemsGained',\n 'oakItemUses',\n 'berriesHarvested',\n 'berriesObtained',\n 'mulchesUsed',\n 'temporaryBattleDefeated',\n 'contestResults',\n 'contestStyleMaster',\n 'dungeonGuideAttempts',\n 'dungeonGuideClears',\n ];\n // These will allow negative values (special events etc)\n this.objectObservables = [\n 'pokemonCaptured',\n 'pokemonDefeated',\n 'pokemonSeen',\n 'pokemonEncountered',\n 'pokemonHatched',\n 'shinyPokemonCaptured',\n 'shinyPokemonDefeated',\n 'shinyPokemonEncountered',\n 'shinyPokemonHatched',\n 'malePokemonCaptured',\n 'malePokemonDefeated',\n 'malePokemonEncountered',\n 'malePokemonHatched',\n 'femalePokemonCaptured',\n 'femalePokemonDefeated',\n 'femalePokemonEncountered',\n 'femalePokemonHatched',\n 'shinyMalePokemonCaptured',\n 'shinyFemalePokemonCaptured',\n 'shinyMalePokemonDefeated',\n 'shinyFemalePokemonDefeated',\n 'shinyMalePokemonEncountered',\n 'shinyFemalePokemonEncountered',\n 'shinyMalePokemonHatched',\n 'shinyFemalePokemonHatched',\n 'shadowPokemonCaptured',\n 'shadowPokemonDefeated',\n 'shadowMalePokemonCaptured',\n 'shadowFemalePokemonCaptured',\n 'shadowMalePokemonDefeated',\n 'shadowFemalePokemonDefeated',\n 'npcTalkedTo',\n ];\n // Observables that can be automatically generated\n this.autogeneratedObservables = [\n 'routeKills',\n ];\n this.observables.forEach((prop) => {\n this[prop] = ko.observable(0).extend({ numeric: 0 });\n });\n this.arrayObservables.forEach((array) => {\n // We use a proxy to generate new array observables on the fly.\n this[array] = new Proxy([], {\n get: (statistics, prop) => {\n if (typeof statistics[prop] !== 'undefined') {\n return statistics[prop];\n }\n // If it's not an int or less than zero, we do not want to set it\n const id = Math.floor(Number(prop));\n if (Number.isNaN(id) || id < 0 || id !== Number(prop)) {\n if (Number.isNaN(id)) {\n // eslint-disable-next-line no-console\n console.trace(`[Statistics] [${array}] Invalid property requested:`, prop);\n }\n return failedSetValue;\n }\n // eslint-disable-next-line no-param-reassign\n statistics[id] = ko.observable(0).extend({ numeric: 0 });\n return statistics[id];\n },\n // This makes it so the stats observable can't be accidently changed\n set: (obj, prop, value) => {\n const result = obj[prop](value);\n return result === failedSetValue;\n },\n // This is needed for map, forEach etc to work,\n // because they want to check if target.hasOwnProperty(\"0\") first.\n // The ko function doesn't seem to have any OwnProperties anyway,\n // so no harm here (don't quote me)\n // eslint-disable-next-line func-names\n has: (target, prop) => Reflect.has(target, prop),\n });\n });\n this.objectObservables.forEach((object) => {\n this[object] = new Proxy({}, {\n get: (statistics, prop) => {\n if (typeof statistics[prop] !== 'undefined') {\n return statistics[prop];\n }\n if (prop === 'highestID') {\n let highestID = 0;\n Object.entries(statistics).forEach(([key, val]) => {\n const numKey = Number(key);\n if (!Number.isNaN(numKey) && numKey > highestID && val() > 0) {\n highestID = numKey;\n }\n });\n return highestID;\n }\n // If it's not an int, we do not want to set it\n const id = Number(prop);\n if (Number.isNaN(id)) {\n // eslint-disable-next-line no-console\n console.trace(`[Statistics] [${object}] Invalid property requested:`, prop);\n return () => 0;\n }\n // eslint-disable-next-line no-param-reassign\n statistics[id] = ko.observable(0).extend({ numeric: 0 });\n return statistics[id];\n },\n // This makes it so the stats observable can't be accidently changed\n set: (obj, prop, value) => {\n const result = obj[prop](value);\n return result === failedSetValue;\n },\n // This is needed for map, forEach etc to work,\n // because they want to check if target.hasOwnProperty(\"0\") first.\n // The ko function doesn't seem to have any OwnProperties anyway,\n // so no harm here (don't quote me)\n // eslint-disable-next-line func-names\n has: (target, prop) => Reflect.has(target, prop),\n });\n });\n // We use a proxy to generate new array observables on the fly.\n this.routeKills = (0,_getRouteKillsProxy__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n }\n toJSON() {\n const saveObject = {};\n const getSaveDataValue = (rawInput) => {\n // Unwrap the value immediately, so we are always working with JS types\n const input = ko.unwrap(rawInput);\n if (Array.isArray(input)) {\n // Recurse arrays through getSaveDataValue, to get any observable values\n return input.map(getSaveDataValue);\n }\n if (typeof input === 'object' && !ko.isObservable(input)) {\n // Recurse objects through getSaveDataValue, to get any observable values\n return Object.entries(input).reduce((acc, [nextKey, nextObs]) => {\n const nextValue = getSaveDataValue(nextObs);\n if (nextValue === 0) {\n return acc;\n }\n acc[nextKey] = nextValue;\n return acc;\n }, {});\n }\n // If we get here, it isn't an array or object, so it must be a value.\n return input;\n };\n // Since we're able to flatten arrays/objects/values with a single function,\n // process all of them together\n [].concat(this.observables, this.arrayObservables, this.objectObservables, this.autogeneratedObservables).forEach((prop) => { saveObject[prop] = getSaveDataValue(this[prop]); });\n return saveObject;\n }\n fromJSON(json) {\n if (!json) {\n return;\n }\n this.observables.forEach((prop) => { this[prop](json[prop] || 0); });\n this.arrayObservables.forEach((array) => {\n var _a;\n (_a = json[array]) === null || _a === void 0 ? void 0 : _a.forEach((el, index) => {\n if (this[array] && this[array][index] && !Number.isNaN(Number(el))) {\n this[array][index](Number(el));\n }\n });\n });\n this.objectObservables.forEach((object) => {\n if (!json[object]) {\n return;\n }\n Object.entries(json[object]).forEach(([key, val]) => {\n const num = Number(val);\n if (!Number.isNaN(num) && num) {\n this[object][key](num);\n }\n });\n });\n const setAutogeneratedObservable = (objSet, objGet, key) => {\n // Don't try to process a null value. We should retain the defaults\n if (objGet[key] === null) {\n return;\n }\n if (typeof objSet[key] === 'undefined') {\n // Skip any values that are not allowed to be set\n // eslint-disable-next-line no-console\n console.trace('[Statistics] Could not set:', key);\n }\n else if (Array.isArray(objGet[key])) {\n // If we've found an array, loop into it\n for (let i = 0; i < objGet[key].length; i += 1) {\n setAutogeneratedObservable(objSet[key], objGet[key], i);\n }\n }\n else if (typeof objGet[key] === 'object') {\n // If we've found an object, nest into it\n Object.keys(objGet[key]).forEach((nestedKey) => {\n setAutogeneratedObservable(objSet[key], objGet[key], nestedKey);\n });\n }\n else if (ko.isObservable(objSet[key])) {\n // If we've found an observable, set it\n objSet[key](objGet[key]);\n }\n else {\n // eslint-disable-next-line no-console\n console.trace('[Statistics] Could not determine action to take for set:', key);\n }\n };\n this.autogeneratedObservables.forEach((object) => {\n if (!json[object]) {\n return;\n }\n setAutogeneratedObservable(this, json, object);\n });\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/DataStore/StatisticStore/index.ts?"); + +/***/ }), + +/***/ "./src/modules/DataStore/index.ts": +/*!****************************************!*\ + !*** ./src/modules/DataStore/index.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _BadgeCase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BadgeCase */ \"./src/modules/DataStore/BadgeCase.ts\");\n/* harmony import */ var _StatisticStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./StatisticStore */ \"./src/modules/DataStore/StatisticStore/index.ts\");\n\n\nconst DataStore = {\n badge: _BadgeCase__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n statistics: _StatisticStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DataStore);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/DataStore/index.ts?"); + +/***/ }), + +/***/ "./src/modules/GameConstants.ts": +/*!**************************************!*\ + !*** ./src/modules/GameConstants.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ACHIEVEMENT_DEFEAT_DUNGEON_VALUES\": () => (/* binding */ ACHIEVEMENT_DEFEAT_DUNGEON_VALUES),\n/* harmony export */ \"ACHIEVEMENT_DEFEAT_GYM_VALUES\": () => (/* binding */ ACHIEVEMENT_DEFEAT_GYM_VALUES),\n/* harmony export */ \"ACHIEVEMENT_DEFEAT_ROUTE_VALUES\": () => (/* binding */ ACHIEVEMENT_DEFEAT_ROUTE_VALUES),\n/* harmony export */ \"ACHIEVEMENT_TICK\": () => (/* binding */ ACHIEVEMENT_TICK),\n/* harmony export */ \"ACTIVE_QUEST_MULTIPLIER\": () => (/* binding */ ACTIVE_QUEST_MULTIPLIER),\n/* harmony export */ \"AMAZE_MULCH_GROWTH_MULTIPLIER\": () => (/* binding */ AMAZE_MULCH_GROWTH_MULTIPLIER),\n/* harmony export */ \"AMAZE_MULCH_MUTATE_MULTIPLIER\": () => (/* binding */ AMAZE_MULCH_MUTATE_MULTIPLIER),\n/* harmony export */ \"AMAZE_MULCH_PRODUCE_MULTIPLIER\": () => (/* binding */ AMAZE_MULCH_PRODUCE_MULTIPLIER),\n/* harmony export */ \"AchievementOption\": () => (/* binding */ AchievementOption),\n/* harmony export */ \"AchievementType\": () => (/* binding */ AchievementType),\n/* harmony export */ \"AlcremieSpins\": () => (/* binding */ AlcremieSpins),\n/* harmony export */ \"AlcremieSweet\": () => (/* binding */ AlcremieSweet),\n/* harmony export */ \"AlolaDungeons\": () => (/* binding */ AlolaDungeons),\n/* harmony export */ \"AlolaGyms\": () => (/* binding */ AlolaGyms),\n/* harmony export */ \"AlolaSubRegions\": () => (/* binding */ AlolaSubRegions),\n/* harmony export */ \"BASE_DUNGEON_SIZE\": () => (/* binding */ BASE_DUNGEON_SIZE),\n/* harmony export */ \"BASE_EP_YIELD\": () => (/* binding */ BASE_EP_YIELD),\n/* harmony export */ \"BASE_WANDERER_EP_MODIFIER\": () => (/* binding */ BASE_WANDERER_EP_MODIFIER),\n/* harmony export */ \"BATTLE_FRONTIER_TICK\": () => (/* binding */ BATTLE_FRONTIER_TICK),\n/* harmony export */ \"BATTLE_TICK\": () => (/* binding */ BATTLE_TICK),\n/* harmony export */ \"BOOST_MULCH_MULTIPLIER\": () => (/* binding */ BOOST_MULCH_MULTIPLIER),\n/* harmony export */ \"BREEDING_ATTACK_BONUS\": () => (/* binding */ BREEDING_ATTACK_BONUS),\n/* harmony export */ \"BREEDING_SHINY_ATTACK_MULTIPLIER\": () => (/* binding */ BREEDING_SHINY_ATTACK_MULTIPLIER),\n/* harmony export */ \"BUG_SAFARI_POKEMON\": () => (/* binding */ BUG_SAFARI_POKEMON),\n/* harmony export */ \"BUG_SAFARI_SHINY_MODIFIER\": () => (/* binding */ BUG_SAFARI_SHINY_MODIFIER),\n/* harmony export */ \"BattleBackgroundImage\": () => (/* binding */ BattleBackgroundImage),\n/* harmony export */ \"BattleBackgrounds\": () => (/* binding */ BattleBackgrounds),\n/* harmony export */ \"BattleItemType\": () => (/* binding */ BattleItemType),\n/* harmony export */ \"BattlePokemonGender\": () => (/* binding */ BattlePokemonGender),\n/* harmony export */ \"BerryColor\": () => (/* binding */ BerryColor),\n/* harmony export */ \"BerryDistribution\": () => (/* binding */ BerryDistribution),\n/* harmony export */ \"BerryTraderLocations\": () => (/* binding */ BerryTraderLocations),\n/* harmony export */ \"BulletinBoards\": () => (/* binding */ BulletinBoards),\n/* harmony export */ \"CAPTURE_POKEMONS_BASE_REWARD\": () => (/* binding */ CAPTURE_POKEMONS_BASE_REWARD),\n/* harmony export */ \"CHRISTMAS_ITEM_CHANCE\": () => (/* binding */ CHRISTMAS_ITEM_CHANCE),\n/* harmony export */ \"ConsumableType\": () => (/* binding */ ConsumableType),\n/* harmony export */ \"ContestResults\": () => (/* binding */ ContestResults),\n/* harmony export */ \"ContestStyle\": () => (/* binding */ ContestStyle),\n/* harmony export */ \"Currency\": () => (/* binding */ Currency),\n/* harmony export */ \"DAY\": () => (/* binding */ DAY),\n/* harmony export */ \"DEFEAT_POKEMONS_BASE_REWARD\": () => (/* binding */ DEFEAT_POKEMONS_BASE_REWARD),\n/* harmony export */ \"DNA_ITEM_CHANCE\": () => (/* binding */ DNA_ITEM_CHANCE),\n/* harmony export */ \"DUNGEON_BOSS_EP_MODIFIER\": () => (/* binding */ DUNGEON_BOSS_EP_MODIFIER),\n/* harmony export */ \"DUNGEON_BOSS_GEMS\": () => (/* binding */ DUNGEON_BOSS_GEMS),\n/* harmony export */ \"DUNGEON_BOSS_HELD_ITEM_MODIFIER\": () => (/* binding */ DUNGEON_BOSS_HELD_ITEM_MODIFIER),\n/* harmony export */ \"DUNGEON_CHEST_SHOW\": () => (/* binding */ DUNGEON_CHEST_SHOW),\n/* harmony export */ \"DUNGEON_EP_MODIFIER\": () => (/* binding */ DUNGEON_EP_MODIFIER),\n/* harmony export */ \"DUNGEON_GEMS\": () => (/* binding */ DUNGEON_GEMS),\n/* harmony export */ \"DUNGEON_HELD_ITEM_MODIFIER\": () => (/* binding */ DUNGEON_HELD_ITEM_MODIFIER),\n/* harmony export */ \"DUNGEON_LADDER_BONUS\": () => (/* binding */ DUNGEON_LADDER_BONUS),\n/* harmony export */ \"DUNGEON_MAP_SHOW\": () => (/* binding */ DUNGEON_MAP_SHOW),\n/* harmony export */ \"DUNGEON_TICK\": () => (/* binding */ DUNGEON_TICK),\n/* harmony export */ \"DUNGEON_TIME\": () => (/* binding */ DUNGEON_TIME),\n/* harmony export */ \"DayCycleStartHours\": () => (/* binding */ DayCycleStartHours),\n/* harmony export */ \"DayOfWeek\": () => (/* binding */ DayOfWeek),\n/* harmony export */ \"DockTowns\": () => (/* binding */ DockTowns),\n/* harmony export */ \"DungeonInteractionSource\": () => (/* binding */ DungeonInteractionSource),\n/* harmony export */ \"DungeonTileType\": () => (/* binding */ DungeonTileType),\n/* harmony export */ \"EFFECT_ENGINE_TICK\": () => (/* binding */ EFFECT_ENGINE_TICK),\n/* harmony export */ \"EGG_CYCLE_MULTIPLIER\": () => (/* binding */ EGG_CYCLE_MULTIPLIER),\n/* harmony export */ \"EP_CHALLENGE_MODIFIER\": () => (/* binding */ EP_CHALLENGE_MODIFIER),\n/* harmony export */ \"EP_EV_RATIO\": () => (/* binding */ EP_EV_RATIO),\n/* harmony export */ \"EggItemType\": () => (/* binding */ EggItemType),\n/* harmony export */ \"EnergyRestoreEffect\": () => (/* binding */ EnergyRestoreEffect),\n/* harmony export */ \"EnergyRestoreSize\": () => (/* binding */ EnergyRestoreSize),\n/* harmony export */ \"Environments\": () => (/* binding */ Environments),\n/* harmony export */ \"ExtraAchievementCategories\": () => (/* binding */ ExtraAchievementCategories),\n/* harmony export */ \"FARM_PLOT_HEIGHT\": () => (/* binding */ FARM_PLOT_HEIGHT),\n/* harmony export */ \"FARM_PLOT_WIDTH\": () => (/* binding */ FARM_PLOT_WIDTH),\n/* harmony export */ \"FLUTE_TYPE_ATTACK_MULTIPLIER\": () => (/* binding */ FLUTE_TYPE_ATTACK_MULTIPLIER),\n/* harmony export */ \"FREEZE_MULCH_MULTIPLIER\": () => (/* binding */ FREEZE_MULCH_MULTIPLIER),\n/* harmony export */ \"FRIEND_SAFARI_POKEMON\": () => (/* binding */ FRIEND_SAFARI_POKEMON),\n/* harmony export */ \"FinalSubRegions\": () => (/* binding */ FinalSubRegions),\n/* harmony export */ \"FluteItemType\": () => (/* binding */ FluteItemType),\n/* harmony export */ \"FossilPieceType\": () => (/* binding */ FossilPieceType),\n/* harmony export */ \"FossilToPokemon\": () => (/* binding */ FossilToPokemon),\n/* harmony export */ \"GAIN_FARM_POINTS_BASE_REWARD\": () => (/* binding */ GAIN_FARM_POINTS_BASE_REWARD),\n/* harmony export */ \"GAIN_MONEY_BASE_REWARD\": () => (/* binding */ GAIN_MONEY_BASE_REWARD),\n/* harmony export */ \"GAIN_TOKENS_BASE_REWARD\": () => (/* binding */ GAIN_TOKENS_BASE_REWARD),\n/* harmony export */ \"GEM_UPGRADE_COST\": () => (/* binding */ GEM_UPGRADE_COST),\n/* harmony export */ \"GEM_UPGRADE_STEP\": () => (/* binding */ GEM_UPGRADE_STEP),\n/* harmony export */ \"GOOEY_MULCH_CATCH_BONUS\": () => (/* binding */ GOOEY_MULCH_CATCH_BONUS),\n/* harmony export */ \"GRISEOUS_ITEM_CHANCE\": () => (/* binding */ GRISEOUS_ITEM_CHANCE),\n/* harmony export */ \"GYM_COUNTDOWN\": () => (/* binding */ GYM_COUNTDOWN),\n/* harmony export */ \"GYM_GEMS\": () => (/* binding */ GYM_GEMS),\n/* harmony export */ \"GYM_TICK\": () => (/* binding */ GYM_TICK),\n/* harmony export */ \"GYM_TIME\": () => (/* binding */ GYM_TIME),\n/* harmony export */ \"GalarDungeons\": () => (/* binding */ GalarDungeons),\n/* harmony export */ \"GalarGyms\": () => (/* binding */ GalarGyms),\n/* harmony export */ \"GalarSubRegions\": () => (/* binding */ GalarSubRegions),\n/* harmony export */ \"GameState\": () => (/* binding */ GameState),\n/* harmony export */ \"GemShops\": () => (/* binding */ GemShops),\n/* harmony export */ \"Genders\": () => (/* binding */ Genders),\n/* harmony export */ \"GymAutoRepeatRewardTiers\": () => (/* binding */ GymAutoRepeatRewardTiers),\n/* harmony export */ \"HATCH_EGGS_BASE_REWARD\": () => (/* binding */ HATCH_EGGS_BASE_REWARD),\n/* harmony export */ \"HELD_CANDY_ITEM_CHANCE\": () => (/* binding */ HELD_CANDY_ITEM_CHANCE),\n/* harmony export */ \"HELD_ITEM_CHANCE\": () => (/* binding */ HELD_ITEM_CHANCE),\n/* harmony export */ \"HELD_MAGIKARP_BISCUIT\": () => (/* binding */ HELD_MAGIKARP_BISCUIT),\n/* harmony export */ \"HELD_UNDERGROUND_ITEM_CHANCE\": () => (/* binding */ HELD_UNDERGROUND_ITEM_CHANCE),\n/* harmony export */ \"HOUR\": () => (/* binding */ HOUR),\n/* harmony export */ \"HisuiDungeons\": () => (/* binding */ HisuiDungeons),\n/* harmony export */ \"HisuiGyms\": () => (/* binding */ HisuiGyms),\n/* harmony export */ \"HisuiSubRegions\": () => (/* binding */ HisuiSubRegions),\n/* harmony export */ \"HoennDungeons\": () => (/* binding */ HoennDungeons),\n/* harmony export */ \"HoennGyms\": () => (/* binding */ HoennGyms),\n/* harmony export */ \"HoennSubRegions\": () => (/* binding */ HoennSubRegions),\n/* harmony export */ \"ITEM_PRICE_DEDUCT\": () => (/* binding */ ITEM_PRICE_DEDUCT),\n/* harmony export */ \"ITEM_PRICE_MULTIPLIER\": () => (/* binding */ ITEM_PRICE_MULTIPLIER),\n/* harmony export */ \"ITEM_USE_TIME\": () => (/* binding */ ITEM_USE_TIME),\n/* harmony export */ \"JohtoDungeons\": () => (/* binding */ JohtoDungeons),\n/* harmony export */ \"JohtoGyms\": () => (/* binding */ JohtoGyms),\n/* harmony export */ \"JohtoSubRegions\": () => (/* binding */ JohtoSubRegions),\n/* harmony export */ \"KalosDungeons\": () => (/* binding */ KalosDungeons),\n/* harmony export */ \"KalosGyms\": () => (/* binding */ KalosGyms),\n/* harmony export */ \"KalosSubRegions\": () => (/* binding */ KalosSubRegions),\n/* harmony export */ \"KantoDungeons\": () => (/* binding */ KantoDungeons),\n/* harmony export */ \"KantoGyms\": () => (/* binding */ KantoGyms),\n/* harmony export */ \"KantoSubRegions\": () => (/* binding */ KantoSubRegions),\n/* harmony export */ \"LIGHT_ITEM_CHANCE\": () => (/* binding */ LIGHT_ITEM_CHANCE),\n/* harmony export */ \"LuxuryBallCurrencyRate\": () => (/* binding */ LuxuryBallCurrencyRate),\n/* harmony export */ \"MANE_ITEM_CHANCE\": () => (/* binding */ MANE_ITEM_CHANCE),\n/* harmony export */ \"MAX_AVAILABLE_REGION\": () => (/* binding */ MAX_AVAILABLE_REGION),\n/* harmony export */ \"MAX_DUNGEON_SIZE\": () => (/* binding */ MAX_DUNGEON_SIZE),\n/* harmony export */ \"MAX_EGG_CYCLES\": () => (/* binding */ MAX_EGG_CYCLES),\n/* harmony export */ \"MAX_GEM_UPGRADES\": () => (/* binding */ MAX_GEM_UPGRADES),\n/* harmony export */ \"MAX_LOAD_TIME\": () => (/* binding */ MAX_LOAD_TIME),\n/* harmony export */ \"MEGA_REQUIRED_ATTACK_MULTIPLIER\": () => (/* binding */ MEGA_REQUIRED_ATTACK_MULTIPLIER),\n/* harmony export */ \"MINE_ITEMS_BASE_REWARD\": () => (/* binding */ MINE_ITEMS_BASE_REWARD),\n/* harmony export */ \"MINE_LAYERS_BASE_REWARD\": () => (/* binding */ MINE_LAYERS_BASE_REWARD),\n/* harmony export */ \"MINUTE\": () => (/* binding */ MINUTE),\n/* harmony export */ \"MIN_DUNGEON_SIZE\": () => (/* binding */ MIN_DUNGEON_SIZE),\n/* harmony export */ \"MIN_LOAD_TIME\": () => (/* binding */ MIN_LOAD_TIME),\n/* harmony export */ \"MULCH_USE_TIME\": () => (/* binding */ MULCH_USE_TIME),\n/* harmony export */ \"MUTATION_TICK\": () => (/* binding */ MUTATION_TICK),\n/* harmony export */ \"MagikarpJumpGyms\": () => (/* binding */ MagikarpJumpGyms),\n/* harmony export */ \"MaxIDPerRegion\": () => (/* binding */ MaxIDPerRegion),\n/* harmony export */ \"MegaStoneType\": () => (/* binding */ MegaStoneType),\n/* harmony export */ \"ModalCollapseList\": () => (/* binding */ ModalCollapseList),\n/* harmony export */ \"MoonCycleValues\": () => (/* binding */ MoonCycleValues),\n/* harmony export */ \"MoonEvoPokemon\": () => (/* binding */ MoonEvoPokemon),\n/* harmony export */ \"OrangeGyms\": () => (/* binding */ OrangeGyms),\n/* harmony export */ \"OrreGyms\": () => (/* binding */ OrreGyms),\n/* harmony export */ \"PLATE_VALUE\": () => (/* binding */ PLATE_VALUE),\n/* harmony export */ \"PaldeaDungeons\": () => (/* binding */ PaldeaDungeons),\n/* harmony export */ \"PaldeaGyms\": () => (/* binding */ PaldeaGyms),\n/* harmony export */ \"PaldeaSubRegions\": () => (/* binding */ PaldeaSubRegions),\n/* harmony export */ \"PokeBlockColor\": () => (/* binding */ PokeBlockColor),\n/* harmony export */ \"Pokeball\": () => (/* binding */ Pokeball),\n/* harmony export */ \"PokemonItemType\": () => (/* binding */ PokemonItemType),\n/* harmony export */ \"PokemonStatisticsType\": () => (/* binding */ PokemonStatisticsType),\n/* harmony export */ \"PokemonToFossil\": () => (/* binding */ PokemonToFossil),\n/* harmony export */ \"Pokerus\": () => (/* binding */ Pokerus),\n/* harmony export */ \"QUESTS_PER_SET\": () => (/* binding */ QUESTS_PER_SET),\n/* harmony export */ \"QUEST_CLICKS_PER_SECOND\": () => (/* binding */ QUEST_CLICKS_PER_SECOND),\n/* harmony export */ \"REPEATBALL_EP_MODIFIER\": () => (/* binding */ REPEATBALL_EP_MODIFIER),\n/* harmony export */ \"RICH_MULCH_MULTIPLIER\": () => (/* binding */ RICH_MULCH_MULTIPLIER),\n/* harmony export */ \"ROAMER_EP_MODIFIER\": () => (/* binding */ ROAMER_EP_MODIFIER),\n/* harmony export */ \"ROAMING_INCREASED_CHANCE\": () => (/* binding */ ROAMING_INCREASED_CHANCE),\n/* harmony export */ \"ROAMING_MAX_CHANCE\": () => (/* binding */ ROAMING_MAX_CHANCE),\n/* harmony export */ \"ROAMING_MIN_CHANCE\": () => (/* binding */ ROAMING_MIN_CHANCE),\n/* harmony export */ \"ROUTE_HELD_ITEM_MODIFIER\": () => (/* binding */ ROUTE_HELD_ITEM_MODIFIER),\n/* harmony export */ \"ROUTE_KILLS_NEEDED\": () => (/* binding */ ROUTE_KILLS_NEEDED),\n/* harmony export */ \"RUST_ITEM_CHANCE\": () => (/* binding */ RUST_ITEM_CHANCE),\n/* harmony export */ \"Region\": () => (/* binding */ Region),\n/* harmony export */ \"RegionDungeons\": () => (/* binding */ RegionDungeons),\n/* harmony export */ \"RegionGyms\": () => (/* binding */ RegionGyms),\n/* harmony export */ \"RegionalStarters\": () => (/* binding */ RegionalStarters),\n/* harmony export */ \"SAFARI_BASE_POKEBALL_COUNT\": () => (/* binding */ SAFARI_BASE_POKEBALL_COUNT),\n/* harmony export */ \"SAFARI_BATTLE_CHANCE\": () => (/* binding */ SAFARI_BATTLE_CHANCE),\n/* harmony export */ \"SAFARI_EP_YIELD\": () => (/* binding */ SAFARI_EP_YIELD),\n/* harmony export */ \"SAFARI_LEGAL_WALK_BLOCKS\": () => (/* binding */ SAFARI_LEGAL_WALK_BLOCKS),\n/* harmony export */ \"SAFARI_MJ_BATTLE_CHANCE\": () => (/* binding */ SAFARI_MJ_BATTLE_CHANCE),\n/* harmony export */ \"SAFARI_OUT_OF_BALLS\": () => (/* binding */ SAFARI_OUT_OF_BALLS),\n/* harmony export */ \"SAFARI_WATER_BLOCKS\": () => (/* binding */ SAFARI_WATER_BLOCKS),\n/* harmony export */ \"SAVE_TICK\": () => (/* binding */ SAVE_TICK),\n/* harmony export */ \"SECOND\": () => (/* binding */ SECOND),\n/* harmony export */ \"SHADOW_BASE_REWARD\": () => (/* binding */ SHADOW_BASE_REWARD),\n/* harmony export */ \"SHADOW_EP_MODIFIER\": () => (/* binding */ SHADOW_EP_MODIFIER),\n/* harmony export */ \"SHADOW_ITEM_CHANCE\": () => (/* binding */ SHADOW_ITEM_CHANCE),\n/* harmony export */ \"SHINY_BASE_REWARD\": () => (/* binding */ SHINY_BASE_REWARD),\n/* harmony export */ \"SHINY_CHANCE_BATTLE\": () => (/* binding */ SHINY_CHANCE_BATTLE),\n/* harmony export */ \"SHINY_CHANCE_BATTLEFRONTIER\": () => (/* binding */ SHINY_CHANCE_BATTLEFRONTIER),\n/* harmony export */ \"SHINY_CHANCE_BREEDING\": () => (/* binding */ SHINY_CHANCE_BREEDING),\n/* harmony export */ \"SHINY_CHANCE_DUNGEON\": () => (/* binding */ SHINY_CHANCE_DUNGEON),\n/* harmony export */ \"SHINY_CHANCE_FARM\": () => (/* binding */ SHINY_CHANCE_FARM),\n/* harmony export */ \"SHINY_CHANCE_REWARD\": () => (/* binding */ SHINY_CHANCE_REWARD),\n/* harmony export */ \"SHINY_CHANCE_SAFARI\": () => (/* binding */ SHINY_CHANCE_SAFARI),\n/* harmony export */ \"SHINY_CHANCE_SHOP\": () => (/* binding */ SHINY_CHANCE_SHOP),\n/* harmony export */ \"SHINY_CHANCE_STONE\": () => (/* binding */ SHINY_CHANCE_STONE),\n/* harmony export */ \"SHINY_EP_MODIFIER\": () => (/* binding */ SHINY_EP_MODIFIER),\n/* harmony export */ \"SHOPMON_EP_YIELD\": () => (/* binding */ SHOPMON_EP_YIELD),\n/* harmony export */ \"SPECIAL_EVENT_TICK\": () => (/* binding */ SPECIAL_EVENT_TICK),\n/* harmony export */ \"STONE_EP_YIELD\": () => (/* binding */ STONE_EP_YIELD),\n/* harmony export */ \"SURPRISE_MULCH_MULTIPLIER\": () => (/* binding */ SURPRISE_MULCH_MULTIPLIER),\n/* harmony export */ \"SafariTile\": () => (/* binding */ SafariTile),\n/* harmony export */ \"ShadowStatus\": () => (/* binding */ ShadowStatus),\n/* harmony export */ \"ShardTraderLocations\": () => (/* binding */ ShardTraderLocations),\n/* harmony export */ \"SinnohDungeons\": () => (/* binding */ SinnohDungeons),\n/* harmony export */ \"SinnohGyms\": () => (/* binding */ SinnohGyms),\n/* harmony export */ \"SinnohSubRegions\": () => (/* binding */ SinnohSubRegions),\n/* harmony export */ \"Starter\": () => (/* binding */ Starter),\n/* harmony export */ \"StartingRoutes\": () => (/* binding */ StartingRoutes),\n/* harmony export */ \"StartingTowns\": () => (/* binding */ StartingTowns),\n/* harmony export */ \"StoneType\": () => (/* binding */ StoneType),\n/* harmony export */ \"TEMP_BATTLE_TICK\": () => (/* binding */ TEMP_BATTLE_TICK),\n/* harmony export */ \"TEMP_BATTLE_TIME\": () => (/* binding */ TEMP_BATTLE_TIME),\n/* harmony export */ \"TICK_TIME\": () => (/* binding */ TICK_TIME),\n/* harmony export */ \"TemporaryBattles\": () => (/* binding */ TemporaryBattles),\n/* harmony export */ \"TypeColor\": () => (/* binding */ TypeColor),\n/* harmony export */ \"TypeEffectiveness\": () => (/* binding */ TypeEffectiveness),\n/* harmony export */ \"TypeEffectivenessValue\": () => (/* binding */ TypeEffectivenessValue),\n/* harmony export */ \"UNDERGROUND_TICK\": () => (/* binding */ UNDERGROUND_TICK),\n/* harmony export */ \"USE_OAK_ITEM_BASE_REWARD\": () => (/* binding */ USE_OAK_ITEM_BASE_REWARD),\n/* harmony export */ \"UltraBeastType\": () => (/* binding */ UltraBeastType),\n/* harmony export */ \"UnovaDungeons\": () => (/* binding */ UnovaDungeons),\n/* harmony export */ \"UnovaGyms\": () => (/* binding */ UnovaGyms),\n/* harmony export */ \"UnovaSubRegions\": () => (/* binding */ UnovaSubRegions),\n/* harmony export */ \"VitaminType\": () => (/* binding */ VitaminType),\n/* harmony export */ \"WANDERER_EP_MODIFIER\": () => (/* binding */ WANDERER_EP_MODIFIER),\n/* harmony export */ \"WANDER_RATE\": () => (/* binding */ WANDER_RATE),\n/* harmony export */ \"WANDER_SHINY_FP_MODIFIER\": () => (/* binding */ WANDER_SHINY_FP_MODIFIER),\n/* harmony export */ \"WANDER_TICK\": () => (/* binding */ WANDER_TICK),\n/* harmony export */ \"WEEK\": () => (/* binding */ WEEK),\n/* harmony export */ \"ZMOVE_ACTIVE_MULTIPLIER\": () => (/* binding */ ZMOVE_ACTIVE_MULTIPLIER),\n/* harmony export */ \"ZMOVE_ACTIVE_TIME\": () => (/* binding */ ZMOVE_ACTIVE_TIME),\n/* harmony export */ \"ZMOVE_COUNTERACTIVE_MULTIPLIER\": () => (/* binding */ ZMOVE_COUNTERACTIVE_MULTIPLIER),\n/* harmony export */ \"ZMOVE_COUNTERACTIVE_TIME\": () => (/* binding */ ZMOVE_COUNTERACTIVE_TIME),\n/* harmony export */ \"ZMOVE_TICK\": () => (/* binding */ ZMOVE_TICK),\n/* harmony export */ \"ZMoveStatus\": () => (/* binding */ ZMoveStatus),\n/* harmony export */ \"camelCaseToString\": () => (/* binding */ camelCaseToString),\n/* harmony export */ \"cleanHTMLString\": () => (/* binding */ cleanHTMLString),\n/* harmony export */ \"clipNumber\": () => (/* binding */ clipNumber),\n/* harmony export */ \"expRandomElement\": () => (/* binding */ expRandomElement),\n/* harmony export */ \"formatDate\": () => (/* binding */ formatDate),\n/* harmony export */ \"formatNumber\": () => (/* binding */ formatNumber),\n/* harmony export */ \"formatSecondsToTime\": () => (/* binding */ formatSecondsToTime),\n/* harmony export */ \"formatTime\": () => (/* binding */ formatTime),\n/* harmony export */ \"formatTimeFullLetters\": () => (/* binding */ formatTimeFullLetters),\n/* harmony export */ \"formatTimeShortWords\": () => (/* binding */ formatTimeShortWords),\n/* harmony export */ \"getDungeonIndex\": () => (/* binding */ getDungeonIndex),\n/* harmony export */ \"getDungeonRegion\": () => (/* binding */ getDungeonRegion),\n/* harmony export */ \"getGymIndex\": () => (/* binding */ getGymIndex),\n/* harmony export */ \"getGymRegion\": () => (/* binding */ getGymRegion),\n/* harmony export */ \"getTemporaryBattlesIndex\": () => (/* binding */ getTemporaryBattlesIndex),\n/* harmony export */ \"humanifyString\": () => (/* binding */ humanifyString),\n/* harmony export */ \"pluralizeString\": () => (/* binding */ pluralizeString),\n/* harmony export */ \"zCrystalItemType\": () => (/* binding */ zCrystalItemType)\n/* harmony export */ });\n/* harmony import */ var _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dayCycle/DayCyclePart */ \"./src/modules/dayCycle/DayCyclePart.ts\");\n/* harmony import */ var _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./moonCycle/MoonCyclePhase */ \"./src/modules/moonCycle/MoonCyclePhase.ts\");\n\n\nconst SECOND = 1000;\nconst MINUTE = SECOND * 60;\nconst HOUR = MINUTE * 60;\nconst DAY = HOUR * 24;\nconst WEEK = DAY * 7;\n// Ticks\nconst TICK_TIME = 0.1 * SECOND;\nconst BATTLE_TICK = 1 * SECOND;\nconst BATTLE_FRONTIER_TICK = 0.5 * SECOND;\nconst UNDERGROUND_TICK = 1 * SECOND;\nconst DUNGEON_TIME = 60 * SECOND;\nconst DUNGEON_TICK = 0.1 * SECOND;\nconst DUNGEON_LADDER_BONUS = 10 * SECOND;\nconst EFFECT_ENGINE_TICK = 1 * SECOND;\nconst SAVE_TICK = 10 * SECOND;\nconst GYM_TIME = 30 * SECOND;\nconst GYM_COUNTDOWN = 1 * SECOND;\nconst GYM_TICK = 0.1 * SECOND;\nconst ACHIEVEMENT_TICK = 1 * SECOND;\nconst MIN_LOAD_TIME = 0.5 * SECOND;\nconst MAX_LOAD_TIME = 20 * SECOND;\nconst MUTATION_TICK = 1 * SECOND;\nconst WANDER_TICK = 1.5 * SECOND;\nconst TEMP_BATTLE_TIME = 60 * SECOND;\nconst TEMP_BATTLE_TICK = 0.1 * SECOND;\nconst SPECIAL_EVENT_TICK = 1 * SECOND;\nconst ZMOVE_TICK = 1 * SECOND;\n// Update the requirement for \"Final Region Town\" in TownList, when adding new regions.\n// Else the professor NPC won't work.\nvar Region;\n(function (Region) {\n Region[Region[\"none\"] = -1] = \"none\";\n Region[Region[\"kanto\"] = 0] = \"kanto\";\n Region[Region[\"johto\"] = 1] = \"johto\";\n Region[Region[\"hoenn\"] = 2] = \"hoenn\";\n Region[Region[\"sinnoh\"] = 3] = \"sinnoh\";\n Region[Region[\"unova\"] = 4] = \"unova\";\n Region[Region[\"kalos\"] = 5] = \"kalos\";\n Region[Region[\"alola\"] = 6] = \"alola\";\n Region[Region[\"galar\"] = 7] = \"galar\";\n Region[Region[\"hisui\"] = 8] = \"hisui\";\n Region[Region[\"paldea\"] = 9] = \"paldea\";\n // Throws an error if no region after the final region\n Region[Region[\"final\"] = 10] = \"final\";\n})(Region || (Region = {}));\nconst MAX_AVAILABLE_REGION = Region.galar;\nconst MaxIDPerRegion = [\n 151,\n 251,\n 386,\n 493,\n 649,\n 721,\n 809,\n 898,\n 905,\n 1025, // 120 - Paldea\n];\n// Subregions\nvar KantoSubRegions;\n(function (KantoSubRegions) {\n KantoSubRegions[KantoSubRegions[\"Kanto\"] = 0] = \"Kanto\";\n KantoSubRegions[KantoSubRegions[\"Sevii123\"] = 1] = \"Sevii123\";\n KantoSubRegions[KantoSubRegions[\"Sevii4567\"] = 2] = \"Sevii4567\";\n})(KantoSubRegions || (KantoSubRegions = {}));\nvar JohtoSubRegions;\n(function (JohtoSubRegions) {\n JohtoSubRegions[JohtoSubRegions[\"Johto\"] = 0] = \"Johto\";\n})(JohtoSubRegions || (JohtoSubRegions = {}));\nvar HoennSubRegions;\n(function (HoennSubRegions) {\n HoennSubRegions[HoennSubRegions[\"Hoenn\"] = 0] = \"Hoenn\";\n HoennSubRegions[HoennSubRegions[\"Orre\"] = 1] = \"Orre\";\n})(HoennSubRegions || (HoennSubRegions = {}));\nvar SinnohSubRegions;\n(function (SinnohSubRegions) {\n SinnohSubRegions[SinnohSubRegions[\"Sinnoh\"] = 0] = \"Sinnoh\";\n})(SinnohSubRegions || (SinnohSubRegions = {}));\nvar UnovaSubRegions;\n(function (UnovaSubRegions) {\n UnovaSubRegions[UnovaSubRegions[\"Unova\"] = 0] = \"Unova\";\n})(UnovaSubRegions || (UnovaSubRegions = {}));\nvar KalosSubRegions;\n(function (KalosSubRegions) {\n KalosSubRegions[KalosSubRegions[\"Kalos\"] = 0] = \"Kalos\";\n})(KalosSubRegions || (KalosSubRegions = {}));\nvar AlolaSubRegions;\n(function (AlolaSubRegions) {\n AlolaSubRegions[AlolaSubRegions[\"MelemeleIsland\"] = 0] = \"MelemeleIsland\";\n AlolaSubRegions[AlolaSubRegions[\"AkalaIsland\"] = 1] = \"AkalaIsland\";\n AlolaSubRegions[AlolaSubRegions[\"UlaulaIsland\"] = 2] = \"UlaulaIsland\";\n AlolaSubRegions[AlolaSubRegions[\"PoniIsland\"] = 3] = \"PoniIsland\";\n AlolaSubRegions[AlolaSubRegions[\"MagikarpJump\"] = 4] = \"MagikarpJump\";\n})(AlolaSubRegions || (AlolaSubRegions = {}));\nvar GalarSubRegions;\n(function (GalarSubRegions) {\n GalarSubRegions[GalarSubRegions[\"SouthGalar\"] = 0] = \"SouthGalar\";\n GalarSubRegions[GalarSubRegions[\"NorthGalar\"] = 1] = \"NorthGalar\";\n GalarSubRegions[GalarSubRegions[\"IsleofArmor\"] = 2] = \"IsleofArmor\";\n GalarSubRegions[GalarSubRegions[\"CrownTundra\"] = 3] = \"CrownTundra\";\n})(GalarSubRegions || (GalarSubRegions = {}));\nvar HisuiSubRegions;\n(function (HisuiSubRegions) {\n HisuiSubRegions[HisuiSubRegions[\"Hisui\"] = 0] = \"Hisui\";\n})(HisuiSubRegions || (HisuiSubRegions = {}));\nvar PaldeaSubRegions;\n(function (PaldeaSubRegions) {\n PaldeaSubRegions[PaldeaSubRegions[\"Paldea\"] = 0] = \"Paldea\";\n PaldeaSubRegions[PaldeaSubRegions[\"Kitakami\"] = 1] = \"Kitakami\";\n PaldeaSubRegions[PaldeaSubRegions[\"BlueberryAcademy\"] = 2] = \"BlueberryAcademy\";\n})(PaldeaSubRegions || (PaldeaSubRegions = {}));\nvar FinalSubRegions;\n(function (FinalSubRegions) {\n FinalSubRegions[FinalSubRegions[\"Final\"] = 0] = \"Final\";\n})(FinalSubRegions || (FinalSubRegions = {}));\n// Battle Items\nconst ITEM_USE_TIME = 30;\nconst FLUTE_TYPE_ATTACK_MULTIPLIER = 1.005;\nconst ROAMING_MIN_CHANCE = 8192;\nconst ROAMING_MAX_CHANCE = 4096;\nconst ROAMING_INCREASED_CHANCE = 3;\n// Shinies\nconst SHINY_CHANCE_BATTLE = 8192;\nconst SHINY_CHANCE_DUNGEON = 4096;\nconst SHINY_CHANCE_STONE = 2048;\nconst SHINY_CHANCE_SAFARI = 1024;\nconst SHINY_CHANCE_SHOP = 1024;\nconst SHINY_CHANCE_BATTLEFRONTIER = 1024;\nconst SHINY_CHANCE_BREEDING = 1024;\nconst SHINY_CHANCE_FARM = 1024;\nconst SHINY_CHANCE_REWARD = 1024;\nconst ITEM_PRICE_MULTIPLIER = 1.00045;\nconst ITEM_PRICE_DEDUCT = 1.0005;\nconst PLATE_VALUE = 100;\n// Breeding\nconst EGG_CYCLE_MULTIPLIER = 40;\nconst MAX_EGG_CYCLES = 120;\nconst BREEDING_ATTACK_BONUS = 25;\nconst BREEDING_SHINY_ATTACK_MULTIPLIER = 5;\n// Farming\nconst FARM_PLOT_WIDTH = 5;\nconst FARM_PLOT_HEIGHT = 5;\nconst BerryDistribution = [0.39, 0.63, 0.78, 0.87, 0.93, 0.96, 0.98, 1];\nconst MULCH_USE_TIME = 300;\nconst BOOST_MULCH_MULTIPLIER = 1.5;\nconst RICH_MULCH_MULTIPLIER = 2;\nconst SURPRISE_MULCH_MULTIPLIER = 1.5;\nconst AMAZE_MULCH_GROWTH_MULTIPLIER = 1.25;\nconst AMAZE_MULCH_PRODUCE_MULTIPLIER = 1.5;\nconst AMAZE_MULCH_MUTATE_MULTIPLIER = 1.25;\nconst FREEZE_MULCH_MULTIPLIER = 0;\nconst GOOEY_MULCH_CATCH_BONUS = 10;\nconst WANDER_RATE = 0.0005;\nconst WANDER_SHINY_FP_MODIFIER = 5;\nconst BerryColor = [\n '#EE8130',\n '#A33EA1',\n '#D685AD',\n '#7AC74C',\n '#F7D02C',\n '#6390F0',\n '#B1CBDC',\n '#FFE48E',\n '#B7B7CE',\n '#1C1C1C', // Locked\n];\n// Dungeons\nconst BASE_DUNGEON_SIZE = 5;\nconst MIN_DUNGEON_SIZE = 5;\nconst MAX_DUNGEON_SIZE = 10;\nconst DUNGEON_CHEST_SHOW = 2;\nconst DUNGEON_MAP_SHOW = 4;\nvar DungeonTileType;\n(function (DungeonTileType) {\n DungeonTileType[DungeonTileType[\"empty\"] = 0] = \"empty\";\n DungeonTileType[DungeonTileType[\"entrance\"] = 1] = \"entrance\";\n DungeonTileType[DungeonTileType[\"enemy\"] = 2] = \"enemy\";\n DungeonTileType[DungeonTileType[\"chest\"] = 3] = \"chest\";\n DungeonTileType[DungeonTileType[\"boss\"] = 4] = \"boss\";\n DungeonTileType[DungeonTileType[\"ladder\"] = 5] = \"ladder\";\n})(DungeonTileType || (DungeonTileType = {}));\n// Achievements\nvar AchievementOption;\n(function (AchievementOption) {\n AchievementOption[AchievementOption[\"less\"] = 0] = \"less\";\n AchievementOption[AchievementOption[\"equal\"] = 1] = \"equal\";\n AchievementOption[AchievementOption[\"more\"] = 2] = \"more\";\n})(AchievementOption || (AchievementOption = {}));\nvar AchievementType;\n(function (AchievementType) {\n AchievementType[AchievementType[\"None\"] = -1] = \"None\";\n AchievementType[AchievementType[\"Pokedollars\"] = 0] = \"Pokedollars\";\n AchievementType[AchievementType[\"Dungeon Token\"] = 1] = \"Dungeon Token\";\n AchievementType[AchievementType[\"Caught Pokemon\"] = 2] = \"Caught Pokemon\";\n AchievementType[AchievementType[\"Shiny Pokemon\"] = 3] = \"Shiny Pokemon\";\n AchievementType[AchievementType[\"Total Captured\"] = 4] = \"Total Captured\";\n AchievementType[AchievementType[\"Total Defeated\"] = 5] = \"Total Defeated\";\n AchievementType[AchievementType[\"Attack\"] = 6] = \"Attack\";\n AchievementType[AchievementType[\"Poke Balls\"] = 7] = \"Poke Balls\";\n AchievementType[AchievementType[\"Route Defeats\"] = 8] = \"Route Defeats\";\n AchievementType[AchievementType[\"Clear Gym\"] = 9] = \"Clear Gym\";\n AchievementType[AchievementType[\"Clear Dungeon\"] = 10] = \"Clear Dungeon\";\n AchievementType[AchievementType[\"Quest\"] = 11] = \"Quest\";\n AchievementType[AchievementType[\"Max Level Oak Item\"] = 12] = \"Max Level Oak Item\";\n AchievementType[AchievementType[\"Hatchery\"] = 13] = \"Hatchery\";\n AchievementType[AchievementType[\"Farming\"] = 14] = \"Farming\";\n AchievementType[AchievementType[\"Underground\"] = 15] = \"Underground\";\n AchievementType[AchievementType[\"Safari\"] = 16] = \"Safari\";\n AchievementType[AchievementType[\"Battle Frontier\"] = 17] = \"Battle Frontier\";\n AchievementType[AchievementType[\"Vitamins\"] = 18] = \"Vitamins\";\n AchievementType[AchievementType[\"Pokerus\"] = 19] = \"Pokerus\";\n AchievementType[AchievementType[\"Shadow Pokemon\"] = 20] = \"Shadow Pokemon\";\n AchievementType[AchievementType[\"Mega Stone\"] = 21] = \"Mega Stone\";\n})(AchievementType || (AchievementType = {}));\n// Held item chance\nconst ROUTE_HELD_ITEM_MODIFIER = 1;\nconst DUNGEON_HELD_ITEM_MODIFIER = ROUTE_HELD_ITEM_MODIFIER * 4;\nconst DUNGEON_BOSS_HELD_ITEM_MODIFIER = DUNGEON_HELD_ITEM_MODIFIER * 1.5;\nconst HELD_ITEM_CHANCE = 512;\nconst HELD_CANDY_ITEM_CHANCE = 1024;\nconst HELD_UNDERGROUND_ITEM_CHANCE = 2048;\nconst GRISEOUS_ITEM_CHANCE = 50;\nconst DNA_ITEM_CHANCE = 45;\nconst LIGHT_ITEM_CHANCE = 75;\nconst SHADOW_ITEM_CHANCE = 8;\nconst RUST_ITEM_CHANCE = 90;\nconst MANE_ITEM_CHANCE = 10;\nconst CHRISTMAS_ITEM_CHANCE = 10;\nconst HELD_MAGIKARP_BISCUIT = 256;\n// Gems\nconst GEM_UPGRADE_COST = 500;\nconst GEM_UPGRADE_STEP = 0.1;\nconst MAX_GEM_UPGRADES = 10;\n// Gems from battle\nconst DUNGEON_GEMS = 3;\nconst DUNGEON_BOSS_GEMS = 20;\nconst GYM_GEMS = 5;\n// Safari Zone\nconst SAFARI_BATTLE_CHANCE = 5;\nconst SAFARI_MJ_BATTLE_CHANCE = SAFARI_BATTLE_CHANCE * 2;\nconst SAFARI_BASE_POKEBALL_COUNT = 30;\nvar SafariTile;\n(function (SafariTile) {\n SafariTile[SafariTile[\"ground\"] = 0] = \"ground\";\n SafariTile[SafariTile[\"waterUL\"] = 1] = \"waterUL\";\n SafariTile[SafariTile[\"waterU\"] = 2] = \"waterU\";\n SafariTile[SafariTile[\"waterUR\"] = 3] = \"waterUR\";\n SafariTile[SafariTile[\"waterL\"] = 4] = \"waterL\";\n SafariTile[SafariTile[\"waterC\"] = 5] = \"waterC\";\n SafariTile[SafariTile[\"waterR\"] = 6] = \"waterR\";\n SafariTile[SafariTile[\"waterDL\"] = 7] = \"waterDL\";\n SafariTile[SafariTile[\"waterD\"] = 8] = \"waterD\";\n SafariTile[SafariTile[\"waterDR\"] = 9] = \"waterDR\";\n SafariTile[SafariTile[\"grass\"] = 10] = \"grass\";\n SafariTile[SafariTile[\"sandUL\"] = 11] = \"sandUL\";\n SafariTile[SafariTile[\"sandU\"] = 12] = \"sandU\";\n SafariTile[SafariTile[\"sandUR\"] = 13] = \"sandUR\";\n SafariTile[SafariTile[\"sandL\"] = 14] = \"sandL\";\n SafariTile[SafariTile[\"sandC\"] = 15] = \"sandC\";\n SafariTile[SafariTile[\"sandR\"] = 16] = \"sandR\";\n SafariTile[SafariTile[\"sandDL\"] = 17] = \"sandDL\";\n SafariTile[SafariTile[\"sandD\"] = 18] = \"sandD\";\n SafariTile[SafariTile[\"sandDR\"] = 19] = \"sandDR\";\n SafariTile[SafariTile[\"sandURinverted\"] = 21] = \"sandURinverted\";\n SafariTile[SafariTile[\"sandDRinverted\"] = 22] = \"sandDRinverted\";\n SafariTile[SafariTile[\"sandDLinverted\"] = 23] = \"sandDLinverted\";\n SafariTile[SafariTile[\"sandULinverted\"] = 24] = \"sandULinverted\";\n SafariTile[SafariTile[\"fenceUL\"] = 25] = \"fenceUL\";\n SafariTile[SafariTile[\"fenceU\"] = 26] = \"fenceU\";\n SafariTile[SafariTile[\"fenceUR\"] = 27] = \"fenceUR\";\n SafariTile[SafariTile[\"fenceL\"] = 28] = \"fenceL\";\n SafariTile[SafariTile[\"fenceR\"] = 29] = \"fenceR\";\n SafariTile[SafariTile[\"fenceDL\"] = 30] = \"fenceDL\";\n SafariTile[SafariTile[\"fenceD\"] = 31] = \"fenceD\";\n SafariTile[SafariTile[\"fenceDR\"] = 32] = \"fenceDR\";\n SafariTile[SafariTile[\"fenceDRend\"] = 33] = \"fenceDRend\";\n SafariTile[SafariTile[\"fenceURend\"] = 34] = \"fenceURend\";\n SafariTile[SafariTile[\"fenceULend\"] = 35] = \"fenceULend\";\n SafariTile[SafariTile[\"fenceDLend\"] = 36] = \"fenceDLend\";\n SafariTile[SafariTile[\"treeTopL\"] = 37] = \"treeTopL\";\n SafariTile[SafariTile[\"treeTopC\"] = 38] = \"treeTopC\";\n SafariTile[SafariTile[\"treeTopR\"] = 39] = \"treeTopR\";\n SafariTile[SafariTile[\"treeLeavesL\"] = 40] = \"treeLeavesL\";\n SafariTile[SafariTile[\"treeLeavesC\"] = 41] = \"treeLeavesC\";\n SafariTile[SafariTile[\"treeLeavesR\"] = 42] = \"treeLeavesR\";\n SafariTile[SafariTile[\"treeTrunkL\"] = 43] = \"treeTrunkL\";\n SafariTile[SafariTile[\"treeTrunkC\"] = 44] = \"treeTrunkC\";\n SafariTile[SafariTile[\"treeTrunkR\"] = 45] = \"treeTrunkR\";\n SafariTile[SafariTile[\"treeRootsL\"] = 46] = \"treeRootsL\";\n SafariTile[SafariTile[\"treeRootsC\"] = 47] = \"treeRootsC\";\n SafariTile[SafariTile[\"treeRootsR\"] = 48] = \"treeRootsR\";\n SafariTile[SafariTile[\"sign\"] = 51] = \"sign\";\n SafariTile[SafariTile[\"waterULCorner\"] = 52] = \"waterULCorner\";\n SafariTile[SafariTile[\"waterDLCorner\"] = 53] = \"waterDLCorner\";\n SafariTile[SafariTile[\"waterDRCorner\"] = 54] = \"waterDRCorner\";\n SafariTile[SafariTile[\"waterURCorner\"] = 55] = \"waterURCorner\";\n})(SafariTile || (SafariTile = {}));\nconst SAFARI_LEGAL_WALK_BLOCKS = [\n SafariTile.ground,\n SafariTile.waterUL,\n SafariTile.waterU,\n SafariTile.waterUR,\n SafariTile.waterL,\n SafariTile.waterC,\n SafariTile.waterR,\n SafariTile.waterDL,\n SafariTile.waterD,\n SafariTile.waterDR,\n SafariTile.grass,\n SafariTile.sandUL,\n SafariTile.sandU,\n SafariTile.sandUR,\n SafariTile.sandL,\n SafariTile.sandC,\n SafariTile.sandR,\n SafariTile.sandDL,\n SafariTile.sandD,\n SafariTile.sandDR,\n SafariTile.sandURinverted,\n SafariTile.sandDRinverted,\n SafariTile.sandDLinverted,\n SafariTile.sandULinverted,\n SafariTile.treeTopL,\n SafariTile.treeTopC,\n SafariTile.treeTopR,\n SafariTile.waterULCorner,\n SafariTile.waterDLCorner,\n SafariTile.waterDRCorner,\n SafariTile.waterURCorner,\n];\nconst SAFARI_WATER_BLOCKS = [\n SafariTile.waterUL,\n SafariTile.waterU,\n SafariTile.waterUR,\n SafariTile.waterL,\n SafariTile.waterC,\n SafariTile.waterR,\n SafariTile.waterDL,\n SafariTile.waterD,\n SafariTile.waterDR,\n SafariTile.waterULCorner,\n SafariTile.waterDLCorner,\n SafariTile.waterDRCorner,\n SafariTile.waterURCorner,\n];\nconst SAFARI_OUT_OF_BALLS = 'Game Over!
You have run out of safari balls to use.';\nconst BUG_SAFARI_POKEMON = 10;\nconst FRIEND_SAFARI_POKEMON = 5;\nconst BUG_SAFARI_SHINY_MODIFIER = 5;\n// Quests\n// Numbers calculated by Dimava assumes ability to 1 shot on high routes and some use oak items,\n// which are now nerfed slightly until upgraded, so those numbers may need further adjusting\nconst questBase = 1; // change this to scale all quest points\n// Currency → QP reward amounts\nconst GAIN_MONEY_BASE_REWARD = questBase * 80;\nconst GAIN_TOKENS_BASE_REWARD = GAIN_MONEY_BASE_REWARD * 2.5;\nconst GAIN_FARM_POINTS_BASE_REWARD = questBase * 0.612;\nconst HATCH_EGGS_BASE_REWARD = questBase * 25;\nconst SHINY_BASE_REWARD = questBase * 3000;\nconst SHADOW_BASE_REWARD = questBase * 500;\nconst DEFEAT_POKEMONS_BASE_REWARD = questBase * 1;\n// Defeat reward divided by chance to catch (guessed)\nconst CAPTURE_POKEMONS_BASE_REWARD = DEFEAT_POKEMONS_BASE_REWARD / 0.74;\n// Average of 1/4 squares revealed = 75 energy ~ 12 minutes ~ 720 pokemons\nconst MINE_LAYERS_BASE_REWARD = questBase * 720;\nconst MINE_ITEMS_BASE_REWARD = questBase * 210;\n// not balanced at all for some oak items\nconst USE_OAK_ITEM_BASE_REWARD = DEFEAT_POKEMONS_BASE_REWARD;\nconst ACTIVE_QUEST_MULTIPLIER = 4;\n// Some active quests may be quicker if passive pokemon attack is used instead of active clicking\n// This number is used to estimate time taken in terms of clicks, for reward calculation\nconst QUEST_CLICKS_PER_SECOND = 5;\nconst QUESTS_PER_SET = 10;\n// EVs\nconst BASE_EP_YIELD = 100;\nconst STONE_EP_YIELD = 1000;\nconst SHOPMON_EP_YIELD = 1000;\nconst SAFARI_EP_YIELD = 1000;\nconst SHINY_EP_MODIFIER = 5;\nconst REPEATBALL_EP_MODIFIER = 5;\nconst DUNGEON_EP_MODIFIER = 3;\nconst DUNGEON_BOSS_EP_MODIFIER = 10;\nconst ROAMER_EP_MODIFIER = 50;\nconst SHADOW_EP_MODIFIER = 2;\nconst BASE_WANDERER_EP_MODIFIER = 2;\nconst WANDERER_EP_MODIFIER = 10;\nconst EP_EV_RATIO = 1000;\nconst EP_CHALLENGE_MODIFIER = 10;\n// Mega Evolution\nconst MEGA_REQUIRED_ATTACK_MULTIPLIER = 500;\n/**\n * idle: The game is not doing anything, the battle view isn't shown\n * paused: The battle view is shown, but there are no game ticks\n * fighting: On a route and battling a pokemon\n * gym: Battling a gym\n * dungeon: Exploring a dungeon\n * safari: Exploring the safari zone\n * town: In a town/pre-dungeon, town view is not shown\n */\nvar GameState;\n(function (GameState) {\n GameState[GameState[\"loading\"] = -1] = \"loading\";\n GameState[GameState[\"idle\"] = 0] = \"idle\";\n GameState[GameState[\"paused\"] = 1] = \"paused\";\n GameState[GameState[\"fighting\"] = 2] = \"fighting\";\n GameState[GameState[\"gym\"] = 3] = \"gym\";\n GameState[GameState[\"dungeon\"] = 4] = \"dungeon\";\n GameState[GameState[\"safari\"] = 5] = \"safari\";\n GameState[GameState[\"town\"] = 6] = \"town\";\n GameState[GameState[\"shop\"] = 7] = \"shop\";\n GameState[GameState[\"battleFrontier\"] = 8] = \"battleFrontier\";\n GameState[GameState[\"temporaryBattle\"] = 9] = \"temporaryBattle\";\n})(GameState || (GameState = {}));\nvar Pokeball;\n(function (Pokeball) {\n Pokeball[Pokeball[\"None\"] = -1] = \"None\";\n Pokeball[Pokeball[\"Pokeball\"] = 0] = \"Pokeball\";\n Pokeball[Pokeball[\"Greatball\"] = 1] = \"Greatball\";\n Pokeball[Pokeball[\"Ultraball\"] = 2] = \"Ultraball\";\n Pokeball[Pokeball[\"Masterball\"] = 3] = \"Masterball\";\n Pokeball[Pokeball[\"Fastball\"] = 4] = \"Fastball\";\n Pokeball[Pokeball[\"Quickball\"] = 5] = \"Quickball\";\n Pokeball[Pokeball[\"Timerball\"] = 6] = \"Timerball\";\n Pokeball[Pokeball[\"Duskball\"] = 7] = \"Duskball\";\n Pokeball[Pokeball[\"Luxuryball\"] = 8] = \"Luxuryball\";\n Pokeball[Pokeball[\"Diveball\"] = 9] = \"Diveball\";\n Pokeball[Pokeball[\"Lureball\"] = 10] = \"Lureball\";\n Pokeball[Pokeball[\"Nestball\"] = 11] = \"Nestball\";\n Pokeball[Pokeball[\"Repeatball\"] = 12] = \"Repeatball\";\n Pokeball[Pokeball[\"Beastball\"] = 13] = \"Beastball\";\n Pokeball[Pokeball[\"Moonball\"] = 14] = \"Moonball\";\n})(Pokeball || (Pokeball = {}));\nvar Currency;\n(function (Currency) {\n Currency[Currency[\"money\"] = 0] = \"money\";\n Currency[Currency[\"questPoint\"] = 1] = \"questPoint\";\n Currency[Currency[\"dungeonToken\"] = 2] = \"dungeonToken\";\n Currency[Currency[\"diamond\"] = 3] = \"diamond\";\n Currency[Currency[\"farmPoint\"] = 4] = \"farmPoint\";\n Currency[Currency[\"battlePoint\"] = 5] = \"battlePoint\";\n Currency[Currency[\"contestToken\"] = 6] = \"contestToken\";\n})(Currency || (Currency = {}));\nconst LuxuryBallCurrencyRate = {\n [Currency.money]: 300000,\n [Currency.questPoint]: 900,\n [Currency.dungeonToken]: 15000,\n [Currency.diamond]: 15,\n [Currency.farmPoint]: 900,\n [Currency.battlePoint]: 150,\n [Currency.contestToken]: 900,\n};\nvar TypeEffectiveness;\n(function (TypeEffectiveness) {\n TypeEffectiveness[TypeEffectiveness[\"Immune\"] = 0] = \"Immune\";\n TypeEffectiveness[TypeEffectiveness[\"NotVery\"] = 1] = \"NotVery\";\n TypeEffectiveness[TypeEffectiveness[\"Neutral\"] = 2] = \"Neutral\";\n TypeEffectiveness[TypeEffectiveness[\"Very\"] = 3] = \"Very\";\n})(TypeEffectiveness || (TypeEffectiveness = {}));\nvar TypeEffectivenessValue;\n(function (TypeEffectivenessValue) {\n TypeEffectivenessValue[TypeEffectivenessValue[\"Immune\"] = 0] = \"Immune\";\n TypeEffectivenessValue[TypeEffectivenessValue[\"NotVery\"] = 0.5] = \"NotVery\";\n TypeEffectivenessValue[TypeEffectivenessValue[\"Neutral\"] = 1] = \"Neutral\";\n TypeEffectivenessValue[TypeEffectivenessValue[\"Very\"] = 2] = \"Very\";\n})(TypeEffectivenessValue || (TypeEffectivenessValue = {}));\nfunction cleanHTMLString(str) {\n return str.replace(/([|&;$%@\"<>()+,])/g, (c) => `&#${c.charCodeAt(0)};`);\n}\nfunction humanifyString(str) {\n return str.replace(/[_-]+/g, ' ');\n}\nfunction camelCaseToString(str) {\n return str.replace(/[\\s_-]?([A-Z])/g, ' $1').replace(/\\b\\w/g, (w) => (w.replace(/\\w/, (c) => c.toUpperCase()))).trim();\n}\nfunction pluralizeString(str, amt) {\n if (amt <= 1) {\n return str;\n }\n switch (true) {\n case /s$/.test(str):\n return str;\n case /y$/.test(str):\n return str.replace(/y$/, 'ies');\n case /ch$/.test(str):\n return `${str}es`;\n default:\n return `${str}s`;\n }\n}\nfunction formatDate(date) {\n return date.toISOString().replace(/T/, ' ').replace(/.\\d+Z/, '');\n}\nfunction formatTime(input) {\n if (input === 0) {\n return 'Ready';\n }\n if (input === Infinity) {\n return '∞';\n }\n const time = parseInt(`${input}`, 10); // don't forget the second param\n const hours = `${Math.floor(time / 3600)}`.padStart(2, '0');\n const minutes = `${Math.floor((time - (hours * 3600)) / 60)}`.padStart(2, '0');\n const seconds = `${time - (hours * 3600) - (minutes * 60)}`.padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n}\nfunction formatTimeFullLetters(input) {\n // Temporarily recast to number until everything is in modules\n if (Number.isNaN(Number(input)) || input === 0) {\n return '-';\n }\n let time = Math.abs(input * 1000);\n const times = [];\n if (time >= WEEK) {\n const weeks = Math.floor(time / WEEK);\n times.push(`${weeks}w`.padStart(3, '0'));\n time %= WEEK;\n }\n if (time >= DAY || times.length) {\n const days = Math.floor(time / DAY);\n times.push(`${days}d`.padStart(3, '0'));\n time %= DAY;\n }\n if (time >= HOUR || times.length) {\n const hours = Math.floor(time / HOUR);\n times.push(`${hours}h`.padStart(3, '0'));\n time %= HOUR;\n }\n if (time >= MINUTE || times.length) {\n const minutes = Math.floor(time / MINUTE);\n times.push(`${minutes}m`.padStart(3, '0'));\n time %= MINUTE;\n }\n if (time >= SECOND || times.length) {\n const seconds = Math.floor(time / SECOND);\n times.push(`${seconds}s`.padStart(3, '0'));\n }\n return times.slice(0, 3).join(' ');\n}\nfunction formatTimeShortWords(input) {\n // Temporarily recast to number until everything is in modules\n if (Number.isNaN(Number(input)) || input === 0) {\n return 'now';\n }\n const time = Math.abs(input);\n if (time > DAY) {\n const days = Math.ceil(time / DAY);\n return `${time % DAY ? '< ' : ''}${days} day${days === 1 ? '' : 's'}`;\n }\n if (time > HOUR) {\n const hours = Math.ceil(time / HOUR);\n return `${time % HOUR ? '< ' : ''}${hours} hour${hours === 1 ? '' : 's'}`;\n }\n const minutes = Math.ceil(time / MINUTE);\n return `${time % MINUTE ? '< ' : ''}${minutes} min${minutes === 1 ? '' : 's'}`;\n}\nfunction formatSecondsToTime(input) {\n // Temporarily recast to number until everything is in modules\n if (Number.isNaN(Number(input)) || input === 0) {\n return '-';\n }\n let time = Math.abs(input * 1000);\n const times = [];\n if (time >= WEEK) {\n const weeks = Math.floor(time / WEEK);\n times.push(`${weeks} week${weeks === 1 ? '' : 's'}`);\n time %= WEEK;\n }\n if (time >= DAY) {\n const days = Math.floor(time / DAY);\n times.push(`${days} day${days === 1 ? '' : 's'}`);\n time %= DAY;\n }\n if (time >= HOUR) {\n const hours = Math.floor(time / HOUR);\n times.push(`${hours} hour${hours === 1 ? '' : 's'}`);\n time %= HOUR;\n }\n if (time >= MINUTE) {\n const minutes = Math.floor(time / MINUTE);\n times.push(`${minutes} min${minutes === 1 ? '' : 's'}`);\n time %= MINUTE;\n }\n if (time >= SECOND) {\n const seconds = Math.floor(time / SECOND);\n times.push(`${seconds} sec${seconds === 1 ? '' : 's'}`);\n }\n return times.join('
');\n}\nfunction formatNumber(input) {\n let num = Number(input); // Temporary cast until everything is in modules\n if (Number.isNaN(+num)) {\n return '0';\n }\n if (num >= 1e12) {\n num = Math.floor(num / 1e11);\n num = num < 100 ? num / 10 : Math.floor(num / 10);\n return `${num}T`;\n }\n if (num >= 1e9) {\n num = Math.floor(num / 1e8);\n num = num < 100 ? num / 10 : Math.floor(num / 10);\n return `${num}B`;\n }\n if (num >= 1e6) {\n num = Math.floor(num / 1e5);\n num = num < 100 ? num / 10 : Math.floor(num / 10);\n return `${num}M`;\n }\n if (num >= 1e3) {\n num = Math.floor(num / 1e2);\n num = num < 100 ? num / 10 : Math.floor(num / 10);\n return `${num}K`;\n }\n return num.toString();\n}\nfunction clipNumber(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\n// Return a random element from the array, with an exponential distribution\n// The last element has a 1/ratio chance of being chosen, one before last is 1/(ratio^2), etc\n// The logarithm is clipped up to 0, so the first two elements will have equal chance\nfunction expRandomElement(array, ratio) {\n const r = Math.random();\n const logr = Math.log(r) / Math.log(ratio);\n const n = Math.floor(logr + array.length);\n const x = clipNumber(n, 0, array.length - 1);\n return array[x];\n}\nconst TypeColor = [\n '#A8A77A',\n '#EE8130',\n '#6390F0',\n '#F7D02C',\n '#7AC74C',\n '#96D9D6',\n '#C22E28',\n '#A33EA1',\n '#E2BF65',\n '#A98FF3',\n '#F95587',\n '#A6B91A',\n '#B6A136',\n '#735797',\n '#6F35FC',\n '#705746',\n '#B7B7CE',\n '#D685AD', // Fairy\n];\nconst ROUTE_KILLS_NEEDED = 10;\n// Achievements\nconst ACHIEVEMENT_DEFEAT_ROUTE_VALUES = [\n 100,\n 1000,\n 10000,\n];\nconst ACHIEVEMENT_DEFEAT_GYM_VALUES = [\n 10,\n 100,\n 1000,\n];\nconst ACHIEVEMENT_DEFEAT_DUNGEON_VALUES = [\n 10,\n 100,\n 250,\n 500,\n];\nconst Environments = {\n // Evolutions\n MagneticField: {\n [Region.kanto]: new Set([]),\n [Region.johto]: new Set([]),\n [Region.hoenn]: new Set(['New Mauville']),\n [Region.sinnoh]: new Set(['Mt. Coronet', 'Mt. Coronet South', 'Mt. Coronet North', 'Spear Pillar', 'Hall of Origin']),\n [Region.unova]: new Set(['Chargestone Cave']),\n [Region.kalos]: new Set([13, 'Kalos Power Plant']),\n [Region.alola]: new Set([12, 'Vast Poni Canyon']),\n [Region.galar]: new Set([]),\n [Region.hisui]: new Set([]), // Coronet Highlands; see getCurrentEnvironments() in MapHelper.ts for adding evolution environments to Hisui\n },\n MossRock: {\n [Region.kanto]: new Set([]),\n [Region.johto]: new Set([]),\n [Region.hoenn]: new Set(['Petalburg Woods']),\n [Region.sinnoh]: new Set(['Eterna Forest']),\n [Region.unova]: new Set(['Pinwheel Forest']),\n [Region.kalos]: new Set([20, 'Pokémon Village']),\n [Region.alola]: new Set(['Lush Jungle']),\n [Region.galar]: new Set([]),\n [Region.hisui]: new Set(['Heartwood']),\n },\n IceRock: {\n [Region.kanto]: new Set([]),\n [Region.johto]: new Set([]),\n [Region.hoenn]: new Set(['Shoal Cave']),\n [Region.sinnoh]: new Set([217, 'Lake Acuity']),\n [Region.unova]: new Set(['Twist Mountain']),\n [Region.kalos]: new Set(['Frost Cavern']),\n [Region.alola]: new Set(['Mount Lanakila']),\n [Region.galar]: new Set([]),\n [Region.hisui]: new Set(['Icepeak Cavern']),\n },\n // TODO: Change Dusty Bowl from a dungeon into a route\n // DustyBowl: { // Runerigus\n // [Region.galar]: new Set([]),\n // },\n PlantCloak: {\n [Region.kanto]: new Set([]),\n [Region.johto]: new Set([]),\n [Region.hoenn]: new Set([110]),\n [Region.sinnoh]: new Set([206, 210, 212, 213, 214, 222]),\n [Region.unova]: new Set([16, 18, 'Dreamyard']),\n [Region.kalos]: new Set([18, 19]),\n [Region.alola]: new Set([3]),\n [Region.galar]: new Set([]),\n [Region.hisui]: new Set([]), // Village and Fieldlands; see getCurrentEnvironments() in MapHelper.ts for adding evolution environments to Hisui\n },\n SandyCloak: {\n [Region.kanto]: new Set([]),\n [Region.johto]: new Set([45, 47, 48]),\n [Region.hoenn]: new Set([111, 'Jagged Pass', 'Mt. Chimney Crater', 'Mt. Pyre', 'Near Space']),\n [Region.sinnoh]: new Set([205, 206, 207, 208, 210, 211, 213, 214, 222, 225, 226, 227, 228, 'Spear Pillar', 'Hall of Origin', 'Distortion World']),\n [Region.unova]: new Set([4, 13, 15, 18, 23, 25]),\n [Region.kalos]: new Set([8, 9, 13, 17, 18, 19]),\n [Region.alola]: new Set([3, 12, 22, 23, 29]),\n [Region.galar]: new Set([]),\n [Region.hisui]: new Set([]), // Mirelands and Highlands; see getCurrentEnvironments() in MapHelper.ts for adding evolution environments to Hisui\n },\n TrashCloak: {\n [Region.kanto]: new Set([17, 'Rocket Game Corner', 'Silph Co.', 'Power Plant', 'Pokémon Mansion', 'Indigo Plateau']),\n [Region.johto]: new Set(['Team Rocket\\'s Hideout', 'Indigo Plateau Johto']),\n [Region.hoenn]: new Set([110, 'New Mauville', 'Sea Mauville', 'Weather Institute', 'Aqua Hideout', 'Mt. Pyre', 'Sky Pillar', 'Mossdeep Space Center', 'Near Space']),\n [Region.sinnoh]: new Set([206, 212, 222, 'Valley Windworks', 'Old Chateau', 'Team Galactic Eterna Building', 'Team Galactic HQ']),\n [Region.unova]: new Set([5, 9, 11, 16, 'Liberty Garden', 'Castelia Sewers', 'A Totally Unsuspicious Frigate', 'Plasma Frigate', 'Giant Chasm', 'Cave of Being', 'Dreamyard', 'P2 Laboratory']),\n [Region.kalos]: new Set(['Kalos Power Plant', 'Poké Ball Factory', 'Lost Hotel', 'Team Flare Secret HQ']),\n [Region.alola]: new Set(['Trainers\\' School', 'Hokulani Observatory', 'Thrifty Megamart', 'Aether Foundation', 'Mina\\'s Houseboat']),\n [Region.galar]: new Set([]),\n [Region.hisui]: new Set([]), // Coastlands and Icelands; see getCurrentEnvironments() in MapHelper.ts for adding evolution environments to Hisui\n },\n Water: {\n [Region.kanto]: new Set([12, 13, 19, 20, 21, 24, 26, 31, 32, 33, 34, 35, 36, 'Cerulean City', 'Tanoby Ruins']),\n [Region.johto]: new Set([40, 41, 'Slowpoke Well']),\n [Region.hoenn]: new Set([105, 106, 107, 108, 109, 118, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 'Gateon Port Battles']),\n [Region.sinnoh]: new Set([218, 219, 220, 223, 230, 'Pastoria City', 'Lake Verity', 'Lake Valor', 'Lake Acuity', 'Sendoff Spring']),\n [Region.unova]: new Set([17, 18, 21, 24, 'Undella Town', 'Humilau City']),\n [Region.kalos]: new Set([8, 23, 'Couriway Town', 'Sea Spirit\\'s Den']),\n [Region.alola]: new Set([15, 19, 20, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 'Hoppy Town', 'Friend League', 'Quick League', 'Heavy League', 'Great League', 'Fast League', 'Luxury League', 'Heal League', 'Ultra League', 'Elite Four League', 'Master League', 'Magikarp\\'s Eye', 'Seafolk Village', 'Brooklet Hill', 'Mina\\'s Houseboat', 'Lake of the Sunne and Moone']),\n [Region.galar]: new Set(['Hulbury', 'Roaring-Sea Caves', 5, 6, 8, 9, 16, 21, 27, 29, 36, 37, 41, 42, 43, 44, 51, 53]),\n [Region.hisui]: new Set([]),\n },\n Cave: {\n [Region.kanto]: new Set(['Mt. Moon', 'Diglett\\'s Cave', 'Rock Tunnel', 'Seafoam Islands', 'Victory Road', 'Cerulean Cave', 'Ruby Path', 'Icefall Cave', 'Sunburst Island', 'Lost Cave', 'Altering Cave']),\n [Region.johto]: new Set(['Ruins of Alph', 'Union Cave', 'Slowpoke Well', 'Burned Tower', 'Whirl Islands', 'Mt. Mortar', 'Ice Path', 'Dark Cave', 'Tohjo Falls', 'Victory Road Johto', 'Mt. Silver']),\n [Region.hoenn]: new Set(['Rusturf Tunnel', 'Granite Cave', 'Fiery Path', 'Meteor Falls', 'Magma Hideout', 'Shoal Cave', 'Seafloor Cavern', 'Cave of Origin', 'Sealed Chamber', 'Victory Road Hoenn', 'Pyrite Cave', 'Relic Cave']),\n [Region.sinnoh]: new Set(['Oreburgh Gate', 'Wayward Cave', 'Mt. Coronet South', 'Solaceon Ruins', 'Iron Island', 'Mt. Coronet North', 'Victory Road Sinnoh', 'Snowpoint Temple', 'Stark Mountain']),\n [Region.unova]: new Set(['Relic Passage', 'Relic Castle', 'Chargestone Cave', 'Mistralton Cave', 'Reversal Mountain', 'Seaside Cave', 'Giant Chasm', 'Victory Road Unova', 'Twist Mountain']),\n [Region.kalos]: new Set(['Connecting Cave', 'Glittering Cave', 'Reflection Cave', 'Sea Spirit\\'s Den', 'Frost Cavern', 'Terminus Cave', 'Victory Road Kalos']),\n [Region.alola]: new Set(['Verdant Cavern', 'Seaward Cave', 'Ten Carat Hill', 'Diglett\\'s Tunnel', 'Vast Poni Canyon', 'Mount Lanakila', 'Resolution Cave']),\n [Region.galar]: new Set(['Galar Mine', 'Galar Mine No. 2', 'Courageous Cavern', 'Brawlers\\' Cave', 'Warm-Up Tunnel', 'Roaring-Sea Caves', 'Rock Peak Ruins', 'Iron Ruins', 'Iceberg Ruins', 'Split-Decision Ruins', 'Lakeside Cave', 'Tunnel to the Top', 'Max Lair']),\n [Region.hisui]: new Set(['Oreburrow Tunnel', 'Ancient Solaceon Ruins', 'Seaside Hollow', 'Turnback Cave', 'Ancient Wayward Cave', 'Ancient Quarry', 'Primeval Grotto', 'Ice Column Chamber', 'Icepeak Cavern', 'Ancient Snowpoint Temple']),\n },\n // Hisui Areas\n JubilifeVillage: {\n [Region.hisui]: new Set(['Prelude Beach', 'Jubilife Village', 'Galaxy Hall']),\n },\n ObsidianFieldlands: {\n [Region.hisui]: new Set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'Floaro Gardens', 'Oreburrow Tunnel', 'Heartwood', 'Ancient Lake Verity', 'Fieldlands Camp', 'Heights Camp', 'Grandtree Arena']),\n },\n CrimsonMirelands: {\n [Region.hisui]: new Set([13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 'Ancient Solaceon Ruins', 'Shrouded Ruins', 'Mirelands Camp', 'Bogbound Camp', 'Sludge Mound', 'Ancient Lake Valor', 'Diamond Settlement', 'Brava Arena']),\n },\n CobaltCoastlands: {\n [Region.hisui]: new Set([23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 'Veilstone Cape', 'Firespit Island', 'Seaside Hollow', 'Turnback Cave', 'Beachside Camp', 'Coastlands Camp', 'Iscan\\'s Cabin', 'Molten Arena']),\n },\n CoronetHighlands: {\n [Region.hisui]: new Set([38, 39, 40, 41, 42, 43, 44, 45, 46, 'Ancient Wayward Cave', 'Ancient Quarry', 'Primeval Grotto', 'Clamberclaw Cliffs', 'Celestica Ruins', 'Sacred Plaza', 'Temple of Sinnoh', 'Highlands Camp', 'Mountain Camp', 'Summit Camp', 'Moonview Arena', 'Stone Portal']),\n },\n AlabasterIcelands: {\n [Region.hisui]: new Set([47, 48, 49, 50, 51, 52, 53, 54, 'Avalugg\\'s Legacy', 'Ice Column Chamber', 'Icepeak Cavern', 'Ancient Snowpoint Temple', 'Ancient Lake Acuity', 'Snowfields Camp', 'Icepeak Camp', 'Pearl Settlement', 'Icepeak Arena']),\n },\n};\nconst BattleBackgrounds = {\n Water: {\n [Region.kanto]: new Set([12, 13, 19, 20, 21, 24, 26, 31, 32, 33, 34, 35, 36, 'Cerulean City', 'Tanoby Ruins']),\n [Region.johto]: new Set([40, 41, 'Slowpoke Well']),\n [Region.hoenn]: new Set([105, 106, 107, 108, 109, 118, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 'Gateon Port Battles']),\n [Region.sinnoh]: new Set([218, 219, 220, 223, 230, 'Pastoria City', 'Lake Verity', 'Lake Valor', 'Sendoff Spring']),\n [Region.unova]: new Set([17, 18, 21, 24, 'Undella Town', 'Humilau City']),\n [Region.kalos]: new Set([8, 23, 'Couriway Town', 'Sea Spirit\\'s Den']),\n [Region.alola]: new Set([15, 19, 20, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 'Hoppy Town', 'Hoppy Town Fishing Pond', 'Friend League', 'Quick League', 'Heavy League', 'Great League', 'Fast League', 'Luxury League', 'Heal League', 'Ultra League', 'Elite Four League', 'Master League', 'Magikarp\\'s Eye', 'Seafolk Village', 'Brooklet Hill', 'Mina\\'s Houseboat', 'Lake of the Sunne and Moone']),\n [Region.galar]: new Set(['Hulbury', 'Roaring-Sea Caves', 5, 6, 8, 9, 16, 21, 27, 29, 36, 37, 41, 42, 43, 44, 51, 53]),\n },\n Ice: {\n [Region.kanto]: new Set(['Seafoam Islands', 'Icefall Cave']),\n [Region.johto]: new Set(['Mahogany Town', 'Ice Path']),\n [Region.hoenn]: new Set(['Sootopolis City', 'Shoal Cave']),\n [Region.sinnoh]: new Set([216, 217, 'Snowpoint City', 'Lake Acuity']),\n [Region.unova]: new Set(['Giant Chasm', 'Team Plasma Assault']),\n [Region.kalos]: new Set([17, 'Dendemille Town', 'Snowbelle City', 'Frost Cavern']),\n [Region.alola]: new Set(['Mount Lanakila']),\n [Region.galar]: new Set(['Circhester', 'Iceberg Ruins', 'Crown Shrine', 'Freezington', 26, 28, 31, 32, 46, 47, 54, 55]),\n },\n Fire: {\n [Region.kanto]: new Set(['Cinnabar Island', 'Mt. Ember', 'Mt. Ember Summit', 'Ruby Path']),\n [Region.johto]: new Set(),\n [Region.hoenn]: new Set(['Lavaridge Town', 'Fiery Path', 'Mt. Chimney', 'Mt. Chimney Crater', 'Magma Hideout', 'Mt. Battle']),\n [Region.sinnoh]: new Set(['Stark Mountain']),\n [Region.unova]: new Set([]),\n [Region.kalos]: new Set(),\n [Region.alola]: new Set(['Wela Volcano Park']),\n [Region.galar]: new Set(['Motostoke']),\n },\n Forest: {\n [Region.kanto]: new Set([25, 30, 'Fuchsia City', 'Viridian Forest', 'Berry Forest', 'Pattern Bush', 40, 41]),\n [Region.johto]: new Set([36, 38, 43, 'Azalea Town', 'Ilex Forest']),\n [Region.hoenn]: new Set([119, 'Petalburg Woods']),\n [Region.sinnoh]: new Set([201, 204, 'Eterna City', 'Eterna Forest', 'Fullmoon Island', 'Newmoon Island']),\n [Region.unova]: new Set([6, 'Floccesy Town', 'Lostlorn Forest', 'Pinwheel Forest', 'Pledge Grove']),\n [Region.kalos]: new Set([1, 14, 20, 'Coumarine City', 'Laverre City', 'Santalune Forest', 'Pokémon Village']),\n [Region.alola]: new Set([27, 'Melemele Woods', 'Lush Jungle', 'Malie Garden', 'Ula\\'ula Meadow', 'Poni Meadow']),\n [Region.galar]: new Set(['Slumbering Weald', 'Slumbering Weald Shrine', 'Glimwood Tangle', 'Ballonlea', 'Dyna Tree Hill', 2, 12, 13, 35]),\n },\n Cave: {\n [Region.kanto]: new Set([37, 39, 'Pewter City', 'Diglett\\'s Cave', 'Mt. Moon', 'Rock Tunnel', 'Victory Road', 'Lost Cave', 'Altering Cave']),\n [Region.johto]: new Set(['Cianwood City', 'Ruins of Alph', 'Union Cave', 'Mt. Mortar', 'Dark Cave', 'Tohjo Falls', 'Victory Road Johto']),\n [Region.hoenn]: new Set(['Rustboro City', 'Dewford Town', 'Rusturf Tunnel', 'Granite Cave', 'Meteor Falls', 'Jagged Pass', 'Seafloor Cavern', 'Victory Road Hoenn', 'Pyrite Cave', 'Relic Cave', 'The Under', 'Citadark Isle']),\n [Region.sinnoh]: new Set(['Oreburgh City', 'Oreburgh Gate', 'Wayward Cave', 'Mt. Coronet', 'Mt. Coronet South', 'Iron Island', 'Mt. Coronet North', 'Victory Road Sinnoh']),\n [Region.unova]: new Set(['Relic Castle', 'Relic Passage', 'Seaside Cave', 'Victory Road Unova', 'Twist Mountain']),\n [Region.kalos]: new Set([9, 'Connecting Cave', 'Kiloude City', 'Terminus Cave', 'Victory Road Kalos']),\n [Region.alola]: new Set([12, 22, 29, 'Verdant Cavern', 'Seaward Cave', 'Ten Carat Hill', 'Diglett\\'s Tunnel', 'Vast Poni Canyon']),\n [Region.galar]: new Set(['Warm-Up Tunnel', 'Courageous Cavern', 'Brawlers\\' Cave', 'Rock Peak Ruins', 'Split-Decision Ruins', 'Lakeside Cave', 'Tunnel to the Top', 18]),\n },\n GemCave: {\n [Region.kanto]: new Set(['Viridian City', 'Cerulean Cave', 'Sunburst Island']),\n [Region.johto]: new Set(['Blackthorn City', 'Mt. Silver', 'Whirl Islands']),\n [Region.hoenn]: new Set(['Cave of Origin', 'Sky Pillar', 'Sealed Chamber', 137, 'Deep Colosseum', 'Under Colosseum']),\n [Region.sinnoh]: new Set(['Spear Pillar', 'Hall of Origin']),\n [Region.unova]: new Set(['Chargestone Cave', 'Mistralton Cave', 'Cave of Being']),\n [Region.kalos]: new Set(['Glittering Cave', 'Reflection Cave']),\n [Region.alola]: new Set(['Altar of the Sunne and Moone', 'Resolution Cave']),\n [Region.galar]: new Set(['Galar Mine', 'Galar Mine No. 2', 'Iron Ruins']),\n },\n Desert: {\n [Region.kanto]: new Set(),\n [Region.johto]: new Set(),\n [Region.hoenn]: new Set([111, 135, 'Outskirt Stand', 'Pyrite Town', 'Pyrite Town Battles', 'Orre Colosseum']),\n [Region.sinnoh]: new Set([228]),\n [Region.unova]: new Set([4, 25, 'Lentimas Town', 'Reversal Mountain']),\n [Region.kalos]: new Set([13]),\n [Region.alola]: new Set([23]),\n [Region.galar]: new Set([23, 25, 39, 'Stow-on-Side', 'Dusty Bowl']),\n },\n PowerPlant: {\n [Region.kanto]: new Set(['Vermilion City', 'Rocket Game Corner', 'Power Plant', 'New Island']),\n [Region.johto]: new Set(['Tin Tower', 'Team Rocket\\'s Hideout', 'Radio Tower']),\n [Region.hoenn]: new Set(['Mauville City', 'New Mauville', 'Weather Institute', 'Aqua Hideout', 'Near Space', 'Pyrite Colosseum', 'Cipher Lab', 'Realgam Tower Battles', 'Realgam Colosseum', 'Cipher Key Lair']),\n [Region.sinnoh]: new Set(['Sunyshore City', 'Valley Windworks', 'Team Galactic Eterna Building', 'Team Galactic HQ']),\n [Region.unova]: new Set(['Castelia Sewers', 'Virbank City', 'Nimbasa City', 'A Totally Unsuspicious Frigate', 'Plasma Frigate']),\n [Region.kalos]: new Set(['Lumiose City', 'Kalos Power Plant', 'Poké Ball Factory', 'Team Flare Secret HQ']),\n [Region.alola]: new Set(['Aether Paradise', 'Hokulani Observatory', 'Aether Foundation']),\n [Region.galar]: new Set(['Spikemuth', 'Energy Plant', 'Armor Station', 'Crown Tundra Station']),\n },\n Mansion: {\n [Region.kanto]: new Set(['Silph Co.', 'Pokémon Mansion']),\n [Region.johto]: new Set(['Olivine City', 'Olivine Lighthouse', 'Sprout Tower', 'Burned Tower']),\n [Region.hoenn]: new Set(['Petalburg City', 'Phenac City Battles', 'Pyrite Building', 'Snagem Hideout', 'Phenac Stadium', 'Citadark Isle Dome']),\n [Region.sinnoh]: new Set(['Veilstone City', 'Canalave City', 'Snowpoint Temple']),\n [Region.unova]: new Set(['Castelia City', 'Mistralton City', 'Opelucid City', 'Liberty Garden', 'Dragonspiral Tower', 'Dreamyard']),\n [Region.kalos]: new Set(['Lost Hotel']),\n [Region.alola]: new Set(['Trainers\\' School', 'Thrifty Megamart', 'Po Town', 'Ruins of Conflict', 'Ruins of Life', 'Ruins of Abundance', 'Ruins of Hope']),\n [Region.galar]: new Set(['Rose Tower', 'Hammerlocke', 'Tower of Darkness', 'Tower of Waters', 'Professor Magnolia\\'s House', 'Wyndon', 'Wyndon Stadium', 'Master Dojo', 11]),\n },\n Graveyard: {\n [Region.kanto]: new Set(['Saffron City', 'Pokémon Tower']),\n [Region.johto]: new Set(['Ecruteak City']),\n [Region.hoenn]: new Set(['Mossdeep City', 'Mt. Pyre']),\n [Region.sinnoh]: new Set(['Hearthome City', 'Old Chateau', 'Solaceon Ruins', 'Distortion World']),\n [Region.unova]: new Set(['Celestial Tower']),\n [Region.kalos]: new Set(),\n [Region.alola]: new Set(['Hau\\'oli Cemetery', 'Memorial Hill']),\n [Region.galar]: new Set([49]),\n },\n // No need to set anything here, only exists for battle overrides\n Default: {},\n};\nconst BattleBackgroundImage = {\n Water: 'water',\n Ice: 'ice',\n Fire: 'fire',\n Forest: 'forest',\n Cave: 'cave',\n GemCave: 'cave-gem',\n Desert: 'desert',\n PowerPlant: 'power-plant',\n Mansion: 'mansion',\n Graveyard: 'graveyard',\n Default: '',\n};\n// Starter Pokémon\nvar Starter;\n(function (Starter) {\n Starter[Starter[\"None\"] = -1] = \"None\";\n Starter[Starter[\"Grass\"] = 0] = \"Grass\";\n Starter[Starter[\"Fire\"] = 1] = \"Fire\";\n Starter[Starter[\"Water\"] = 2] = \"Water\";\n Starter[Starter[\"Special\"] = 3] = \"Special\";\n})(Starter || (Starter = {}));\nconst RegionalStarters = [\n [1, 4, 7, 25],\n [152, 155, 158],\n [252, 255, 258],\n [387, 390, 393],\n [495, 498, 501],\n [650, 653, 656],\n [722, 725, 728],\n [810, 813, 816],\n [724.01, 157.01, 503.01],\n [906, 909, 912], // Paldea\n];\nvar StoneType;\n(function (StoneType) {\n StoneType[StoneType[\"None\"] = -1] = \"None\";\n StoneType[StoneType[\"Leaf_stone\"] = 0] = \"Leaf_stone\";\n StoneType[StoneType[\"Fire_stone\"] = 1] = \"Fire_stone\";\n StoneType[StoneType[\"Water_stone\"] = 2] = \"Water_stone\";\n StoneType[StoneType[\"Thunder_stone\"] = 3] = \"Thunder_stone\";\n StoneType[StoneType[\"Moon_stone\"] = 4] = \"Moon_stone\";\n StoneType[StoneType[\"Linking_cord\"] = 5] = \"Linking_cord\";\n StoneType[StoneType[\"Sun_stone\"] = 6] = \"Sun_stone\";\n StoneType[StoneType[\"Soothe_bell\"] = 7] = \"Soothe_bell\";\n StoneType[StoneType[\"Metal_coat\"] = 8] = \"Metal_coat\";\n StoneType[StoneType[\"Kings_rock\"] = 9] = \"Kings_rock\";\n StoneType[StoneType[\"Upgrade\"] = 10] = \"Upgrade\";\n StoneType[StoneType[\"Dragon_scale\"] = 11] = \"Dragon_scale\";\n StoneType[StoneType[\"Prism_scale\"] = 12] = \"Prism_scale\";\n StoneType[StoneType[\"Deepsea_tooth\"] = 13] = \"Deepsea_tooth\";\n StoneType[StoneType[\"Deepsea_scale\"] = 14] = \"Deepsea_scale\";\n StoneType[StoneType[\"Shiny_stone\"] = 15] = \"Shiny_stone\";\n StoneType[StoneType[\"Dusk_stone\"] = 16] = \"Dusk_stone\";\n StoneType[StoneType[\"Dawn_stone\"] = 17] = \"Dawn_stone\";\n StoneType[StoneType[\"Razor_claw\"] = 18] = \"Razor_claw\";\n StoneType[StoneType[\"Razor_fang\"] = 19] = \"Razor_fang\";\n StoneType[StoneType[\"Electirizer\"] = 20] = \"Electirizer\";\n StoneType[StoneType[\"Magmarizer\"] = 21] = \"Magmarizer\";\n StoneType[StoneType[\"Protector\"] = 22] = \"Protector\";\n StoneType[StoneType[\"Dubious_disc\"] = 23] = \"Dubious_disc\";\n StoneType[StoneType[\"Reaper_cloth\"] = 24] = \"Reaper_cloth\";\n StoneType[StoneType[\"Black_DNA\"] = 25] = \"Black_DNA\";\n StoneType[StoneType[\"White_DNA\"] = 26] = \"White_DNA\";\n StoneType[StoneType[\"Sachet\"] = 27] = \"Sachet\";\n StoneType[StoneType[\"Whipped_dream\"] = 28] = \"Whipped_dream\";\n StoneType[StoneType[\"Key_stone\"] = 29] = \"Key_stone\";\n StoneType[StoneType[\"Ice_stone\"] = 30] = \"Ice_stone\";\n StoneType[StoneType[\"Solar_light\"] = 31] = \"Solar_light\";\n StoneType[StoneType[\"Lunar_light\"] = 32] = \"Lunar_light\";\n StoneType[StoneType[\"Pure_light\"] = 33] = \"Pure_light\";\n StoneType[StoneType[\"Crystallized_shadow\"] = 34] = \"Crystallized_shadow\";\n StoneType[StoneType[\"Sweet_apple\"] = 35] = \"Sweet_apple\";\n StoneType[StoneType[\"Tart_apple\"] = 36] = \"Tart_apple\";\n StoneType[StoneType[\"Cracked_pot\"] = 37] = \"Cracked_pot\";\n StoneType[StoneType[\"Galarica_cuff\"] = 38] = \"Galarica_cuff\";\n StoneType[StoneType[\"Galarica_wreath\"] = 39] = \"Galarica_wreath\";\n StoneType[StoneType[\"Black_mane_hair\"] = 40] = \"Black_mane_hair\";\n StoneType[StoneType[\"White_mane_hair\"] = 41] = \"White_mane_hair\";\n StoneType[StoneType[\"Black_augurite\"] = 42] = \"Black_augurite\";\n StoneType[StoneType[\"Peat_block\"] = 43] = \"Peat_block\";\n StoneType[StoneType[\"Auspicious_armor\"] = 44] = \"Auspicious_armor\";\n StoneType[StoneType[\"Malicious_armor\"] = 45] = \"Malicious_armor\";\n StoneType[StoneType[\"Leaders_crest\"] = 46] = \"Leaders_crest\";\n StoneType[StoneType[\"Gimmighoul_coin\"] = 47] = \"Gimmighoul_coin\";\n StoneType[StoneType[\"Syrupy_apple\"] = 48] = \"Syrupy_apple\";\n StoneType[StoneType[\"Unremarkable_teacup\"] = 49] = \"Unremarkable_teacup\";\n StoneType[StoneType[\"Metal_alloy\"] = 50] = \"Metal_alloy\";\n})(StoneType || (StoneType = {}));\nvar FossilPieceType;\n(function (FossilPieceType) {\n FossilPieceType[FossilPieceType[\"None\"] = -1] = \"None\";\n FossilPieceType[FossilPieceType[\"Fossilized Bird\"] = 0] = \"Fossilized Bird\";\n FossilPieceType[FossilPieceType[\"Fossilized Fish\"] = 1] = \"Fossilized Fish\";\n FossilPieceType[FossilPieceType[\"Fossilized Drake\"] = 2] = \"Fossilized Drake\";\n FossilPieceType[FossilPieceType[\"Fossilized Dino\"] = 3] = \"Fossilized Dino\";\n})(FossilPieceType || (FossilPieceType = {}));\nvar BattleItemType;\n(function (BattleItemType) {\n BattleItemType[\"xAttack\"] = \"xAttack\";\n BattleItemType[\"xClick\"] = \"xClick\";\n BattleItemType[\"Lucky_egg\"] = \"Lucky_egg\";\n BattleItemType[\"Token_collector\"] = \"Token_collector\";\n BattleItemType[\"Dowsing_machine\"] = \"Dowsing_machine\";\n BattleItemType[\"Lucky_incense\"] = \"Lucky_incense\";\n})(BattleItemType || (BattleItemType = {}));\nvar FluteItemType;\n(function (FluteItemType) {\n FluteItemType[\"Yellow_Flute\"] = \"Yellow_Flute\";\n FluteItemType[\"Black_Flute\"] = \"Black_Flute\";\n FluteItemType[\"Time_Flute\"] = \"Time_Flute\";\n FluteItemType[\"Red_Flute\"] = \"Red_Flute\";\n FluteItemType[\"White_Flute\"] = \"White_Flute\";\n FluteItemType[\"Blue_Flute\"] = \"Blue_Flute\";\n // 'Poke_Flute' = 'Poke_Flute',\n // 'Azure_Flute' = 'Azure_Flute',\n // 'Eon_Flute' = 'Eon_Flute',\n // 'Sun_Flute' = 'Sun_Flute',\n // 'Moon_Flute' = 'Moon_Flute',\n // 'Grass_Flute' = 'Grass_Flute',\n})(FluteItemType || (FluteItemType = {}));\nvar PokemonItemType;\n(function (PokemonItemType) {\n PokemonItemType[PokemonItemType[\"Pinkan Arbok\"] = 0] = \"Pinkan Arbok\";\n PokemonItemType[PokemonItemType[\"Pinkan Oddish\"] = 1] = \"Pinkan Oddish\";\n PokemonItemType[PokemonItemType[\"Pinkan Poliwhirl\"] = 2] = \"Pinkan Poliwhirl\";\n PokemonItemType[PokemonItemType[\"Pinkan Geodude\"] = 3] = \"Pinkan Geodude\";\n PokemonItemType[PokemonItemType[\"Pinkan Dodrio\"] = 4] = \"Pinkan Dodrio\";\n PokemonItemType[PokemonItemType[\"Lickitung\"] = 5] = \"Lickitung\";\n PokemonItemType[PokemonItemType[\"Pinkan Weezing\"] = 6] = \"Pinkan Weezing\";\n PokemonItemType[PokemonItemType[\"Mr. Mime\"] = 7] = \"Mr. Mime\";\n PokemonItemType[PokemonItemType[\"Pinkan Scyther\"] = 8] = \"Pinkan Scyther\";\n PokemonItemType[PokemonItemType[\"Jynx\"] = 9] = \"Jynx\";\n PokemonItemType[PokemonItemType[\"Pinkan Electabuzz\"] = 10] = \"Pinkan Electabuzz\";\n PokemonItemType[PokemonItemType[\"Magikarp\"] = 11] = \"Magikarp\";\n PokemonItemType[PokemonItemType[\"Eevee\"] = 12] = \"Eevee\";\n PokemonItemType[PokemonItemType[\"Porygon\"] = 13] = \"Porygon\";\n PokemonItemType[PokemonItemType[\"Togepi\"] = 14] = \"Togepi\";\n PokemonItemType[PokemonItemType[\"Beldum\"] = 15] = \"Beldum\";\n PokemonItemType[PokemonItemType[\"Grotle (Acorn)\"] = 16] = \"Grotle (Acorn)\";\n PokemonItemType[PokemonItemType[\"Combee\"] = 17] = \"Combee\";\n PokemonItemType[PokemonItemType[\"Burmy (Plant)\"] = 18] = \"Burmy (Plant)\";\n PokemonItemType[PokemonItemType[\"Spiritomb\"] = 19] = \"Spiritomb\";\n PokemonItemType[PokemonItemType[\"Cherubi\"] = 20] = \"Cherubi\";\n PokemonItemType[PokemonItemType[\"Zorua\"] = 21] = \"Zorua\";\n PokemonItemType[PokemonItemType[\"Meloetta (Pirouette)\"] = 22] = \"Meloetta (Pirouette)\";\n PokemonItemType[PokemonItemType[\"Type: Null\"] = 23] = \"Type: Null\";\n PokemonItemType[PokemonItemType[\"Poipole\"] = 24] = \"Poipole\";\n PokemonItemType[PokemonItemType[\"Silvally (Fighting) 1\"] = 25] = \"Silvally (Fighting) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Rock) 1\"] = 26] = \"Silvally (Rock) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Dark) 1\"] = 27] = \"Silvally (Dark) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Fairy) 1\"] = 28] = \"Silvally (Fairy) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Water) 1\"] = 29] = \"Silvally (Water) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Grass) 1\"] = 30] = \"Silvally (Grass) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Fire) 1\"] = 31] = \"Silvally (Fire) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Electric) 1\"] = 32] = \"Silvally (Electric) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Ice) 1\"] = 33] = \"Silvally (Ice) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Ground) 1\"] = 34] = \"Silvally (Ground) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Bug) 1\"] = 35] = \"Silvally (Bug) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Flying) 1\"] = 36] = \"Silvally (Flying) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Poison) 1\"] = 37] = \"Silvally (Poison) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Ghost) 1\"] = 38] = \"Silvally (Ghost) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Psychic) 1\"] = 39] = \"Silvally (Psychic) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Steel) 1\"] = 40] = \"Silvally (Steel) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Dragon) 1\"] = 41] = \"Silvally (Dragon) 1\";\n PokemonItemType[PokemonItemType[\"Silvally (Fighting) 2\"] = 42] = \"Silvally (Fighting) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Rock) 2\"] = 43] = \"Silvally (Rock) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Dark) 2\"] = 44] = \"Silvally (Dark) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Fairy) 2\"] = 45] = \"Silvally (Fairy) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Water) 2\"] = 46] = \"Silvally (Water) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Grass) 2\"] = 47] = \"Silvally (Grass) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Fire) 2\"] = 48] = \"Silvally (Fire) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Electric) 2\"] = 49] = \"Silvally (Electric) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Ice) 2\"] = 50] = \"Silvally (Ice) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Ground) 2\"] = 51] = \"Silvally (Ground) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Bug) 2\"] = 52] = \"Silvally (Bug) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Flying) 2\"] = 53] = \"Silvally (Flying) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Poison) 2\"] = 54] = \"Silvally (Poison) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Ghost) 2\"] = 55] = \"Silvally (Ghost) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Psychic) 2\"] = 56] = \"Silvally (Psychic) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Steel) 2\"] = 57] = \"Silvally (Steel) 2\";\n PokemonItemType[PokemonItemType[\"Silvally (Dragon) 2\"] = 58] = \"Silvally (Dragon) 2\";\n PokemonItemType[PokemonItemType[\"Dracozolt\"] = 59] = \"Dracozolt\";\n PokemonItemType[PokemonItemType[\"Arctozolt\"] = 60] = \"Arctozolt\";\n PokemonItemType[PokemonItemType[\"Dracovish\"] = 61] = \"Dracovish\";\n PokemonItemType[PokemonItemType[\"Arctovish\"] = 62] = \"Arctovish\";\n PokemonItemType[PokemonItemType[\"Zarude (Dada)\"] = 63] = \"Zarude (Dada)\";\n})(PokemonItemType || (PokemonItemType = {}));\nvar UltraBeastType;\n(function (UltraBeastType) {\n UltraBeastType[UltraBeastType[\"Nihilego\"] = 0] = \"Nihilego\";\n UltraBeastType[UltraBeastType[\"Buzzwole\"] = 1] = \"Buzzwole\";\n UltraBeastType[UltraBeastType[\"Pheromosa\"] = 2] = \"Pheromosa\";\n UltraBeastType[UltraBeastType[\"Xurkitree\"] = 3] = \"Xurkitree\";\n UltraBeastType[UltraBeastType[\"Kartana\"] = 4] = \"Kartana\";\n UltraBeastType[UltraBeastType[\"Celesteela\"] = 5] = \"Celesteela\";\n UltraBeastType[UltraBeastType[\"Blacephalon\"] = 6] = \"Blacephalon\";\n UltraBeastType[UltraBeastType[\"Stakataka\"] = 7] = \"Stakataka\";\n UltraBeastType[UltraBeastType[\"Guzzlord\"] = 8] = \"Guzzlord\";\n UltraBeastType[UltraBeastType[\"Poipole\"] = 9] = \"Poipole\";\n UltraBeastType[UltraBeastType[\"Naganadel\"] = 10] = \"Naganadel\";\n})(UltraBeastType || (UltraBeastType = {}));\nvar PokeBlockColor;\n(function (PokeBlockColor) {\n PokeBlockColor[PokeBlockColor[\"Black\"] = 0] = \"Black\";\n PokeBlockColor[PokeBlockColor[\"Red\"] = 1] = \"Red\";\n PokeBlockColor[PokeBlockColor[\"Blue\"] = 2] = \"Blue\";\n PokeBlockColor[PokeBlockColor[\"Pink\"] = 3] = \"Pink\";\n PokeBlockColor[PokeBlockColor[\"Green\"] = 4] = \"Green\";\n PokeBlockColor[PokeBlockColor[\"Yellow\"] = 5] = \"Yellow\";\n PokeBlockColor[PokeBlockColor[\"Gold\"] = 6] = \"Gold\";\n PokeBlockColor[PokeBlockColor[\"Purple\"] = 7] = \"Purple\";\n PokeBlockColor[PokeBlockColor[\"Indigo\"] = 8] = \"Indigo\";\n PokeBlockColor[PokeBlockColor[\"Brown\"] = 9] = \"Brown\";\n PokeBlockColor[PokeBlockColor[\"Light_Blue\"] = 10] = \"Light_Blue\";\n PokeBlockColor[PokeBlockColor[\"Olive\"] = 11] = \"Olive\";\n PokeBlockColor[PokeBlockColor[\"Beige\"] = 12] = \"Beige\";\n PokeBlockColor[PokeBlockColor[\"Gray\"] = 13] = \"Gray\";\n PokeBlockColor[PokeBlockColor[\"White\"] = 14] = \"White\";\n})(PokeBlockColor || (PokeBlockColor = {}));\nvar VitaminType;\n(function (VitaminType) {\n VitaminType[VitaminType[\"Protein\"] = 0] = \"Protein\";\n VitaminType[VitaminType[\"Calcium\"] = 1] = \"Calcium\";\n VitaminType[VitaminType[\"Carbos\"] = 2] = \"Carbos\";\n})(VitaminType || (VitaminType = {}));\nvar EggItemType;\n(function (EggItemType) {\n EggItemType[EggItemType[\"Fire_egg\"] = 0] = \"Fire_egg\";\n EggItemType[EggItemType[\"Water_egg\"] = 1] = \"Water_egg\";\n EggItemType[EggItemType[\"Grass_egg\"] = 2] = \"Grass_egg\";\n EggItemType[EggItemType[\"Fighting_egg\"] = 3] = \"Fighting_egg\";\n EggItemType[EggItemType[\"Electric_egg\"] = 4] = \"Electric_egg\";\n EggItemType[EggItemType[\"Dragon_egg\"] = 5] = \"Dragon_egg\";\n EggItemType[EggItemType[\"Pokemon_egg\"] = 6] = \"Pokemon_egg\";\n EggItemType[EggItemType[\"Mystery_egg\"] = 7] = \"Mystery_egg\";\n})(EggItemType || (EggItemType = {}));\nvar BulletinBoards;\n(function (BulletinBoards) {\n BulletinBoards[BulletinBoards[\"None\"] = -2] = \"None\";\n BulletinBoards[BulletinBoards[\"All\"] = -1] = \"All\";\n BulletinBoards[BulletinBoards[\"Kanto\"] = 0] = \"Kanto\";\n BulletinBoards[BulletinBoards[\"Johto\"] = 1] = \"Johto\";\n BulletinBoards[BulletinBoards[\"Hoenn\"] = 2] = \"Hoenn\";\n BulletinBoards[BulletinBoards[\"Sevii4567\"] = 3] = \"Sevii4567\";\n BulletinBoards[BulletinBoards[\"Sinnoh\"] = 4] = \"Sinnoh\";\n BulletinBoards[BulletinBoards[\"Unova\"] = 5] = \"Unova\";\n BulletinBoards[BulletinBoards[\"Kalos\"] = 6] = \"Kalos\";\n BulletinBoards[BulletinBoards[\"Alola\"] = 7] = \"Alola\";\n BulletinBoards[BulletinBoards[\"Hoppy\"] = 8] = \"Hoppy\";\n BulletinBoards[BulletinBoards[\"Galar\"] = 9] = \"Galar\";\n BulletinBoards[BulletinBoards[\"Armor\"] = 10] = \"Armor\";\n BulletinBoards[BulletinBoards[\"Crown\"] = 11] = \"Crown\";\n BulletinBoards[BulletinBoards[\"Hisui\"] = 12] = \"Hisui\";\n BulletinBoards[BulletinBoards[\"Arceus\"] = 13] = \"Arceus\";\n BulletinBoards[BulletinBoards[\"Paldea\"] = 14] = \"Paldea\";\n})(BulletinBoards || (BulletinBoards = {}));\n// Underground\nvar EnergyRestoreSize;\n(function (EnergyRestoreSize) {\n EnergyRestoreSize[EnergyRestoreSize[\"SmallRestore\"] = 0] = \"SmallRestore\";\n EnergyRestoreSize[EnergyRestoreSize[\"MediumRestore\"] = 1] = \"MediumRestore\";\n EnergyRestoreSize[EnergyRestoreSize[\"LargeRestore\"] = 2] = \"LargeRestore\";\n})(EnergyRestoreSize || (EnergyRestoreSize = {}));\nconst EnergyRestoreEffect = {\n SmallRestore: 0.1,\n MediumRestore: 0.2,\n LargeRestore: 0.5,\n};\nconst FossilToPokemon = {\n 'Helix Fossil': 'Omanyte',\n 'Dome Fossil': 'Kabuto',\n 'Old Amber': 'Aerodactyl',\n 'Root Fossil': 'Lileep',\n 'Claw Fossil': 'Anorith',\n 'Armor Fossil': 'Shieldon',\n 'Skull Fossil': 'Cranidos',\n 'Cover Fossil': 'Tirtouga',\n 'Plume Fossil': 'Archen',\n 'Jaw Fossil': 'Tyrunt',\n 'Sail Fossil': 'Amaura',\n};\n// Used for image name\nconst PokemonToFossil = {\n Omanyte: 'Helix Fossil',\n Kabuto: 'Dome Fossil',\n Aerodactyl: 'Old Amber',\n Lileep: 'Root Fossil',\n Anorith: 'Claw Fossil',\n Shieldon: 'Armor Fossil',\n Cranidos: 'Skull Fossil',\n Tirtouga: 'Cover Fossil',\n Archen: 'Plume Fossil',\n Tyrunt: 'Jaw Fossil',\n Amaura: 'Sail Fossil',\n};\n// For random quest, name matches entry in gymList (created in Gym.ts)\nconst KantoGyms = [\n 'Pewter City',\n 'Cerulean City',\n 'Vermilion City',\n 'Celadon City',\n 'Saffron City',\n 'Fuchsia City',\n 'Cinnabar Island',\n 'Viridian City',\n 'Elite Lorelei',\n 'Elite Bruno',\n 'Elite Agatha',\n 'Elite Lance',\n 'Champion Blue',\n];\nconst JohtoGyms = [\n 'Violet City',\n 'Azalea Town',\n 'Goldenrod City',\n 'Ecruteak City',\n 'Cianwood City',\n 'Olivine City',\n 'Mahogany Town',\n 'Blackthorn City',\n 'Elite Will',\n 'Elite Koga',\n 'Elite Bruno2',\n 'Elite Karen',\n 'Champion Lance',\n];\nconst HoennGyms = [\n 'Rustboro City',\n 'Dewford Town',\n 'Mauville City',\n 'Lavaridge Town',\n 'Petalburg City',\n 'Fortree City',\n 'Mossdeep City',\n 'Sootopolis City',\n 'Elite Sidney',\n 'Elite Phoebe',\n 'Elite Glacia',\n 'Elite Drake',\n 'Champion Wallace',\n];\nconst SinnohGyms = [\n 'Oreburgh City',\n 'Eterna City',\n 'Hearthome City',\n 'Veilstone City',\n 'Pastoria City',\n 'Canalave City',\n 'Snowpoint City',\n 'Sunyshore City',\n 'Elite Aaron',\n 'Elite Bertha',\n 'Elite Flint',\n 'Elite Lucian',\n 'Champion Cynthia',\n];\nconst UnovaGyms = [\n 'Aspertia City',\n 'Virbank City',\n 'Castelia City',\n 'Nimbasa City',\n 'Driftveil City',\n 'Mistralton City',\n 'Opelucid City',\n 'Humilau City',\n 'Elite Shauntal',\n 'Elite Marshal',\n 'Elite Grimsley',\n 'Elite Caitlin',\n 'Champion Iris',\n];\nconst KalosGyms = [\n 'Santalune City',\n 'Cyllage City',\n 'Shalour City',\n 'Coumarine City',\n 'Lumiose City',\n 'Laverre City',\n 'Anistar City',\n 'Snowbelle City',\n 'Elite Malva',\n 'Elite Siebold',\n 'Elite Wikstrom',\n 'Elite Drasna',\n 'Champion Diantha',\n];\nconst AlolaGyms = [\n 'Iki Town',\n 'Konikoni City',\n 'Malie City',\n 'Exeggutor Island',\n 'Elite Molayne',\n 'Elite Olivia',\n 'Elite Acerola',\n 'Elite Kahili',\n 'Champion Hau',\n];\nconst GalarGyms = [\n 'Turffield',\n 'Hulbury',\n 'Motostoke',\n 'Stow-on-Side1',\n 'Stow-on-Side2',\n 'Ballonlea',\n 'Circhester1',\n 'Circhester2',\n 'Spikemuth',\n 'Hammerlocke',\n 'Elite Trainer Marnie',\n 'Elite Gym Leader Bede',\n 'Elite Trainer Hop',\n 'Champion Leon',\n 'Elite Gym Leader Klara',\n 'Elite Gym Leader Avery',\n 'Elite Dojo Matron Honey',\n 'Elite Dojo Master Mustard',\n 'Elite Trainer Peony',\n];\nconst HisuiGyms = [\n 'Grandtree Arena',\n 'Brava Arena',\n 'Molten Arena',\n 'Moonview Arena',\n 'Icepeak Arena',\n 'Temple of Sinnoh',\n];\nconst PaldeaGyms = [\n 'Cortondo',\n 'Artazon',\n 'Levincia',\n 'Cascarrafa',\n 'Medali',\n 'Montenevera',\n 'Alfornada',\n 'Glaseado Mountain',\n 'Elite Rika',\n 'Elite Poppy',\n 'Elite Larry',\n 'Elite Hassel',\n 'Top Champion Geeta',\n 'Champion Nemona',\n 'Segin Squad\\'s Base',\n 'Schedar Squad\\'s Base',\n 'Navi Squad\\'s Base',\n 'Ruchbah Squad\\'s Base',\n 'Caph Squad\\'s Base',\n 'Director Clavell',\n 'Penny of Team Star',\n 'Stony Cliff Titan',\n 'Open Sky Titan',\n 'Lurking Steel Titan',\n 'Asado Desert',\n 'Casseroya Lake',\n 'Pokémon Trainer Arven',\n 'AI Sada',\n 'AI Turo',\n];\nconst OrangeGyms = [\n 'Mikan Island',\n 'Navel Island',\n 'Trovita Island',\n 'Kumquat Island',\n 'Supreme Gym Leader Drake',\n];\nconst OrreGyms = [\n 'Cipher Admin Ein',\n 'Cipher Admin Miror B.',\n 'Cipher Admin Dakim',\n 'Cipher Admin Venus',\n 'Cipher Admin Lovrina',\n 'Cipher Admin Snattle',\n 'Cipher Admin Gorigan',\n 'Cipher Admin Ardos',\n 'Cipher Admin Eldes',\n];\nconst MagikarpJumpGyms = [\n 'Friend League',\n 'Quick League',\n 'Heavy League',\n 'Great League',\n 'Fast League',\n 'Luxury League',\n 'Heal League',\n 'Ultra League',\n 'E4 League',\n 'Master League',\n];\nconst RegionGyms = [\n KantoGyms,\n JohtoGyms,\n HoennGyms,\n SinnohGyms,\n UnovaGyms,\n KalosGyms,\n AlolaGyms,\n GalarGyms,\n HisuiGyms,\n PaldeaGyms,\n // Keep it at the bottom, as we want optional badges at the bottom\n OrangeGyms,\n MagikarpJumpGyms,\n OrreGyms,\n];\nfunction getGymIndex(gym) {\n return RegionGyms.flat().findIndex((g) => g === gym);\n}\nfunction getGymRegion(gym) {\n return RegionGyms.findIndex((gyms) => gyms.find((g) => g === gym));\n}\nconst GymAutoRepeatRewardTiers = [\n // [reward modifier, clears threshold]\n [1, 1000],\n [0.75, 750],\n [0.5, 500],\n [0.25, 250],\n [0, 0],\n];\nconst KantoDungeons = [\n 'Viridian Forest',\n 'Mt. Moon',\n 'Diglett\\'s Cave',\n 'Rock Tunnel',\n 'Rocket Game Corner',\n 'Pokémon Tower',\n 'Silph Co.',\n 'Power Plant',\n 'Seafoam Islands',\n 'Pokémon Mansion',\n 'Mt. Ember Summit',\n 'Berry Forest',\n 'New Island',\n 'Victory Road',\n 'Cerulean Cave',\n 'Ruby Path',\n 'Icefall Cave',\n 'Sunburst Island',\n 'Lost Cave',\n 'Pattern Bush',\n 'Altering Cave',\n 'Tanoby Ruins',\n 'Pinkan Mountain', // 22\n];\nconst JohtoDungeons = [\n 'Sprout Tower',\n 'Ruins of Alph',\n 'Union Cave',\n 'Slowpoke Well',\n 'Ilex Forest',\n 'Burned Tower',\n 'Olivine Lighthouse',\n 'Tin Tower',\n 'Whirl Islands',\n 'Mt. Mortar',\n 'Team Rocket\\'s Hideout',\n 'Radio Tower',\n 'Ice Path',\n 'Dark Cave',\n 'Tohjo Falls',\n 'Victory Road Johto',\n 'Mt. Silver', // 39\n];\nconst HoennDungeons = [\n 'Petalburg Woods',\n 'Rusturf Tunnel',\n 'Granite Cave',\n 'Fiery Path',\n 'Meteor Falls',\n 'Mt. Chimney Crater',\n 'Jagged Pass',\n 'New Mauville',\n 'Weather Institute',\n 'Mt. Pyre',\n 'Magma Hideout',\n 'Aqua Hideout',\n 'Shoal Cave',\n 'Seafloor Cavern',\n 'Sealed Chamber',\n 'Cave of Origin',\n 'Sky Pillar',\n 'Victory Road Hoenn',\n 'Near Space',\n 'Phenac City Battles',\n 'Pyrite Town Battles',\n 'Pyrite Colosseum',\n 'Pyrite Building',\n 'Pyrite Cave',\n 'Relic Cave',\n 'Mt. Battle',\n 'The Under',\n 'Cipher Lab',\n 'Realgam Tower Battles',\n 'Realgam Colosseum',\n 'Snagem Hideout',\n 'Deep Colosseum',\n 'Phenac Stadium',\n 'Under Colosseum',\n 'Gateon Port Battles',\n 'Cipher Key Lair',\n 'Citadark Isle',\n 'Citadark Isle Dome', // 77\n];\nconst SinnohDungeons = [\n 'Oreburgh Gate',\n 'Valley Windworks',\n 'Eterna Forest',\n 'Old Chateau',\n 'Team Galactic Eterna Building',\n 'Wayward Cave',\n 'Mt. Coronet South',\n 'Solaceon Ruins',\n 'Iron Island',\n 'Lake Valor',\n 'Lake Verity',\n 'Mt. Coronet North',\n 'Lake Acuity',\n 'Team Galactic HQ',\n 'Spear Pillar',\n 'Distortion World',\n 'Victory Road Sinnoh',\n 'Sendoff Spring',\n 'Fullmoon Island',\n 'Newmoon Island',\n 'Flower Paradise',\n 'Snowpoint Temple',\n 'Stark Mountain',\n 'Hall of Origin', // 101\n];\nconst UnovaDungeons = [\n 'Floccesy Ranch',\n 'Liberty Garden',\n 'Castelia Sewers',\n 'Relic Passage',\n 'Relic Castle',\n 'Lostlorn Forest',\n 'Chargestone Cave',\n 'Mistralton Cave',\n 'Celestial Tower',\n 'Reversal Mountain',\n 'Seaside Cave',\n 'Plasma Frigate',\n 'Giant Chasm',\n 'Cave of Being',\n 'Abundant Shrine',\n 'Victory Road Unova',\n 'Twist Mountain',\n 'Dragonspiral Tower',\n 'Moor of Icirrus',\n 'Pledge Grove',\n 'Pinwheel Forest',\n 'Dreamyard',\n 'P2 Laboratory', // 124\n];\nconst KalosDungeons = [\n 'Santalune Forest',\n 'Connecting Cave',\n 'Glittering Cave',\n 'Reflection Cave',\n // 'Tower of Mastery',\n 'Sea Spirit\\'s Den',\n 'Kalos Power Plant',\n 'Poké Ball Factory',\n 'Lost Hotel',\n 'Frost Cavern',\n 'Team Flare Secret HQ',\n 'Terminus Cave',\n 'Pokémon Village',\n 'Victory Road Kalos', // 137\n // 'Unknown Dungeon',\n];\nconst AlolaDungeons = [\n 'Trainers\\' School',\n 'Hau\\'oli Cemetery',\n 'Verdant Cavern',\n 'Melemele Meadow',\n 'Seaward Cave',\n 'Ten Carat Hill',\n 'Pikachu Valley',\n 'Paniola Ranch',\n 'Brooklet Hill',\n 'Wela Volcano Park',\n 'Lush Jungle',\n 'Diglett\\'s Tunnel',\n 'Memorial Hill',\n 'Malie Garden',\n 'Hokulani Observatory',\n 'Thrifty Megamart',\n 'Ula\\'ula Meadow',\n 'Po Town',\n 'Aether Foundation',\n 'Exeggutor Island Hill',\n 'Vast Poni Canyon',\n 'Mina\\'s Houseboat',\n 'Mount Lanakila',\n 'Lake of the Sunne and Moone',\n 'Ruins of Conflict',\n 'Ruins of Life',\n 'Ruins of Abundance',\n 'Ruins of Hope',\n 'Poni Meadow',\n 'Resolution Cave', // 167\n];\nconst GalarDungeons = [\n 'Slumbering Weald Shrine',\n 'Galar Mine',\n 'Galar Mine No. 2',\n 'Glimwood Tangle',\n 'Rose Tower',\n 'Energy Plant',\n 'Dusty Bowl',\n 'Courageous Cavern',\n 'Brawlers\\' Cave',\n 'Warm-Up Tunnel',\n 'Tower of Darkness',\n 'Tower of Waters',\n 'Roaring-Sea Caves',\n 'Rock Peak Ruins',\n 'Iron Ruins',\n 'Iceberg Ruins',\n 'Split-Decision Ruins',\n 'Lakeside Cave',\n 'Dyna Tree Hill',\n 'Tunnel to the Top',\n 'Crown Shrine',\n 'Max Lair', // 189\n];\nconst HisuiDungeons = [\n 'Floaro Gardens',\n 'Oreburrow Tunnel',\n 'Heartwood',\n 'Ancient Solaceon Ruins',\n 'Shrouded Ruins',\n 'Veilstone Cape',\n 'Firespit Island',\n 'Ancient Wayward Cave',\n 'Ancient Quarry',\n 'Primeval Grotto',\n 'Clamberclaw Cliffs',\n 'Celestica Ruins',\n 'Sacred Plaza',\n 'Avalugg\\'s Legacy',\n 'Ice Column Chamber',\n 'Icepeak Cavern',\n 'Ancient Snowpoint Temple',\n 'Seaside Hollow',\n 'Ancient Lake Verity',\n 'Ancient Lake Valor',\n 'Ancient Lake Acuity',\n 'Temple of Sinnoh',\n 'Turnback Cave', // 212\n];\nconst PaldeaDungeons = [\n 'Inlet Grotto',\n 'Glaseado Mountain',\n 'Grasswither Shrine',\n 'Icerend Shrine',\n 'Groundblight Shrine',\n 'Firescourge Shrine',\n 'Area Zero',\n 'Area Zero Depths', // 220\n];\nconst RegionDungeons = [\n KantoDungeons,\n JohtoDungeons,\n HoennDungeons,\n SinnohDungeons,\n UnovaDungeons,\n KalosDungeons,\n AlolaDungeons,\n GalarDungeons,\n HisuiDungeons,\n PaldeaDungeons,\n];\nfunction getDungeonIndex(dungeon) {\n return RegionDungeons.flat().findIndex((d) => d === dungeon);\n}\nfunction getDungeonRegion(dungeon) {\n return RegionDungeons.findIndex((dungeons) => dungeons.find((d) => d === dungeon));\n}\nconst StartingTowns = [\n 'Pallet Town',\n 'New Bark Town',\n 'Littleroot Town',\n 'Twinleaf Town',\n 'Aspertia City',\n 'Vaniville Town',\n 'Iki Town Outskirts',\n 'Postwick',\n 'Prelude Beach',\n 'Cabo Poco',\n 'Final Region Town', // Final\n];\nconst StartingRoutes = [\n 1,\n 29,\n 101,\n 201,\n 19,\n 1,\n 1,\n 1,\n 1,\n 1, // Paldea\n];\nconst DockTowns = [\n 'Vermilion City',\n 'Olivine City',\n 'Slateport City',\n 'Canalave City',\n 'Castelia City',\n 'Coumarine City',\n 'Hau\\'oli City',\n 'Hulbury',\n 'Prelude Beach',\n 'Porto Marinada', // Paldea\n];\nconst TemporaryBattles = [\n 'Blue 1',\n 'Blue 2',\n 'Blue 3',\n 'Blue 4',\n 'Fighting Dojo',\n 'Snorlax route 12',\n 'Snorlax route 16',\n 'Blue 5',\n 'Biker Goon 1',\n 'Biker Goon 2',\n 'Biker Goon 3',\n 'Cue Ball Paxton',\n 'Ash Ketchum New Island',\n 'Bill\\'s Grandpa',\n 'Blue 6',\n 'Santa Jynx 1',\n 'Santa Jynx 2',\n 'Santa Jynx 3',\n 'Santa Jynx 4',\n 'Silver 1',\n 'Silver 2',\n 'Sudowoodo',\n 'Silver 3',\n 'Silver 4',\n 'Silver 5',\n 'Suicune 1',\n 'Eusine',\n 'Suicune 2',\n 'Red Gyarados',\n 'Suicune 3',\n 'Suicune 4',\n 'Suicune 5',\n 'Suicune 6',\n 'Silver 6',\n 'Silver 7',\n 'Red',\n 'Youngster Joey',\n 'May 1',\n 'May 2',\n 'May 3',\n 'Wally 1',\n 'May 4',\n 'Kecleon 1',\n 'Kecleon 2',\n 'Kecleon 3',\n 'May 5',\n 'Wally 2',\n 'Clown Jessie & James',\n 'Butler 1',\n 'Butler 2',\n 'Meta Groudon',\n 'Latios',\n 'Latias',\n 'Willie',\n 'Folly',\n 'Cipher Peon Doven',\n 'Cipher Peon Silton',\n 'Cipher Peon Kass',\n 'Cipher Peon Naps',\n 'Chobin 1',\n 'Miror B. 1',\n 'Chobin 2',\n 'Cipher Peon Smarton',\n 'Zook',\n 'Miror B. 2',\n 'Sevii Rocket Grunt 1',\n 'Sevii Rocket Grunt 2',\n 'Sevii Rocket Grunt 3',\n 'Sevii Rocket Grunt 4',\n 'Sevii Rocket Grunt 5',\n 'Sevii Rocket Ariana',\n 'Sevii Rocket Archer',\n 'Scientist Gideon',\n 'Pinkan Jessie & James',\n 'Pinkan Officer Jenny',\n 'Kimono Girls',\n 'Spiky-eared Pichu',\n 'Rocket Boss Giovanni',\n 'Barry 1',\n 'Barry 2',\n 'Barry 3',\n 'Barry 4',\n 'Galactic Boss Cyrus',\n 'Barry 5',\n 'Barry 6',\n 'Barry 7',\n 'Manaphy Go-Rock MGrunt 1',\n 'Manaphy Go-Rock MGrunt 2',\n 'Manaphy Go-Rock MGrunt 3',\n 'Manaphy Go-Rock MGrunt 4',\n 'Manaphy Go-Rock FGrunt 1',\n 'Manaphy Go-Rock FGrunt 2',\n 'Manaphy Go-Rock Commander',\n 'Manaphy Go-Rock Pincher',\n 'Manaphy Egg Protectors',\n 'Zero',\n 'Hugh 1',\n 'Hugh 2',\n 'Team Plasma Grunt 1',\n 'Colress 1',\n 'Team Plasma Grunt 2',\n 'Team Plasma Grunt 3',\n 'Hugh 3',\n 'Cheren',\n 'Colress 2',\n 'Team Plasma Grunt 4',\n 'Team Plasma Grunt 5',\n 'Team Plasma Grunts 1',\n 'Team Plasma Grunts 2',\n 'Hugh 4',\n 'Team Plasma Grunt 6',\n 'Zinzolin 1',\n 'Team Plasma Grunt 7',\n 'Team Plasma Grunt 8',\n 'Team Plasma Grunt 9',\n 'Zinzolin 2',\n 'Plasma Shadow 1',\n 'Colress 3',\n 'Plasma Shadow 2',\n 'Plasma Shadow 3',\n 'Plasma Shadow 4',\n 'Ghetsis 1',\n 'Ghetsis 2',\n 'Hugh 5',\n 'Hugh 6',\n 'Hugh 7',\n 'Red Genesect 1',\n 'Genesect Burn',\n 'Genesect Chill',\n 'Genesect Douse',\n 'Genesect Shock',\n 'Red Genesect 2',\n 'Dream Researcher',\n 'Shauna 1',\n 'Sycamore 1',\n 'Tierno 1',\n 'Trevor & Tierno',\n 'Team Flare Grunt 1',\n 'Team Flare Grunt 2',\n 'Calem 1',\n 'Korrina',\n 'Courtney 1',\n 'Matt 1',\n 'Zinnia 1',\n 'Draconid Elder',\n 'Aqua Grunt',\n 'Magma Grunt',\n 'Courtney 2',\n 'Matt 2',\n 'Delta Wallace',\n 'Zinnia 2',\n 'Deoxys',\n 'Delta Giovanni',\n 'Mr. Stone',\n 'Shoal Fisherman',\n 'Delta Brock',\n 'Delta Tabitha',\n 'Delta Shelly',\n 'Icy Boulder',\n 'Mega Draconid Elder',\n 'Delta Steven',\n 'Dr Cozmo',\n 'Matt 3',\n 'Courtney 3',\n 'Hoenn Stone Salesman',\n 'Kalos Stone Salesman',\n 'Captain Stern',\n 'Archie Primal',\n 'Maxie Primal',\n 'Primal Groudon',\n 'Primal Kyogre',\n 'Aipom Alley',\n 'Mime Interview',\n 'Underground Fighting Ring',\n 'Lab Ambush',\n 'Imposter',\n 'Possessed Mewtwo',\n 'Calem 2',\n 'Calem 3',\n 'Calem 4',\n 'Hex Maniac Aster',\n 'Team Flare Lysandre 1',\n 'Team Flare Xerosic',\n 'Xerneas',\n 'Yveltal',\n 'Hoopa 1',\n 'Hoopa 2',\n 'Hoopa 3',\n 'Hoopa 4',\n 'Hoopa 5',\n 'Hoopa 6',\n 'Team Flare Boss Lysandre 1',\n 'Sycamore 2',\n 'Shauna 2',\n 'Tierno 2',\n 'Trevor',\n 'Calem 5',\n 'Riot',\n 'Merilyn',\n 'Millis and Argus Steel',\n 'Rampaging Yveltal',\n 'Storyline AZ',\n 'AZ',\n 'Ash Ketchum Kanto',\n 'Ash Ketchum Johto',\n 'Ash Ketchum Hoenn',\n 'Ash Ketchum Sinnoh',\n 'Ash Ketchum Unova',\n 'Ash Ketchum Kalos',\n 'Ash Ketchum Pinkan',\n 'Calem 6',\n 'Marquis Grant',\n 'Grand Duchess Diantha',\n 'Team Flare Boss Lysandre 2',\n 'Wild Houndour Horde',\n 'Wild Electrike Horde',\n 'Unrivaled Red',\n 'Unrivaled Blue',\n 'Unrivaled Green',\n 'Anomaly Mewtwo 1',\n 'Anomaly Mewtwo 2',\n 'Anomaly Mewtwo 3',\n 'Anomaly Mewtwo 4',\n 'Anomaly Mewtwo 5',\n 'Hau 1',\n 'Melemele Spearow',\n 'Hau 2',\n 'Skull 1',\n 'Ilima',\n 'Skull 2',\n 'Recon Squad 1',\n 'Hau 3',\n 'Dexio',\n 'Sina',\n 'Hau 4',\n 'Gladion 1',\n 'Recon Squad 2',\n 'Skull 3',\n 'Battle Royal',\n 'Plumeria 1',\n 'Ultra Wormhole',\n 'Hau 5',\n 'Skull 4',\n 'Molayne',\n 'Psychium Z Trial',\n 'Skull 5',\n 'Plumeria 2',\n 'Gladion 2',\n 'Exeggutor Tree',\n 'Skull 6',\n 'Recon Squad 3',\n 'Lusamine',\n 'Necrozma',\n 'Ultra Megalopolis',\n 'Captain Mina',\n 'Captain Ilima',\n 'Captain Mallow',\n 'Captain Lana',\n 'Captain Kiawe',\n 'Captain Sophocles',\n 'Kahuna Nanu',\n 'Gladion 3',\n 'Lillie',\n 'Guzma Bug Memory',\n 'Kahili Flying Memory',\n 'Plumeria Poison Memory',\n 'Acerola Ghost Memory',\n 'Faba Psychic Memory',\n 'Molayne Steel Memory',\n 'Ryuki Dragon Memory',\n 'Anabel',\n 'Captain Mina UB',\n 'Kahuna Nanu UB',\n 'Ash Ketchum Alola',\n 'Rainbow Rocket Grunt 1',\n 'Rainbow Rocket Grunt 2',\n 'Aether Branch Chief Faba',\n 'Team Aqua Leader Archie',\n 'Team Magma Leader Maxie',\n 'Team Galactic Leader Cyrus',\n 'Team Flare Leader Lysandre',\n 'Team Plasma Leader Ghetsis',\n 'Team Rainbow Leader Giovanni',\n 'Magikarp Jump Koylee',\n 'Magikarp Jump Karpella',\n 'Magikarp Jump Karpen',\n 'Magikarp Jump Tykarp',\n 'Magikarp Jump Karpress',\n 'Magikarp Jump Karami',\n 'Magikarp Jump Karson',\n 'Magikarp Jump Karpress 2',\n 'Magikarp Jump Karpen 2',\n 'Magikarp Jump Karbuck',\n 'Magikarp Jump Skyhopper',\n 'Magikarp Jump Karpen 3',\n 'Magikarp Jump Karpella 2',\n 'Magikarp Jump Karbuck 2',\n 'Magikarp Jump Kareign',\n 'Magikarp Jump Koylee 2',\n 'Magikarp Jump Karpress 3',\n 'Magikarp Jump Karpen 4',\n 'Magikarp Jump Karpella 3',\n 'Magikarp Jump Skyhopper 2',\n 'Magikarp Jump Tykarp 2',\n 'Hop 1',\n 'Mirages',\n 'Hop 2',\n 'Hop 3',\n 'Bede 1',\n 'Hop 4',\n 'Bede 2',\n 'Marnie 1',\n 'Hop 5',\n 'Bede 3',\n 'Hop 6',\n 'Hop 7',\n 'Marnie 2',\n 'Eternatus',\n 'The Darkest Day',\n 'Hop 8',\n 'Sordward 1',\n 'Shielbert 1',\n 'Rampaging Tsareena',\n 'Rampaging Gyarados',\n 'Rampaging Torkoal',\n 'Sordward & Shielbert',\n 'Rampaging Conkeldurr',\n 'Rampaging Dusknoir',\n 'Gym Leader Bede',\n 'Rampaging Gigalith',\n 'Rampaging Froslass',\n 'Gym Leader Marnie',\n 'Rampaging Haxorus',\n 'Sordward 2',\n 'Shielbert 2',\n 'Rampaging Zacian',\n 'Rampaging Zamazenta',\n 'Klara 1',\n 'Avery 1',\n 'Mustard',\n 'Klara 2',\n 'Avery 2',\n 'Klara 3',\n 'Avery 3',\n 'Kubfu',\n 'Zarude Tribe 1',\n 'Zarude Tribe 2',\n 'Zarude Tribe 3',\n 'Ash Ketchum Galar',\n 'Zarude (Dada)',\n 'Flowering Celebi',\n 'Peony',\n 'Calyrex',\n 'Glastrier',\n 'Spectrier',\n 'Dyna Tree Birds',\n 'Galarian Articuno 1',\n 'Galarian Articuno 2',\n 'Galarian Articuno 3',\n 'Galarian Zapdos 1',\n 'Galarian Zapdos 2',\n 'Galarian Zapdos 3',\n 'Galarian Moltres 1',\n 'Galarian Moltres 2',\n 'Galarian Moltres 3',\n 'Regigigas',\n 'Max Raid Venusaur',\n 'Max Raid Charizard',\n 'Max Raid Blastoise',\n 'Max Raid Butterfree',\n 'Max Raid Pikachu',\n 'Max Raid Meowth',\n 'Max Raid Machamp',\n 'Max Raid Gengar',\n 'Max Raid Kingler',\n 'Max Raid Lapras',\n 'Max Raid Eevee',\n 'Max Raid Snorlax',\n 'Max Raid Garbodor',\n 'Max Raid Rillaboom',\n 'Max Raid Cinderace',\n 'Max Raid Inteleon',\n 'Max Raid Corviknight',\n 'Max Raid Orbeetle',\n 'Max Raid Drednaw',\n 'Max Raid Coalossal',\n 'Max Raid Flapple',\n 'Max Raid Appletun',\n 'Max Raid Sandaconda',\n 'Max Raid Toxtricity',\n 'Max Raid Centiskorch',\n 'Max Raid Hatterene',\n 'Max Raid Grimmsnarl',\n 'Max Raid Alcremie',\n 'Max Raid Copperajah',\n 'Max Raid Duraludon',\n 'Eternamax Eternatus',\n 'Terrakion 1',\n 'Swords of Justice 1',\n 'Kyurem 1',\n 'Kyurem 2',\n 'Kyurem 3',\n 'Twerps',\n 'Volo 1',\n 'Akari 1',\n 'Warden Mai',\n 'Alpha Kricketune',\n 'Warden Lian',\n 'Irida 1',\n 'Lord of the Woods: Kleavor',\n 'Akari 2',\n 'Volo 2',\n 'Coin 1',\n 'Ursaluna',\n 'Lady of the Ridge: Lilligant',\n 'Irida 2',\n 'Clover',\n 'Coin 2',\n 'Charm 1',\n 'Lord of the Isles: Arcanine',\n 'Adaman 1',\n 'Melli 1',\n 'Warden Ingo',\n 'Melli 2',\n 'Lord of the Hollow: Electrode',\n 'Warden Gaeric',\n 'Warden Sabi',\n 'Hisuian Braviary',\n 'Lord of the Tundra: Avalugg',\n 'Beni',\n 'Charm 2',\n 'Dialga (Origin)',\n 'Palkia (Origin)',\n 'The Galaxy Team\\'s Kamado',\n 'Adaman 2',\n 'Irida 3',\n 'Volo 3',\n 'Tornadus 1',\n 'Tornadus 2',\n 'Tornadus 3',\n 'Thundurus 1',\n 'Thundurus 2',\n 'Thundurus 3',\n 'Landorus 1',\n 'Landorus 2',\n 'Landorus 3',\n 'Enamorus 1',\n 'Enamorus 2',\n 'Enamorus 3',\n 'Arceus',\n 'Paradise Protection Protocol',\n];\nvar ShardTraderLocations;\n(function (ShardTraderLocations) {\n ShardTraderLocations[ShardTraderLocations[\"None\"] = -1] = \"None\";\n ShardTraderLocations[ShardTraderLocations[\"Cerulean City\"] = 0] = \"Cerulean City\";\n ShardTraderLocations[ShardTraderLocations[\"Vermilion City\"] = 1] = \"Vermilion City\";\n ShardTraderLocations[ShardTraderLocations[\"Lavender Town\"] = 2] = \"Lavender Town\";\n ShardTraderLocations[ShardTraderLocations[\"Saffron City\"] = 3] = \"Saffron City\";\n ShardTraderLocations[ShardTraderLocations[\"Fuchsia City\"] = 4] = \"Fuchsia City\";\n ShardTraderLocations[ShardTraderLocations[\"Cinnabar Island\"] = 5] = \"Cinnabar Island\";\n ShardTraderLocations[ShardTraderLocations[\"Azalea Town\"] = 6] = \"Azalea Town\";\n ShardTraderLocations[ShardTraderLocations[\"Ecruteak City\"] = 7] = \"Ecruteak City\";\n ShardTraderLocations[ShardTraderLocations[\"Olivine City\"] = 8] = \"Olivine City\";\n ShardTraderLocations[ShardTraderLocations[\"Cianwood City\"] = 9] = \"Cianwood City\";\n ShardTraderLocations[ShardTraderLocations[\"Mahogany Town\"] = 10] = \"Mahogany Town\";\n ShardTraderLocations[ShardTraderLocations[\"Blackthorn City\"] = 11] = \"Blackthorn City\";\n ShardTraderLocations[ShardTraderLocations[\"Petalburg City\"] = 12] = \"Petalburg City\";\n ShardTraderLocations[ShardTraderLocations[\"Dewford Town\"] = 13] = \"Dewford Town\";\n ShardTraderLocations[ShardTraderLocations[\"Slateport City\"] = 14] = \"Slateport City\";\n ShardTraderLocations[ShardTraderLocations[\"Mauville City\"] = 15] = \"Mauville City\";\n ShardTraderLocations[ShardTraderLocations[\"Verdanturf Town\"] = 16] = \"Verdanturf Town\";\n ShardTraderLocations[ShardTraderLocations[\"Lavaridge Town\"] = 17] = \"Lavaridge Town\";\n ShardTraderLocations[ShardTraderLocations[\"Fallarbor Town\"] = 18] = \"Fallarbor Town\";\n ShardTraderLocations[ShardTraderLocations[\"Fortree City\"] = 19] = \"Fortree City\";\n ShardTraderLocations[ShardTraderLocations[\"Mossdeep City\"] = 20] = \"Mossdeep City\";\n ShardTraderLocations[ShardTraderLocations[\"Pacifidlog Town\"] = 21] = \"Pacifidlog Town\";\n ShardTraderLocations[ShardTraderLocations[\"Sootopolis City\"] = 22] = \"Sootopolis City\";\n ShardTraderLocations[ShardTraderLocations[\"Ever Grande City\"] = 23] = \"Ever Grande City\";\n ShardTraderLocations[ShardTraderLocations[\"Pokemon HQ Lab\"] = 24] = \"Pokemon HQ Lab\";\n ShardTraderLocations[ShardTraderLocations[\"Sandgem Town\"] = 25] = \"Sandgem Town\";\n ShardTraderLocations[ShardTraderLocations[\"Oreburgh City\"] = 26] = \"Oreburgh City\";\n ShardTraderLocations[ShardTraderLocations[\"Floaroma Town\"] = 27] = \"Floaroma Town\";\n ShardTraderLocations[ShardTraderLocations[\"Eterna City\"] = 28] = \"Eterna City\";\n ShardTraderLocations[ShardTraderLocations[\"Hearthome City\"] = 29] = \"Hearthome City\";\n ShardTraderLocations[ShardTraderLocations[\"Solaceon Town\"] = 30] = \"Solaceon Town\";\n ShardTraderLocations[ShardTraderLocations[\"Pastoria City\"] = 31] = \"Pastoria City\";\n ShardTraderLocations[ShardTraderLocations[\"Celestic Town\"] = 32] = \"Celestic Town\";\n ShardTraderLocations[ShardTraderLocations[\"Pal Park\"] = 33] = \"Pal Park\";\n ShardTraderLocations[ShardTraderLocations[\"Canalave City\"] = 34] = \"Canalave City\";\n ShardTraderLocations[ShardTraderLocations[\"Snowpoint City\"] = 35] = \"Snowpoint City\";\n ShardTraderLocations[ShardTraderLocations[\"Sunyshore City\"] = 36] = \"Sunyshore City\";\n ShardTraderLocations[ShardTraderLocations[\"Survival Area\"] = 37] = \"Survival Area\";\n ShardTraderLocations[ShardTraderLocations[\"Resort Area\"] = 38] = \"Resort Area\";\n ShardTraderLocations[ShardTraderLocations[\"Castelia City\"] = 39] = \"Castelia City\";\n ShardTraderLocations[ShardTraderLocations[\"Nimbasa City\"] = 40] = \"Nimbasa City\";\n ShardTraderLocations[ShardTraderLocations[\"Driftveil City\"] = 41] = \"Driftveil City\";\n ShardTraderLocations[ShardTraderLocations[\"Mistralton City\"] = 42] = \"Mistralton City\";\n ShardTraderLocations[ShardTraderLocations[\"Lentimas Town\"] = 43] = \"Lentimas Town\";\n ShardTraderLocations[ShardTraderLocations[\"Undella Town\"] = 44] = \"Undella Town\";\n ShardTraderLocations[ShardTraderLocations[\"Lacunosa Town\"] = 45] = \"Lacunosa Town\";\n ShardTraderLocations[ShardTraderLocations[\"Opelucid City\"] = 46] = \"Opelucid City\";\n ShardTraderLocations[ShardTraderLocations[\"Humilau City\"] = 47] = \"Humilau City\";\n ShardTraderLocations[ShardTraderLocations[\"Icirrus City\"] = 48] = \"Icirrus City\";\n ShardTraderLocations[ShardTraderLocations[\"Black and White Park\"] = 49] = \"Black and White Park\";\n ShardTraderLocations[ShardTraderLocations[\"Nacrene City\"] = 50] = \"Nacrene City\";\n ShardTraderLocations[ShardTraderLocations[\"Striaton City\"] = 51] = \"Striaton City\";\n ShardTraderLocations[ShardTraderLocations[\"Accumula Town\"] = 52] = \"Accumula Town\";\n ShardTraderLocations[ShardTraderLocations[\"Nuvema Town\"] = 53] = \"Nuvema Town\";\n ShardTraderLocations[ShardTraderLocations[\"Camphrier Town\"] = 54] = \"Camphrier Town\";\n ShardTraderLocations[ShardTraderLocations[\"Parfum Palace\"] = 55] = \"Parfum Palace\";\n ShardTraderLocations[ShardTraderLocations[\"Ambrette Town\"] = 56] = \"Ambrette Town\";\n ShardTraderLocations[ShardTraderLocations[\"Cyllage City\"] = 57] = \"Cyllage City\";\n ShardTraderLocations[ShardTraderLocations[\"Geosenge Town\"] = 58] = \"Geosenge Town\";\n ShardTraderLocations[ShardTraderLocations[\"Shalour City\"] = 59] = \"Shalour City\";\n ShardTraderLocations[ShardTraderLocations[\"Coumarine City\"] = 60] = \"Coumarine City\";\n ShardTraderLocations[ShardTraderLocations[\"Laverre City\"] = 61] = \"Laverre City\";\n ShardTraderLocations[ShardTraderLocations[\"Dendemille Town\"] = 62] = \"Dendemille Town\";\n ShardTraderLocations[ShardTraderLocations[\"Anistar City\"] = 63] = \"Anistar City\";\n ShardTraderLocations[ShardTraderLocations[\"Couriway Town\"] = 64] = \"Couriway Town\";\n ShardTraderLocations[ShardTraderLocations[\"Snowbelle City\"] = 65] = \"Snowbelle City\";\n ShardTraderLocations[ShardTraderLocations[\"Hau'oli City\"] = 66] = \"Hau'oli City\";\n ShardTraderLocations[ShardTraderLocations[\"Heahea City\"] = 67] = \"Heahea City\";\n ShardTraderLocations[ShardTraderLocations[\"Paniola Town\"] = 68] = \"Paniola Town\";\n ShardTraderLocations[ShardTraderLocations[\"Konikoni City\"] = 69] = \"Konikoni City\";\n ShardTraderLocations[ShardTraderLocations[\"Aether Paradise\"] = 70] = \"Aether Paradise\";\n ShardTraderLocations[ShardTraderLocations[\"Malie City\"] = 71] = \"Malie City\";\n ShardTraderLocations[ShardTraderLocations[\"Tapu Village\"] = 72] = \"Tapu Village\";\n ShardTraderLocations[ShardTraderLocations[\"Seafolk Village\"] = 73] = \"Seafolk Village\";\n ShardTraderLocations[ShardTraderLocations[\"Exeggutor Island\"] = 74] = \"Exeggutor Island\";\n ShardTraderLocations[ShardTraderLocations[\"Altar of the Sunne and Moone\"] = 75] = \"Altar of the Sunne and Moone\";\n ShardTraderLocations[ShardTraderLocations[\"Turffield\"] = 76] = \"Turffield\";\n ShardTraderLocations[ShardTraderLocations[\"Hulbury\"] = 77] = \"Hulbury\";\n ShardTraderLocations[ShardTraderLocations[\"Motostoke\"] = 78] = \"Motostoke\";\n ShardTraderLocations[ShardTraderLocations[\"Hammerlocke\"] = 79] = \"Hammerlocke\";\n ShardTraderLocations[ShardTraderLocations[\"Route 6\"] = 80] = \"Route 6\";\n ShardTraderLocations[ShardTraderLocations[\"Stow-on-Side\"] = 81] = \"Stow-on-Side\";\n ShardTraderLocations[ShardTraderLocations[\"Ballonlea\"] = 82] = \"Ballonlea\";\n ShardTraderLocations[ShardTraderLocations[\"Circhester\"] = 83] = \"Circhester\";\n ShardTraderLocations[ShardTraderLocations[\"Spikemuth\"] = 84] = \"Spikemuth\";\n ShardTraderLocations[ShardTraderLocations[\"Master Dojo\"] = 85] = \"Master Dojo\";\n ShardTraderLocations[ShardTraderLocations[\"Jubilife Village\"] = 86] = \"Jubilife Village\";\n})(ShardTraderLocations || (ShardTraderLocations = {}));\nvar BerryTraderLocations;\n(function (BerryTraderLocations) {\n BerryTraderLocations[BerryTraderLocations[\"None\"] = -1] = \"None\";\n BerryTraderLocations[BerryTraderLocations[\"Goldenrod City\"] = 0] = \"Goldenrod City\";\n BerryTraderLocations[BerryTraderLocations[\"Mauville City\"] = 1] = \"Mauville City\";\n BerryTraderLocations[BerryTraderLocations[\"Pinkan Pok\\u00E9mon Reserve\"] = 2] = \"Pinkan Pok\\u00E9mon Reserve\";\n BerryTraderLocations[BerryTraderLocations[\"Hearthome City\"] = 3] = \"Hearthome City\";\n BerryTraderLocations[BerryTraderLocations[\"Secret Berry Shop\"] = 4] = \"Secret Berry Shop\";\n BerryTraderLocations[BerryTraderLocations[\"Driftveil City\"] = 5] = \"Driftveil City\";\n})(BerryTraderLocations || (BerryTraderLocations = {}));\nfunction getTemporaryBattlesIndex(temporaryBattle) {\n return TemporaryBattles.findIndex((t) => t === temporaryBattle);\n}\nvar DayOfWeek;\n(function (DayOfWeek) {\n DayOfWeek[DayOfWeek[\"Sunday\"] = 0] = \"Sunday\";\n DayOfWeek[DayOfWeek[\"Monday\"] = 1] = \"Monday\";\n DayOfWeek[DayOfWeek[\"Tuesday\"] = 2] = \"Tuesday\";\n DayOfWeek[DayOfWeek[\"Wednesday\"] = 3] = \"Wednesday\";\n DayOfWeek[DayOfWeek[\"Thursday\"] = 4] = \"Thursday\";\n DayOfWeek[DayOfWeek[\"Friday\"] = 5] = \"Friday\";\n DayOfWeek[DayOfWeek[\"Saturday\"] = 6] = \"Saturday\";\n})(DayOfWeek || (DayOfWeek = {}));\nvar Pokerus;\n(function (Pokerus) {\n Pokerus[Pokerus[\"Uninfected\"] = 0] = \"Uninfected\";\n Pokerus[Pokerus[\"Infected\"] = 1] = \"Infected\";\n Pokerus[Pokerus[\"Contagious\"] = 2] = \"Contagious\";\n Pokerus[Pokerus[\"Resistant\"] = 3] = \"Resistant\";\n})(Pokerus || (Pokerus = {}));\n// Gender Types\nvar Genders;\n(function (Genders) {\n Genders[Genders[\"Genderless\"] = 0] = \"Genderless\";\n Genders[Genders[\"MaleFemale\"] = 1] = \"MaleFemale\";\n})(Genders || (Genders = {}));\n// Wild/Trainer/BF Pokémon Gender\nvar BattlePokemonGender;\n(function (BattlePokemonGender) {\n BattlePokemonGender[BattlePokemonGender[\"NoGender\"] = 0] = \"NoGender\";\n BattlePokemonGender[BattlePokemonGender[\"Male\"] = 1] = \"Male\";\n BattlePokemonGender[BattlePokemonGender[\"Female\"] = 2] = \"Female\";\n})(BattlePokemonGender || (BattlePokemonGender = {}));\n// Pokemon Statistics\nvar PokemonStatisticsType;\n(function (PokemonStatisticsType) {\n PokemonStatisticsType[\"Captured\"] = \"Captured\";\n PokemonStatisticsType[\"Defeated\"] = \"Defeated\";\n PokemonStatisticsType[\"Encountered\"] = \"Encountered\";\n PokemonStatisticsType[\"Hatched\"] = \"Hatched\";\n PokemonStatisticsType[\"Seen\"] = \"Seen\";\n})(PokemonStatisticsType || (PokemonStatisticsType = {}));\n// Alcremie\nvar AlcremieSweet;\n(function (AlcremieSweet) {\n AlcremieSweet[AlcremieSweet[\"Strawberry Sweet\"] = 0] = \"Strawberry Sweet\";\n AlcremieSweet[AlcremieSweet[\"Love Sweet\"] = 1] = \"Love Sweet\";\n AlcremieSweet[AlcremieSweet[\"Berry Sweet\"] = 2] = \"Berry Sweet\";\n AlcremieSweet[AlcremieSweet[\"Clover Sweet\"] = 3] = \"Clover Sweet\";\n AlcremieSweet[AlcremieSweet[\"Flower Sweet\"] = 4] = \"Flower Sweet\";\n AlcremieSweet[AlcremieSweet[\"Star Sweet\"] = 5] = \"Star Sweet\";\n AlcremieSweet[AlcremieSweet[\"Ribbon Sweet\"] = 6] = \"Ribbon Sweet\";\n})(AlcremieSweet || (AlcremieSweet = {}));\nvar AlcremieSpins;\n(function (AlcremieSpins) {\n AlcremieSpins[AlcremieSpins[\"dayClockwiseBelow5\"] = 0] = \"dayClockwiseBelow5\";\n AlcremieSpins[AlcremieSpins[\"dayCounterclockwiseBelow5\"] = 1] = \"dayCounterclockwiseBelow5\";\n AlcremieSpins[AlcremieSpins[\"nightClockwiseBelow5\"] = 2] = \"nightClockwiseBelow5\";\n AlcremieSpins[AlcremieSpins[\"nightCounterclockwiseAbove5\"] = 3] = \"nightCounterclockwiseAbove5\";\n AlcremieSpins[AlcremieSpins[\"nightClockwiseAbove5\"] = 4] = \"nightClockwiseAbove5\";\n AlcremieSpins[AlcremieSpins[\"nightCounterclockwiseBelow5\"] = 5] = \"nightCounterclockwiseBelow5\";\n AlcremieSpins[AlcremieSpins[\"dayClockwiseAbove5\"] = 6] = \"dayClockwiseAbove5\";\n AlcremieSpins[AlcremieSpins[\"dayCounterclockwiseAbove5\"] = 7] = \"dayCounterclockwiseAbove5\";\n AlcremieSpins[AlcremieSpins[\"at5Above10\"] = 8] = \"at5Above10\";\n AlcremieSpins[AlcremieSpins[\"Any3600\"] = 9] = \"Any3600\";\n})(AlcremieSpins || (AlcremieSpins = {}));\nvar ExtraAchievementCategories;\n(function (ExtraAchievementCategories) {\n ExtraAchievementCategories[ExtraAchievementCategories[\"global\"] = 10] = \"global\";\n ExtraAchievementCategories[ExtraAchievementCategories[\"sevii\"] = 11] = \"sevii\";\n ExtraAchievementCategories[ExtraAchievementCategories[\"orre\"] = 12] = \"orre\";\n ExtraAchievementCategories[ExtraAchievementCategories[\"magikarpJump\"] = 13] = \"magikarpJump\";\n})(ExtraAchievementCategories || (ExtraAchievementCategories = {}));\nconst DayCycleStartHours = {\n [_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Dawn]: 5,\n [_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Day]: 6,\n [_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Dusk]: 17,\n [_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Night]: 18,\n};\nconst MoonCycleValues = {\n [_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NewMoon]: 0,\n [_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaxingCrescent]: 1,\n [_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].FirstQuarter]: 2,\n [_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaxingGibbous]: 3,\n [_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].FullMoon]: 4,\n [_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaningGibbous]: 5,\n [_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ThirdQuarter]: 6,\n [_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaningCrescent]: 7,\n};\nconst MoonEvoPokemon = new Set([\n 'Nidoran(F)',\n 'Nidorina',\n 'Nidoqueen',\n 'Nidoran(M)',\n 'Nidorino',\n 'Nidoking',\n 'Clefairy',\n 'Clefable',\n 'Jigglypuff',\n 'Wigglytuff',\n 'Cleffa',\n 'Igglybuff',\n //'Teddiursa', // 216\n //'Ursaring', // 217\n 'Skitty',\n 'Delcatty',\n //'Lunatone', // 337\n // 'Cresselia', // 488\n //'Darkrai', // 491\n 'Munna',\n 'Musharna', // 518\n //'Lunala', // 792\n //'Lunala (Full Moon)', // 792.01\n //'Necrozma (Dawn Wings)', // 800.02\n //'Ursaluna', // 901\n]);\nvar ShadowStatus;\n(function (ShadowStatus) {\n ShadowStatus[ShadowStatus[\"None\"] = 0] = \"None\";\n ShadowStatus[ShadowStatus[\"Shadow\"] = 1] = \"Shadow\";\n ShadowStatus[ShadowStatus[\"Purified\"] = 2] = \"Purified\";\n})(ShadowStatus || (ShadowStatus = {}));\nvar MegaStoneType;\n(function (MegaStoneType) {\n MegaStoneType[MegaStoneType[\"Abomasite\"] = 0] = \"Abomasite\";\n MegaStoneType[MegaStoneType[\"Absolite\"] = 1] = \"Absolite\";\n MegaStoneType[MegaStoneType[\"Aerodactylite\"] = 2] = \"Aerodactylite\";\n MegaStoneType[MegaStoneType[\"Aggronite\"] = 3] = \"Aggronite\";\n MegaStoneType[MegaStoneType[\"Alakazite\"] = 4] = \"Alakazite\";\n MegaStoneType[MegaStoneType[\"Altarianite\"] = 5] = \"Altarianite\";\n MegaStoneType[MegaStoneType[\"Ampharosite\"] = 6] = \"Ampharosite\";\n MegaStoneType[MegaStoneType[\"Audinite\"] = 7] = \"Audinite\";\n MegaStoneType[MegaStoneType[\"Banettite\"] = 8] = \"Banettite\";\n MegaStoneType[MegaStoneType[\"Beedrillite\"] = 9] = \"Beedrillite\";\n MegaStoneType[MegaStoneType[\"Blastoisinite\"] = 10] = \"Blastoisinite\";\n MegaStoneType[MegaStoneType[\"Blazikenite\"] = 11] = \"Blazikenite\";\n MegaStoneType[MegaStoneType[\"Blue_Orb\"] = 12] = \"Blue_Orb\";\n MegaStoneType[MegaStoneType[\"Cameruptite\"] = 13] = \"Cameruptite\";\n MegaStoneType[MegaStoneType[\"Charizardite_X\"] = 14] = \"Charizardite_X\";\n MegaStoneType[MegaStoneType[\"Charizardite_Y\"] = 15] = \"Charizardite_Y\";\n MegaStoneType[MegaStoneType[\"Diancite\"] = 16] = \"Diancite\";\n MegaStoneType[MegaStoneType[\"Galladite\"] = 17] = \"Galladite\";\n MegaStoneType[MegaStoneType[\"Garchompite\"] = 18] = \"Garchompite\";\n MegaStoneType[MegaStoneType[\"Gardevoirite\"] = 19] = \"Gardevoirite\";\n MegaStoneType[MegaStoneType[\"Gengarite\"] = 20] = \"Gengarite\";\n MegaStoneType[MegaStoneType[\"Glalitite\"] = 21] = \"Glalitite\";\n MegaStoneType[MegaStoneType[\"Gyaradosite\"] = 22] = \"Gyaradosite\";\n MegaStoneType[MegaStoneType[\"Heracronite\"] = 23] = \"Heracronite\";\n MegaStoneType[MegaStoneType[\"Houndoominite\"] = 24] = \"Houndoominite\";\n MegaStoneType[MegaStoneType[\"Kangaskhanite\"] = 25] = \"Kangaskhanite\";\n MegaStoneType[MegaStoneType[\"Latiasite\"] = 26] = \"Latiasite\";\n MegaStoneType[MegaStoneType[\"Latiosite\"] = 27] = \"Latiosite\";\n MegaStoneType[MegaStoneType[\"Lopunnite\"] = 28] = \"Lopunnite\";\n MegaStoneType[MegaStoneType[\"Lucarionite\"] = 29] = \"Lucarionite\";\n MegaStoneType[MegaStoneType[\"Manectite\"] = 30] = \"Manectite\";\n MegaStoneType[MegaStoneType[\"Mawilite\"] = 31] = \"Mawilite\";\n MegaStoneType[MegaStoneType[\"Medichamite\"] = 32] = \"Medichamite\";\n MegaStoneType[MegaStoneType[\"Metagrossite\"] = 33] = \"Metagrossite\";\n MegaStoneType[MegaStoneType[\"Meteorite\"] = 34] = \"Meteorite\";\n MegaStoneType[MegaStoneType[\"Mewtwonite_X\"] = 35] = \"Mewtwonite_X\";\n MegaStoneType[MegaStoneType[\"Mewtwonite_Y\"] = 36] = \"Mewtwonite_Y\";\n MegaStoneType[MegaStoneType[\"Pidgeotite\"] = 37] = \"Pidgeotite\";\n MegaStoneType[MegaStoneType[\"Pinsirite\"] = 38] = \"Pinsirite\";\n MegaStoneType[MegaStoneType[\"Red_Orb\"] = 39] = \"Red_Orb\";\n MegaStoneType[MegaStoneType[\"Sablenite\"] = 40] = \"Sablenite\";\n MegaStoneType[MegaStoneType[\"Salamencite\"] = 41] = \"Salamencite\";\n MegaStoneType[MegaStoneType[\"Sceptilite\"] = 42] = \"Sceptilite\";\n MegaStoneType[MegaStoneType[\"Scizorite\"] = 43] = \"Scizorite\";\n MegaStoneType[MegaStoneType[\"Sharpedonite\"] = 44] = \"Sharpedonite\";\n MegaStoneType[MegaStoneType[\"Slowbronite\"] = 45] = \"Slowbronite\";\n MegaStoneType[MegaStoneType[\"Steelixite\"] = 46] = \"Steelixite\";\n MegaStoneType[MegaStoneType[\"Swampertite\"] = 47] = \"Swampertite\";\n MegaStoneType[MegaStoneType[\"Tyranitarite\"] = 48] = \"Tyranitarite\";\n MegaStoneType[MegaStoneType[\"Venusaurite\"] = 49] = \"Venusaurite\";\n})(MegaStoneType || (MegaStoneType = {}));\nvar GemShops;\n(function (GemShops) {\n GemShops[GemShops[\"HoennFluteMaster\"] = 0] = \"HoennFluteMaster\";\n GemShops[GemShops[\"HoennStoneSalesman\"] = 1] = \"HoennStoneSalesman\";\n GemShops[GemShops[\"UnovaFluteMaster\"] = 2] = \"UnovaFluteMaster\";\n GemShops[GemShops[\"FurfrouGemTrader\"] = 3] = \"FurfrouGemTrader\";\n GemShops[GemShops[\"KalosStoneSalesman\"] = 4] = \"KalosStoneSalesman\";\n GemShops[GemShops[\"SilvallyTrader\"] = 5] = \"SilvallyTrader\";\n GemShops[GemShops[\"MagikarpJumpGemTrader\"] = 6] = \"MagikarpJumpGemTrader\";\n})(GemShops || (GemShops = {}));\nvar DungeonInteractionSource;\n(function (DungeonInteractionSource) {\n DungeonInteractionSource[DungeonInteractionSource[\"Click\"] = 0] = \"Click\";\n DungeonInteractionSource[DungeonInteractionSource[\"Keybind\"] = 1] = \"Keybind\";\n DungeonInteractionSource[DungeonInteractionSource[\"HeldKeybind\"] = 2] = \"HeldKeybind\";\n})(DungeonInteractionSource || (DungeonInteractionSource = {}));\nconst ModalCollapseList = [\n 'achievementTrackerBody',\n 'battleItemContainerBody',\n 'dailyQuestDisplayBody',\n 'eggList',\n 'fluteItemContainerBody',\n 'oakItemsBody',\n 'pokeballSelectorBody',\n 'pokemonListBody',\n 'shortcutsBody',\n 'currencyBody',\n 'undergroundCard',\n 'undergroundDailyTradesCard',\n 'plotListCard',\n 'zCrystalItemContainerBody',\n];\nvar ConsumableType;\n(function (ConsumableType) {\n ConsumableType[ConsumableType[\"Rare_Candy\"] = 0] = \"Rare_Candy\";\n ConsumableType[ConsumableType[\"Magikarp_Biscuit\"] = 1] = \"Magikarp_Biscuit\";\n})(ConsumableType || (ConsumableType = {}));\nconst zCrystalItemType = [\n 'Normalium Z',\n 'Firium Z',\n 'Waterium Z',\n 'Electrium Z',\n 'Grassium Z',\n 'Icium Z',\n 'Fightinium Z',\n 'Poisonium Z',\n 'Groundium Z',\n 'Flyinium Z',\n 'Psychium Z',\n 'Buginium Z',\n 'Rockium Z',\n 'Ghostium Z',\n 'Dragonium Z',\n 'Darkinium Z',\n 'Steelium Z',\n 'Fairium Z',\n];\nvar ZMoveStatus;\n(function (ZMoveStatus) {\n ZMoveStatus[ZMoveStatus[\"inactive\"] = 0] = \"inactive\";\n ZMoveStatus[ZMoveStatus[\"counteractive\"] = 1] = \"counteractive\";\n ZMoveStatus[ZMoveStatus[\"active\"] = 2] = \"active\";\n})(ZMoveStatus || (ZMoveStatus = {}));\nconst ZMOVE_ACTIVE_MULTIPLIER = 1.5;\nconst ZMOVE_COUNTERACTIVE_MULTIPLIER = 0.75;\nconst ZMOVE_ACTIVE_TIME = 1 * MINUTE;\nconst ZMOVE_COUNTERACTIVE_TIME = 4 * MINUTE;\nvar ContestResults;\n(function (ContestResults) {\n ContestResults[ContestResults[\"Normal\"] = 0] = \"Normal\";\n ContestResults[ContestResults[\"Super\"] = 1] = \"Super\";\n ContestResults[ContestResults[\"Hyper\"] = 2] = \"Hyper\";\n ContestResults[ContestResults[\"Master\"] = 3] = \"Master\";\n})(ContestResults || (ContestResults = {}));\nvar ContestStyle;\n(function (ContestStyle) {\n ContestStyle[ContestStyle[\"Cool\"] = 0] = \"Cool\";\n ContestStyle[ContestStyle[\"Beautiful\"] = 1] = \"Beautiful\";\n ContestStyle[ContestStyle[\"Cute\"] = 2] = \"Cute\";\n ContestStyle[ContestStyle[\"Clever\"] = 3] = \"Clever\";\n ContestStyle[ContestStyle[\"Tough\"] = 4] = \"Tough\";\n})(ContestStyle || (ContestStyle = {}));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/GameConstants.ts?"); + +/***/ }), + +/***/ "./src/modules/GameHelper.ts": +/*!***********************************!*\ + !*** ./src/modules/GameHelper.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GameHelper)\n/* harmony export */ });\n// For helper functions that may be needed across all files\n// TODO: Convert this to not be a class after everything is TS modules\nclass GameHelper {\n static incrementObservable(obs, amt = 1) {\n if (typeof obs !== 'function') {\n return;\n }\n const trueAmount = (Number.isNaN(amt) || amt === 0) ? 1 : amt;\n obs(obs() + trueAmount);\n }\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n static enumLength(enumerable) {\n return Object.keys(enumerable).length / 2;\n }\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n static enumStrings(enumerable) {\n return Object.keys(enumerable).filter((k) => Number.isNaN(Number(k)));\n }\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n static enumNumbers(enumerable) {\n return Object.keys(enumerable).map(Number).filter((k) => !Number.isNaN(k));\n }\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n static enumSelectOption(enumerable) {\n return Object.keys(enumerable).filter((k) => Number.isNaN(Number(k))).map((key) => ({ name: key, value: enumerable[key] }));\n }\n // default value as a function so objects/arrays as defaults creates a new one for each key\n static objectFromEnumStrings(enumerable, defaultValue) {\n return this.enumStrings(enumerable).reduce((keys, type) => (Object.assign(Object.assign({}, keys), { [type]: defaultValue() })), {});\n }\n static tick() {\n this.counter = 0;\n GameHelper.currentTime(new Date());\n }\n static updateDay() {\n const now = new Date();\n if (now.getDate() !== GameHelper.today().getDate()) {\n GameHelper.today(GameHelper.getToday());\n }\n }\n static formatAmount(n) {\n if (n >= 1e9) {\n return `${Math.floor(n / 1e9)}b`;\n }\n if (n >= 1e6) {\n return `${Math.floor(n / 1e6)}m`;\n }\n if (n >= 1e3) {\n return `${Math.floor(n / 1e3)}k`;\n }\n return `${n}`;\n }\n static getIndexFromDistribution(a) {\n const rand = Math.random();\n for (let i = 0; i < a.length; i += 1) {\n if (rand <= a[i]) {\n return i;\n }\n }\n // If none matched for whatever reason (should never happen) return the\n // last index\n return a.length - 1;\n }\n static createArray(start, max, step) {\n const array = [];\n for (let i = start; i <= max; i += step) {\n array.push(i);\n }\n return array;\n }\n // Filter out any falsy values from the end of an array\n static filterArrayEnd(arr) {\n let check = false;\n return [...arr].reverse().filter((v) => {\n check = check || !!v;\n return check;\n }).reverse();\n }\n static anOrA(name) {\n return ['a', 'e', 'i', 'o', 'u'].includes(name[0].toLowerCase()) ? 'an' : 'a';\n }\n static shallowEqual(object1, object2) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n return keys1.every((key) => object1[key] === object2[key]);\n }\n // Find the largest integer between min and max that does not return true when passed to testTooHigh, using a binary search\n static binarySearch(testTooHigh, min, max) {\n if (max - min <= 1)\n return min;\n const mid = Math.floor((max + min) / 2);\n const [newMin, newMax] = testTooHigh(mid) ? [min, mid] : [mid, max];\n return this.binarySearch(testTooHigh, newMin, newMax);\n }\n static chunk(size, array) {\n let i = 0;\n let residx = 0;\n const res = [];\n while (i < array.length) {\n res[residx] = array.slice(i, i += size);\n residx += 1;\n }\n return res;\n }\n static saveFileName(nameFormat, changes, isBackup = false) {\n return `${Object.entries(changes).reduce((filename, [format, value]) => filename.replace(format, value), nameFormat)}${isBackup ? ' Backup' : ''}.txt`;\n }\n static escapeStringRegex(s) {\n return s.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n static safelyBuildRegex(pattern, allowRaw = true, flags = 'i') {\n if (allowRaw && /^\\/.+\\/$/.test(pattern)) {\n // pattern is a string representation of regex e.g. /pattern/, remove the slashes\n const rawPattern = pattern.slice(1, -1);\n try {\n return new RegExp(rawPattern, flags);\n }\n catch (_a) {\n return new RegExp(GameHelper.escapeStringRegex(rawPattern), flags);\n }\n }\n else {\n return new RegExp(GameHelper.escapeStringRegex(pattern), flags);\n }\n }\n static twoDigitNumber(n) {\n // For use in clocks / showing time\n // Turns 4 into 04, does nothing to 23, turns 173 into 73\n return (`0${n}`).slice(-2);\n }\n static getToday() {\n const today = new Date();\n today.setHours(0);\n today.setMinutes(0);\n today.setSeconds(0);\n today.setMilliseconds(0);\n return today;\n }\n // Check if HTML container with the given ID is overflowing horizontally\n static isOverflownX(htmlID) {\n const element = document.querySelector(htmlID);\n return element.scrollWidth > element.clientWidth;\n }\n // Get scroll bar size (in pixels)\n static getScrollBarSize() {\n var $outer = $('
').css({ visibility: 'hidden', width: 100, overflow: 'scroll' }).appendTo('body'), widthWithScroll = $('
').css({ width: '100%' }).appendTo($outer).outerWidth();\n $outer.remove();\n return 100 - widthWithScroll;\n }\n /**\n * Insecure hash, but should keep some of the nosy people out.\n * @param text\n */\n static hash(text) {\n let hash = 0;\n let i = 0;\n let chr = 0;\n if (text.length === 0) {\n return hash;\n }\n for (i = 0; i < text.length; i++) {\n chr = text.charCodeAt(i);\n // eslint-disable-next-line no-bitwise\n hash = ((hash << 5) - hash) + chr;\n // eslint-disable-next-line no-bitwise\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n }\n static isColorLight(color) {\n const r = parseInt(color.substring(1, 3), 16), g = parseInt(color.substring(3, 5), 16), b = parseInt(color.substring(5), 16);\n const grey = r * 0.299 + g * 0.587 + b * 0.114; // Range between 0 and 255, based on NTSC formula.\n return grey > 127;\n }\n static isDevelopmentBuild() {\n // This was done like this so es/tslint doesn't throw errors\n try {\n return !!JSON.parse('true');\n }\n catch (e) {\n return false;\n }\n }\n static focusedOnEditableElement() {\n const activeEl = document.activeElement;\n const localName = activeEl.localName.toLowerCase();\n const editables = ['textarea', 'input', 'select'];\n return (editables.includes(localName) || activeEl.isContentEditable);\n }\n}\nGameHelper.counter = 0;\nGameHelper.currentTime = ko.observable(new Date());\nGameHelper.today = ko.observable(GameHelper.getToday());\nGameHelper.tomorrow = ko.pureComputed(() => {\n const tomorrow = new Date(GameHelper.today());\n tomorrow.setDate(tomorrow.getDate() + 1);\n return tomorrow;\n});\nGameHelper.msUntilTomorrow = ko.pureComputed(() => Number(GameHelper.tomorrow()) - Number(GameHelper.currentTime()));\nGameHelper.formattedTimeUntilTomorrow = ko.pureComputed(() => {\n let milliseconds = GameHelper.msUntilTomorrow();\n const hours = Math.floor(milliseconds / GameHelper.MS_IN_HOUR);\n milliseconds -= hours * GameHelper.MS_IN_HOUR;\n const minutes = Math.floor(milliseconds / GameHelper.MS_IN_MIN);\n return `${hours}:${GameHelper.twoDigitNumber(minutes)}`;\n});\nGameHelper.formattedLetterTimeUntilTomorrow = ko.pureComputed(() => {\n let milliseconds = GameHelper.msUntilTomorrow();\n const hours = Math.floor(milliseconds / GameHelper.MS_IN_HOUR);\n milliseconds -= hours * GameHelper.MS_IN_HOUR;\n const minutes = Math.floor(milliseconds / GameHelper.MS_IN_MIN);\n return `${hours}h${GameHelper.twoDigitNumber(minutes)}m`;\n});\nGameHelper.MS_IN_MIN = 1000 * 60;\nGameHelper.MS_IN_HOUR = GameHelper.MS_IN_MIN * 60;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/GameHelper.ts?"); + +/***/ }), + +/***/ "./src/modules/SaveSelector.ts": +/*!*************************************!*\ + !*** ./src/modules/SaveSelector.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SaveSelector)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _profile_Profile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./profile/Profile */ \"./src/modules/profile/Profile.ts\");\n/* harmony import */ var _Sortable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Sortable */ \"./src/modules/Sortable.ts\");\n/* harmony import */ var _settings_index__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settings/index */ \"./src/modules/settings/index.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\n\n\n\n\nclass SaveSelector {\n static loadSaves() {\n const container = document.querySelector('#saveSelector .save-container');\n const saves = Object.keys(localStorage).filter((k) => k.startsWith('save'));\n saves.forEach((saveKey) => {\n container.appendChild(SaveSelector.getTrainerCard(saveKey.replace(/^save/, '')));\n });\n if (saves.length >= this.MAX_SAVES) {\n const newImportButton = document.querySelector('#saveSelector .new-import-buttons');\n newImportButton.style.display = 'none';\n }\n $('[data-toggle=\"tooltip\"]').tooltip();\n const showContextMenu = (top, left, key) => {\n $('#saveSelectorContextMenu').html(`\n Download (backup)\n Load\n \n Delete\n `).css({\n display: 'block',\n position: 'absolute',\n top,\n left,\n }).addClass('show');\n };\n $(container).on('contextmenu', '.trainer-card.clickable', (e) => {\n const { key } = e.currentTarget.dataset;\n if (key) {\n showContextMenu(e.pageY, e.pageX, key);\n return false; // blocks default Webbrowser right click menu\n }\n return true;\n });\n $(container).on('click', '.context-menu-button', (e) => {\n const { key } = e.currentTarget.closest('.trainer-card.clickable').dataset;\n if (key) {\n showContextMenu(e.pageY, e.pageX, key);\n return false;\n }\n return true;\n });\n $('#saveSelector, #context-menu a').on('click', () => {\n $('#saveSelectorContextMenu').removeClass('show').hide();\n });\n // Sort our saves\n (0,_Sortable__WEBPACK_IMPORTED_MODULE_4__.SortSaves)();\n $(document).on('keydown', this.LoadSaveOnKeydown);\n }\n static LoadSaveOnKeydown(e) {\n if (_GameHelper__WEBPACK_IMPORTED_MODULE_6__[\"default\"].focusedOnEditableElement()) {\n return;\n }\n const key = parseInt(e.key);\n if (!isNaN(key)) {\n const chosenSave = key - 1;\n const allSaves = $('.trainer-card');\n if (allSaves.length > chosenSave && chosenSave >= 0) {\n $(document).off(e);\n allSaves[chosenSave].click();\n }\n }\n }\n static getTrainerCard(key) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;\n try {\n const rawData = localStorage.getItem(`save${key}`);\n const saveData = JSON.parse(rawData);\n const playerData = JSON.parse(localStorage.getItem(`player${key}`));\n let username = (_b = (_a = saveData.profile) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : 'Trainer';\n try {\n username = (_d = (_c = saveData.profile) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : 'Trainer';\n }\n catch (e) {\n console.warn('Unable to parse username');\n }\n return _profile_Profile__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getTrainerCard(username, (_e = saveData.profile) === null || _e === void 0 ? void 0 : _e.trainer, (_g = (_f = saveData.profile) === null || _f === void 0 ? void 0 : _f.pokemon) !== null && _g !== void 0 ? _g : (_h = saveData.party.caughtPokemon[0]) === null || _h === void 0 ? void 0 : _h.id, (_k = (_j = saveData.profile) === null || _j === void 0 ? void 0 : _j.pokemonShiny) !== null && _k !== void 0 ? _k : (_l = saveData.party.caughtPokemon[0]) === null || _l === void 0 ? void 0 : _l.shiny, (_o = (_m = saveData.profile) === null || _m === void 0 ? void 0 : _m.pokemonFemale) !== null && _o !== void 0 ? _o : false, (_p = saveData.profile) === null || _p === void 0 ? void 0 : _p.background, (_q = saveData.profile) === null || _q === void 0 ? void 0 : _q.textColor, (_t = (_s = (_r = saveData.badgeCase) === null || _r === void 0 ? void 0 : _r.filter((b) => b)) === null || _s === void 0 ? void 0 : _s.length) !== null && _t !== void 0 ? _t : 0, (_w = (_v = (_u = saveData.party) === null || _u === void 0 ? void 0 : _u.caughtPokemon) === null || _v === void 0 ? void 0 : _v.length) !== null && _w !== void 0 ? _w : 0, (_y = (_x = saveData.statistics) === null || _x === void 0 ? void 0 : _x.secondsPlayed) !== null && _y !== void 0 ? _y : 0, (_0 = (_z = saveData.update) === null || _z === void 0 ? void 0 : _z.version) !== null && _0 !== void 0 ? _0 : 'Unknown', (_2 = (_1 = saveData.challenges) === null || _1 === void 0 ? void 0 : _1.list) !== null && _2 !== void 0 ? _2 : {}, playerData.trainerId, key);\n }\n catch (e) {\n // eslint-disable-next-line no-console\n console.log(`[${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.formatDate)(new Date())}] %cFailed to load save:`, 'color:#e74c3c;font-weight:900;', key, e);\n return document.createElement('div');\n }\n }\n static btoa(saveString) {\n return btoa(saveString.replace(/[^\\u0000-\\u00FF]+|%/g, (m) => encodeURI(m)));\n }\n static atob(encodeString) {\n const decodeString = atob(encodeString);\n try {\n return decodeURI(decodeString);\n }\n catch (_a) {\n // Fix missing encodeURI in v0.10.11\n try {\n const URIfixData = JSON.parse(decodeString);\n URIfixData.save.pokeballFilters.list.forEach((i) => {\n i.name = encodeURI(i.name);\n });\n return decodeURI(JSON.stringify(URIfixData));\n }\n catch (_b) {\n return decodeString;\n }\n }\n }\n static Download(key) {\n var _a;\n try {\n // Load save data\n const saveData = JSON.parse(localStorage[`save${key}`]);\n const playerData = JSON.parse(localStorage[`player${key}`]);\n const settingsData = JSON.parse((_a = localStorage[`settings${key}`]) !== null && _a !== void 0 ? _a : localStorage.settings);\n // If we are missing any data, don't download the save\n if (!saveData || !playerData || !settingsData) {\n throw new Error('Missing save data..');\n }\n const data = {\n save: saveData,\n player: playerData,\n settings: settingsData,\n };\n // Create a download element\n const element = document.createElement('a');\n element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(this.btoa(JSON.stringify(data)))}`);\n const filename = settingsData.saveFilename || _settings_index__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getSetting('saveFilename').defaultValue;\n const datestr = (0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.formatDate)(new Date());\n element.setAttribute('download', _GameHelper__WEBPACK_IMPORTED_MODULE_6__[\"default\"].saveFileName(filename, { '{date}': datestr, '{version}': saveData.update.version, '{name}': saveData.profile.name }));\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n }\n catch (err) {\n console.error('Error trying to download save', err);\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n title: 'Failed to download save data',\n message: 'Please check the console for errors, and report them on our Discord.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.primary,\n timeout: 6e4,\n });\n }\n }\n}\nSaveSelector.MAX_SAVES = 9;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/SaveSelector.ts?"); + +/***/ }), + +/***/ "./src/modules/Sortable.ts": +/*!*********************************!*\ + !*** ./src/modules/Sortable.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SortModules\": () => (/* binding */ SortModules),\n/* harmony export */ \"SortSaves\": () => (/* binding */ SortSaves)\n/* harmony export */ });\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _settings_Settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settings/Settings */ \"./src/modules/settings/Settings.ts\");\n/* harmony import */ var _settings_Setting__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/Setting */ \"./src/modules/settings/Setting.ts\");\n\n\n\nconst columns = ['left-column', 'left-column-2', 'middle-top-sort-column', 'middle-bottom-sort-column', 'right-column', 'right-column-2'];\n// Create the settings to be loaded/saved\ncolumns.forEach((column) => {\n _settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].add(new _settings_Setting__WEBPACK_IMPORTED_MODULE_2__[\"default\"](`modules.${column}`, `Modules sort order ${column}`, [], ''));\n});\nconst SortModules = () => {\n // Enable sorting of items\n columns.forEach((column) => {\n sortablejs__WEBPACK_IMPORTED_MODULE_0__[\"default\"].create(document.getElementById(column), {\n animation: 100,\n group: 'main-sortable',\n draggable: '.card.sortable',\n handle: '.card-header',\n dataIdAttr: 'id',\n sort: true,\n delay: 500,\n delayOnTouchOnly: true,\n touchStartThreshold: 20,\n store: {\n get: null,\n set: (sortable) => {\n const order = sortable.toArray();\n _settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingByName(`modules.${column}`, order.join('|'));\n // Clear out whitespace\n if (/^([\\s\\r\\n\\t]|)+$/.test(sortable.el.innerHTML)) {\n // eslint-disable-next-line no-param-reassign\n sortable.el.innerHTML = '';\n }\n },\n },\n onSort: (evt) => {\n const currentSortable = evt.to[Object.keys(evt.to)[0]];\n const order = currentSortable.toArray();\n _settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingByName(`modules.${column}`, order.join('|'));\n },\n });\n });\n // Sort the items between columns, in order\n columns.forEach((sortable) => {\n const parent = document.getElementById(sortable);\n const itemOrder = _settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSetting(`modules.${sortable}`).observableValue();\n const itemOrderArr = itemOrder ? itemOrder.split('|') : [];\n let prevItem;\n itemOrderArr.forEach((item) => {\n const child = document.getElementById(item);\n // If the element doesn't exist anymore, skip it\n if (!child) {\n return;\n }\n if (!prevItem) {\n parent.insertBefore(child, parent.firstChild);\n }\n else {\n const prevChild = document.getElementById(prevItem);\n prevChild.parentNode.insertBefore(child, prevChild.nextSibling);\n }\n prevItem = item;\n });\n });\n // Clear out whitespace\n columns.forEach((sortable) => {\n const el = document.getElementById(sortable);\n if (/^([\\s\\r\\n\\t]|)+$/.test(el.innerHTML)) {\n el.innerHTML = '';\n }\n });\n};\nconst SortSaves = () => {\n // Enable sorting of saves\n const settingName = 'sort.saveSelector';\n sortablejs__WEBPACK_IMPORTED_MODULE_0__[\"default\"].create(document.querySelector('#saveSelector .save-container'), {\n animation: 100,\n group: settingName,\n draggable: '.trainer-card-container',\n handle: '.trainer-card',\n dataIdAttr: 'data-key',\n sort: true,\n delay: 500,\n delayOnTouchOnly: true,\n touchStartThreshold: 20,\n store: {\n get: () => {\n const order = _settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSetting(settingName).observableValue();\n return order ? order.split('|') : [];\n },\n set: (sortable) => {\n const order = sortable.toArray();\n _settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingByName(settingName, order.join('|'));\n _settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].saveDefault();\n },\n },\n });\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/Sortable.ts?"); + +/***/ }), + +/***/ "./src/modules/achievements/Achievement.ts": +/*!*************************************************!*\ + !*** ./src/modules/achievements/Achievement.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Achievement)\n/* harmony export */ });\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../logbook/LogBookTypes */ \"./src/modules/logbook/LogBookTypes.ts\");\n/* harmony import */ var _logbook_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../logbook/helpers */ \"./src/modules/logbook/helpers.ts\");\n\n\n\n\nclass Achievement {\n constructor(name, description, property, bonusWeight, category, achievableFunction = null) {\n this.name = name;\n this.description = description;\n this.property = property;\n this.bonusWeight = bonusWeight;\n this.category = category;\n this.achievableFunction = achievableFunction;\n this.isCompleted = ko.pureComputed(() => this.achievable() && (this.unlocked() || this.property.isCompleted()));\n this.getProgressText = ko.pureComputed(() => `${this.getProgress().toLocaleString('en-US')} / ${this.property.requiredValue.toLocaleString('en-US')}`);\n this.bonus = 0;\n this.unlocked = ko.observable(false);\n }\n check() {\n if (this.isCompleted() && !this.unlocked()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__[\"default\"].notify({\n title: `[Achievement] ${this.name}`,\n message: this.description,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_0__[\"default\"].NotificationOption.warning,\n timeout: 1e4,\n sound: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_0__[\"default\"].NotificationSound.General.achievement,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_0__[\"default\"].NotificationSetting.General.achievement_complete,\n });\n App.game.logbook.newLog(_logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_2__.LogBookTypes.ACHIEVE, _logbook_helpers__WEBPACK_IMPORTED_MODULE_3__.createLogContent.earnedAchievement({ name: this.name }));\n this.unlocked(true);\n if (this === App.game.achievementTracker.trackedAchievement()) {\n App.game.achievementTracker.nextAchievement();\n }\n // TODO: refilter within achievement bonus\n // AchievementHandler.filterAchievementList(true);\n return true;\n }\n return false;\n }\n getProgress() {\n return this.isCompleted() ? this.property.requiredValue : this.property.getProgress();\n }\n getProgressPercentage() {\n return this.isCompleted() ? '100.0' : this.property.getProgressPercentage();\n }\n getBonus() {\n return this.bonus.toFixed(2);\n }\n achievable() {\n if (typeof this.achievableFunction === 'function') {\n return this.achievableFunction();\n }\n return true;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/achievements/Achievement.ts?"); + +/***/ }), + +/***/ "./src/modules/achievements/AchievementCategory.ts": +/*!*********************************************************!*\ + !*** ./src/modules/achievements/AchievementCategory.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AchievementCategory)\n/* harmony export */ });\nclass AchievementCategory {\n constructor(name, achievementBonus, isUnlocked) {\n this.name = name;\n this.achievementBonus = achievementBonus;\n this.isUnlocked = isUnlocked;\n this.totalWeight = 0;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/achievements/AchievementCategory.ts?"); + +/***/ }), + +/***/ "./src/modules/achievements/AchievementSortOptions.ts": +/*!************************************************************!*\ + !*** ./src/modules/achievements/AchievementSortOptions.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AchievementSortOptionConfigs\": () => (/* binding */ AchievementSortOptionConfigs),\n/* harmony export */ \"AchievementSortOptions\": () => (/* binding */ AchievementSortOptions)\n/* harmony export */ });\nvar AchievementSortOptions;\n(function (AchievementSortOptions) {\n AchievementSortOptions[AchievementSortOptions[\"default\"] = 0] = \"default\";\n AchievementSortOptions[AchievementSortOptions[\"progress\"] = 1] = \"progress\";\n AchievementSortOptions[AchievementSortOptions[\"bonus\"] = 2] = \"bonus\";\n})(AchievementSortOptions || (AchievementSortOptions = {}));\nconst AchievementSortOptionConfigs = {\n [AchievementSortOptions.default]: {\n text: 'Default',\n getValue: () => null,\n },\n [AchievementSortOptions.progress]: {\n text: 'Progress',\n getValue: (a) => parseFloat(a.getProgressPercentage()),\n },\n [AchievementSortOptions.bonus]: {\n text: 'Bonus %',\n getValue: (a) => a.bonus,\n },\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/achievements/AchievementSortOptions.ts?"); + +/***/ }), + +/***/ "./src/modules/background/DynamicBackground.ts": +/*!*****************************************************!*\ + !*** ./src/modules/background/DynamicBackground.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DynamicBackground)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pokemons/PokemonList */ \"./src/modules/pokemons/PokemonList.ts\");\n/* harmony import */ var _utilities_Rand__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utilities/Rand */ \"./src/modules/utilities/Rand.ts\");\n/* eslint-disable @typescript-eslint/member-ordering */\n\n\n\nclass DynamicBackground {\n}\n/* SUN & MOON */\nDynamicBackground.setSunMoonPosition = (date = new Date()) => {\n const h = window.innerHeight;\n const w = window.innerWidth / 1.2;\n // Get the hours and minutes.\n const hours = date.getHours();\n const mins = date.getMinutes();\n // Calculate the position of the sun and moon based on the time.\n const sunRad = (((hours) * 60 + mins) / (24 * 60)) * Math.PI * 2;\n const moonRad = (((hours + 12) * 60 + mins) / (24 * 60)) * Math.PI * 2;\n // Calculate the axis\n const sunX = (w / 1.8) - (w * Math.sin(sunRad)) / 2;\n const sunY = (h / 2) + (h * Math.cos(sunRad)) / 2;\n const moonX = (w / 1.8) - (w * Math.sin(moonRad)) / 2;\n const moonY = (h / 1.4) + (h * Math.cos(moonRad)) / 2;\n // Apply the positions based on our previous calculations\n const sun = document.getElementById('sun');\n sun.style.top = `${sunY}px`;\n sun.style.left = `${sunX}px`;\n const moon = document.getElementById('moon');\n moon.style.top = `${moonY}px`;\n moon.style.left = `${moonX}px`;\n};\n/* SKY & GROUND */\nDynamicBackground.updateBackgrounds = (d = new Date()) => {\n const hour = d.getHours();\n const minutes = d.getMinutes();\n const bgNumber = DynamicBackground.getPicture(hour);\n // Determine starting background images:\n const bgNumberNext = (bgNumber + 1) % 12;\n // Get opacity (i.e. how far (in percentage) are we in a certain time-block):\n // Every block is 2 hours, so 1 hour into a block would be 50% (0.50)\n // If we are in an even hour add 50%\n let opacity = hour % 2 ? 0 : 0.5;\n // Every minute would be 1/120th of a block (minutes / 120)\n opacity += minutes / 120;\n // Set sky image\n document.getElementById('sky1').classList.value = `sky sky-${bgNumber}`;\n document.getElementById('sky2').style.opacity = opacity.toString();\n document.getElementById('sky2').classList.value = `sky sky-${bgNumberNext}`;\n // Set ground image\n document.getElementById('ground1').classList.value = `ground ground-${bgNumber}`;\n document.getElementById('ground2').style.opacity = opacity.toString();\n document.getElementById('ground2').classList.value = `ground ground-${bgNumberNext}`;\n};\n// Determines the images to use based on the current hour\nDynamicBackground.getPicture = (hour) => (hour ? Math.floor((hour - 1) / 2) : 11);\n/* POKEMON */\n// All the flying pokemon IDs (these pokemon can spawn in the sky)\nDynamicBackground.flyingPokemon = [\n 12, 15, 17, 18, 22, 41, 42, 49, 81, 82, 92, 93, 109, 110, 142, 144, 145, 146, 149, 151,\n 164, 165, 166, 169, 176, 187, 188, 189, 193, 200, 206, 207, 227, 249, 250, 251,\n 267, 269, 277, 278, 279, 284, 291, 292, 313, 329, 330, 333, 334, 353, 358, 380, 381, 384, 385,\n 397, 398, 414, 415, 416, 425, 426, 429, 433, 462, 468, 469, 472, 479, 480, 481, 482, 488, 491,\n 517, 518, 519, 520, 521, 527, 528, 561, 567, 581, 587, 628, 630, 635, 637, 641, 642, 643, 644, 645, 646,\n 662, 663, 666, 707, 708, 714, 715, 717,\n 732, 738, 742, 743, 785, 786, 787, 788, 789, 792, 793, 801, 804,\n 822, 823, 826, 841, 854, 855, 873, 885, 886, 887, 890,\n 905,\n];\nDynamicBackground.MIN_SPEED_STAT = 20;\nDynamicBackground.MAX_SPEED_STAT = 180;\nDynamicBackground.MAX_SPEED = 10;\n// Add a pokemon to the scene\nDynamicBackground.addPokemon = (id) => {\n const pokemonSpeed = _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_1__.pokemonMap[id].base.speed;\n let moveSpeed = Math.floor(((pokemonSpeed - DynamicBackground.MIN_SPEED_STAT) / (DynamicBackground.MAX_SPEED_STAT - DynamicBackground.MIN_SPEED_STAT)) * DynamicBackground.MAX_SPEED);\n // Adjust speed by -1 → +1 randomly\n moveSpeed += _utilities_Rand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].intBetween(-1, 1);\n moveSpeed = Math.max(0, Math.min(DynamicBackground.MAX_SPEED, moveSpeed));\n const flying = DynamicBackground.flyingPokemon.includes(id);\n const shiny = _utilities_Rand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].chance(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.SHINY_CHANCE_BREEDING);\n const pokeElement = document.createElement('div');\n pokeElement.style.bottom = flying ? `${_utilities_Rand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].intBetween(20, 90)}vh` : `${_utilities_Rand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].intBetween(5, 15)}vh`;\n pokeElement.style.backgroundImage = `${shiny ? 'url(\\'assets/images/dynamic-background/pokemon/sparkle.png\\'), ' : ''}url('assets/images/dynamic-background/pokemon/${id.toString()}${shiny ? 's' : ''}.png')`;\n pokeElement.classList.add('pokemonSprite');\n pokeElement.classList.add(`speed-${moveSpeed}`);\n document.getElementById('dynamic-background').appendChild(pokeElement);\n setTimeout(() => {\n document.getElementById('dynamic-background').removeChild(pokeElement);\n }, 2 * _GameConstants__WEBPACK_IMPORTED_MODULE_0__.MINUTE);\n};\nDynamicBackground.startAddingPokemon = () => {\n // Random delay up to 10 seconds\n const delay = _utilities_Rand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].intBetween(0, 10 * _GameConstants__WEBPACK_IMPORTED_MODULE_0__.SECOND);\n // Assign our timeout function so we can stop it later\n DynamicBackground.addPokemonTimeout = setTimeout(() => {\n // limited to players highest region\n DynamicBackground.addPokemon(_utilities_Rand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].intBetween(1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.MaxIDPerRegion[(player === null || player === void 0 ? void 0 : player.highestRegion()) || _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region.kanto]));\n // Add another pokemon\n DynamicBackground.startAddingPokemon();\n }, delay);\n};\nDynamicBackground.stopAddingPokemon = () => {\n clearTimeout(DynamicBackground.addPokemonTimeout);\n};\nDynamicBackground.updateScene = (date = new Date()) => {\n try {\n DynamicBackground.setSunMoonPosition(date);\n DynamicBackground.updateBackgrounds(date);\n }\n catch (e) {\n console.error(e);\n }\n};\nDynamicBackground.startScene = () => {\n // Start adding the Pokemon images (manages it's own timer)\n DynamicBackground.startAddingPokemon();\n // Update the background now then every minute\n DynamicBackground.updateScene();\n DynamicBackground.autoUpdateScene = setInterval(DynamicBackground.updateScene, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.MINUTE);\n};\nDynamicBackground.stopScene = () => {\n // Stop adding the pokemon images\n DynamicBackground.stopAddingPokemon();\n // Stop updating background images\n clearInterval(DynamicBackground.autoUpdateScene);\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/background/DynamicBackground.ts?"); + +/***/ }), + +/***/ "./src/modules/breeding/EggType.ts": +/*!*****************************************!*\ + !*** ./src/modules/breeding/EggType.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar EggType;\n(function (EggType) {\n EggType[EggType[\"None\"] = -1] = \"None\";\n EggType[EggType[\"Fire\"] = 0] = \"Fire\";\n EggType[EggType[\"Water\"] = 1] = \"Water\";\n EggType[EggType[\"Grass\"] = 2] = \"Grass\";\n EggType[EggType[\"Fighting\"] = 3] = \"Fighting\";\n EggType[EggType[\"Electric\"] = 4] = \"Electric\";\n EggType[EggType[\"Dragon\"] = 5] = \"Dragon\";\n EggType[EggType[\"Pokemon\"] = 6] = \"Pokemon\";\n EggType[EggType[\"Mystery\"] = 7] = \"Mystery\";\n EggType[EggType[\"Fossil\"] = 8] = \"Fossil\";\n})(EggType || (EggType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EggType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/breeding/EggType.ts?"); + +/***/ }), + +/***/ "./src/modules/challenges/Challenge.ts": +/*!*********************************************!*\ + !*** ./src/modules/challenges/Challenge.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Challenge)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/NotificationOption */ \"./src/modules/notifications/NotificationOption.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\nclass Challenge {\n constructor(type, description, active = false) {\n this.type = type;\n this.description = description;\n this.active = ko.observable(active);\n }\n activate() {\n this.active(true);\n }\n disable() {\n return __awaiter(this, void 0, void 0, function* () {\n // If the player hasn't selected a starter yet, no need to confirm\n if (player.regionStarters[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region.kanto]() === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Starter.None) {\n this.active(false);\n return;\n }\n // Confirm they want to disable the challenge mode\n if (yield _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__[\"default\"].confirm({\n title: 'DISABLE CHALLENGE',\n message: `

Warning: Disabling \"${this.type}\" challenge is permanent.

Are you sure you want to continue?

`,\n confirm: 'Permanently disable',\n type: _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"].danger,\n })) {\n this.active(false);\n }\n });\n }\n toJSON() {\n return this.active();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/challenges/Challenge.ts?"); + +/***/ }), + +/***/ "./src/modules/challenges/Challenges.ts": +/*!**********************************************!*\ + !*** ./src/modules/challenges/Challenges.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Challenges)\n/* harmony export */ });\n/* harmony import */ var _Challenge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Challenge */ \"./src/modules/challenges/Challenge.ts\");\n\nclass Challenges {\n constructor() {\n this.saveKey = 'challenges';\n this.defaults = {};\n this.list = {\n regionalAttackDebuff: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('Regional Attack Debuff (recommended)', 'Lowers Pokémon attack based on native region and highest-reached region', true),\n requireCompletePokedex: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('Require Complete Pokédex (recommended)', 'Requires a complete regional Pokédex before moving on to the next region', true),\n disableClickAttack: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('No Click Attack', 'Disables the ability to use Click Attacks'),\n disableBattleItems: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('No Battle Items', 'Disables the usage of Battle Items'),\n disableMasterballs: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('No Master Balls', 'Disables the usage of Master Balls'),\n disableOakItems: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('No Oak Items', 'Disables the usage of all Oak Items'),\n disableGems: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('No Gem Upgrades', 'Disables the usage of Gems to increase type effectiveness'),\n disableVitamins: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('No Vitamins', 'Disables the usage of Vitamins'),\n slowEVs: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('Slow EVs', 'Gain EVs 10x slower'),\n realEvolutions: new _Challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('Real Evolution', 'Your Pokémon go away when they evolve'),\n };\n }\n fromJSON(json) {\n if (!json || !json.list) {\n return;\n }\n Object.entries(json.list).forEach(([challenge, value]) => {\n var _a;\n (_a = this.list[challenge]) === null || _a === void 0 ? void 0 : _a.active(!!value);\n });\n }\n toJSON() {\n const list = {};\n Object.entries(this.list).forEach(([c, v]) => {\n list[c] = v.active();\n });\n return {\n list,\n };\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/challenges/Challenges.ts?"); + +/***/ }), + +/***/ "./src/modules/changelog/Changelog.ts": +/*!********************************************!*\ + !*** ./src/modules/changelog/Changelog.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ChangeLogType\": () => (/* binding */ ChangeLogType),\n/* harmony export */ \"changelogType\": () => (/* binding */ changelogType),\n/* harmony export */ \"default\": () => (/* binding */ Changelog)\n/* harmony export */ });\nvar ChangeLogType;\n(function (ChangeLogType) {\n ChangeLogType[ChangeLogType[\"DEFAULT\"] = 0] = \"DEFAULT\";\n ChangeLogType[ChangeLogType[\"UPDATE\"] = 1] = \"UPDATE\";\n ChangeLogType[ChangeLogType[\"NEW\"] = 2] = \"NEW\";\n ChangeLogType[ChangeLogType[\"CHANGE\"] = 3] = \"CHANGE\";\n ChangeLogType[ChangeLogType[\"FIXED\"] = 4] = \"FIXED\";\n ChangeLogType[ChangeLogType[\"REMOVED\"] = 5] = \"REMOVED\";\n ChangeLogType[ChangeLogType[\"EVENT\"] = 6] = \"EVENT\";\n})(ChangeLogType || (ChangeLogType = {}));\nconst changelogType = {\n UPDATE: { display: 'dark', label: 'UPDATE' },\n NEW: { display: 'success', label: 'NEW' },\n CHANGE: { display: 'primary', label: 'CHANGE' },\n FIXED: { display: 'warning', label: 'FIXED' },\n REMOVED: { display: 'danger', label: 'REMOVED' },\n EVENT: { display: 'info', label: 'EVENT' },\n DEFAULT: { display: 'default', label: '-' }, // unused - can be changed\n};\nclass Changelog {\n constructor(type = changelogType.DEFAULT, description = '') {\n this.type = type;\n this.description = description;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/changelog/Changelog.ts?"); + +/***/ }), + +/***/ "./src/modules/changelog/ChangelogItems.ts": +/*!*************************************************!*\ + !*** ./src/modules/changelog/ChangelogItems.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _Changelog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Changelog */ \"./src/modules/changelog/Changelog.ts\");\n/* harmony import */ var _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ChangelogUpdate */ \"./src/modules/changelog/ChangelogUpdate.ts\");\n\n\n/**\n * Add your changes to the top of the changelog. Please do not increase the version number.\n *\n * MAJOR - Will stay at 0 during development, 1 after the first public release\n * MINOR - Will increment for each feature refactor or large changes to a feature\n * PATCH - Increment for small changes, bugfixes, UI changes.\n */\nconst ChangelogItems = [\n // note that month is 0 indexed\n // v0.10.21\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.21', new Date(2024, 6, 9)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Ability to view route Pokémon encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Ability to view loot available in a dungeon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Setting to disable the flashing animation before traveling to a new region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Renamed Ditto (Transforming) to Ditto (Magikarp)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added Pokémon name translations to several additional locations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Removed Z-Power Ring from Key Items list as it is not yet obtainable'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Effect of Petaya berry will be shown with altered berry growth times'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Miscellaneous text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Crash while loading when certain conditions were met'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokéballs going negative while catching farm wanderers'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Lucky Punch held item not available until Galar'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm module sometimes not rendering after being disabled and re-enabled'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Treasure Scanner notifications not respecting the underground item found notification setting'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Accidentally leaving a dungeon and firing a Dungeon Guide while clicking'),\n // v0.10.20\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.20', new Date(2024, 5, 19)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Quest Lines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Dungeon Guides'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Farm & Underground modules added to main view; can be disabled in settings'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Moon Phase system & Moon Ball'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Fish Pond safari area in Magikarp Jump sub-region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Setting to disable auto-save'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Setting to disable the held item remove/replace prompt'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Hatchery Helper available in Discord shop'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Farm Wanderers have been reworked'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Underground, diamonds, and daily deals adjusted'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Alola has been rebalanced and story quests revamped'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Locations of several Pokémon have been adjusted'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokémon can now belong to multiple categories'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Additional category management tools added to the Pokédex & Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Everstone can now be used as a held item to prevent evolution'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Auto-gym feature reworked'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Roseli Berry aura buffed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added Mimic & Wanderer encounter types to pokéball filters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Purified Pokémon now give a bonus to click attack'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Battle Frontier now uses Clear weather at all times'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Flutes can now be used regardless of active challenges'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Removed 3x activation limit on Treasure Scanner Oak Item'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Right click (or long press on mobile) to enable/disable Pokéball filters from the main view'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Orre dungeons have an updated encounter display'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Safari Zones now have an encounter display similar to dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'The \"Caught Not Shadow\" Pokédex filter will now only show Pokémon with a shadow form'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Various other text, image, UI, and performance changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm Hands not regaining energy when not hired'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Nest Ball catch chance inside dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Egg Hunt quest NPC inaccessible'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Various tooltip display issues'),\n // v0.10.19\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.19', new Date(2024, 0, 29)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added setting to disable hatchery clear confirmation'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Holocaster unlock requirements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Duplicate notifications when removing all Vitamins'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Tutorial Pokéball selector'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Egg steps are now capped at 4800'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some daily occurrences not resetting correctly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hatchery sorting/filters not always working correctly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Lazy loading items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduced lag'),\n // v0.10.18\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.18', new Date(2024, 0, 21)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Alternate Berrydex viewing mode (enabled in Display settings)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Audio cue when Max Flow has been gathered'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Farm button to invert locked plots'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hatchery, battle, and clicking performance optimizations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pink Bow replaced with Fairy Feather'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Mega Pokémon now have the same egg steps as their base form'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hatching a shiny Pokémon now awards 5x the normal attack gained'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokéball filter priority order can now be changed (Gameplay settings)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Currency display on main view moved to own module'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Map hover tooltip for routes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokédex EVs display now includes decimals'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokéball Selector & Pokémon List modules can be vertically resized'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Poor randomization of certain daily occurrences'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Galar Max Raid dens not appearing active on daily reset'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Catching a shiny shadow Pokémon not awarding the shiny'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Various other minor bug fixes'),\n // v0.10.17\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.17', new Date(2023, 11, 4)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Incorrect egg steps for several Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Friend Safari rotation'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some achievements appearing in the wrong category'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Various minor bugs and typos'),\n // v0.10.16\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.16', new Date(2023, 11, 2)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Orre - Gale of Darkness'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Gigantamax'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Bug Catching Contest in Johto'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Great Marsh Safari Zone in Sinnoh'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Pokéball filter option - Category'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Quest Lines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Easter & Christmas events reworked'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Daily deal UI improvements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Galar rebalanced'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Weather adjustments'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Scent held items can now be used on purified Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dungeon loot adjustments'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Regional map improvements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Performance improvements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Negative & decreasing quest progress (again)'),\n // V0.10.15\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.15', new Date(2023, 7, 21)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Pokédex shadow and purified caught status filters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Notification for when the Purify Chamber is ready'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon chests could not be opened in rare instances'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Orre Poké Spots not accessible'),\n // v0.10.14\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.14', new Date(2023, 7, 20)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Enter the Colosseum - Orre is now available!'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Snover Berry'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Unova Berry Master'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Quest Lines menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Rare Candy'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Megas'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Quest Lines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added ability to Surf on water in Safari zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Safari animation speed increases with level'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Weather rebalanced slightly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Blaze Cassette replaced with Magma Stone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Mewtwo strikes back! event reworked'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Halloween! event can now be activated with the Event Calendar'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'EXP Aura added to Custap berry'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Catching a shiny in the Safari zone grants additional Safari EXP'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Performance improvements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Safari items spawning in inaccessible locations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Gem & Shard traders not having map overlay colors'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Friend Safari appearing as uncaught on the map'),\n // v0.10.13\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.13', new Date(2023, 6, 15)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Battle Frontier reward'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More held items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More profile trainers'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Safari Zone based achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjust Safari Zone item spawning'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Replaced Pancham with Carbink in Mystery Eggs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Safari broken fences'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Saves with encoded text'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Zero\\'s Ambition questline re-starting or starting early'),\n // v0.10.12\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.12', new Date(2023, 6, 2)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Friend Safari is now open!'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Safari XP & Safari Level - see the Help tab in the Safari Zone for more information'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Safari keybinds'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Event Calendar - Halloween not included (purchased in Hammerlocke)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added additional catch filters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Multipliers tab in the Statistics menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added additional Held Item filters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Megas'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Quest Line'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Improved category management'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Improved hatchery helper customization'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Several held items added to Galar dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Item Bag & Pokedex entry UI refresh'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Number of bosses in legendary dungeons rebalanced'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Berrydex improvements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Quest Point rebalance'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Quest progress decreasing or becoming negative'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Various performance optimizations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokedex & Hatchery filtering now works with party nickname'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Broken Gym Leader sprites'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Delete save triggering if cancelled after typing DELETE'),\n // v0.10.11\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.11', new Date(2023, 4, 7)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Advanced capture filters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Weather forecast at the Weather Institute in Hoenn'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Megas'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Quest Lines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Hotkey to open the quest list'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Hotkey to open Poké Mart shop'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dungeon chests have a visual difference based on loot tier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'S.S. Anne visible on all maps at dock location'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some pokémon locations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokédex filter improvements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokémon in the hatchery/queue can be seen in the vitamin list'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Acquired Mega Stones displayed in item bag'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated egg colors in Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc map changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokédex & hatchery unusable at certain resolutions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Deleting a category sometimes causing a game crash'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Various broken images'),\n // v0.10.10\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.10', new Date(2023, 2, 26)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Megas'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Quest Lines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added Pokérus icon to more places'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Battle Café now gives more spins on full shiny/resistant set'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Faster growth berry auras no longer affects matured plants'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Slower growth berry auras now only affects matured plants'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More berry information added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Manaphy is now a wandering Pokémon again'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc map changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Real evolution challenge now correctly keeps track of level'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some requirements for routes and towns'),\n // v0.10.9\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.9', new Date(2023, 0, 28)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Megas'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Quest Lines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New catch option for contagious Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Redeemable code to refund all Vitamins: REFUND-VITAMINS (one time use)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Luxury Ball, now awards random currencies'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted wandering Pokémon on the Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some fossil sizes in Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hatchery search no longer uses Regex by default'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted how locked evolutions are shown in evolution item menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Multiple tiers of flash in Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dawn is now during 5am-6am'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Roamer NPCs now reveal the Pokémon in the Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Totem Marowak can now drop Thick Club'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'No more Mega Stones in berry trades'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm aura displays'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground buried item locations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed subregion for Altar of the Sunne and Moone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Real evolution challenge, using stones on Pokémon in the Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Evolution item caught indication including future regions'),\n // v0.10.8\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.8', new Date(2023, 0, 15)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Mega'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Held Item'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed scrollbar for vitamin modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed shops'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed Maelstrom showing up at the wrong time'),\n // v0.10.7\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.7', new Date(2023, 0, 14)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Megas'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Quest Lines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Held Items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Improved Vitamin UI'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can now open multiple Dream Orbs at a time'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Oak Items now have 5 loadouts'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Misc Hatchery fixes'),\n // v0.10.6\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.6', new Date(2023, 0, 1)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added new Aura to the Farm (Repel)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Misc fixes for Quests'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some reward Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Misc fixes for Quests'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Misc Hatchery fixes'),\n // v0.10.5\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.5', new Date(2022, 11, 31)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Magikarp Jump Subregion'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added new Vitamins'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added more Mega Evolutions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added PokéRus indicator to shops and Safari Zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added more Held Items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Mapcolor for missing PokéRus Resistant'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added a mute button'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can now change default file name of saves'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Proteins'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed shiny chance for Safari Zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Changed evoluion items layout'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More than six Pokémon can now hold held items at a time'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some Mega Evolution requirements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Mimics now give more EVs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Changed Battle Café times to match the rest of the game'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduce CPU usage when game is minimized'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Misc fixes for Suicune Quest'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Attack Achievements appearing again on reload'),\n // v0.10.4\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.4', new Date(2022, 10, 22)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Shop Magikarp no longer awards EVs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Base wandering Pokémon no longer award EVs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Starter not gaining Pokérus status'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Game not loading in special instances when you are at particular quest steps'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Potential script execution exploit - Remember to only import trusted save files'),\n // v0.10.3\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.3', new Date(2022, 10, 20)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some questline steps causing players to be stuck'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Real evolution challenge mode'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Shard quests not updating in specific instances'),\n // v0.10.2\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.2', new Date(2022, 10, 19)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Kecleon overworld battles added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Challenge mode added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Translations for some game componenets'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Desktop Client exclusive Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Able to nickname Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More offline progress rewards added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Some mega evolutions are now available'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Meltan questline'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Giratina questline'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Rival battles'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted click attack calculations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Kalos Elite Four'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'EV bonus now taken into account for Breeding Effeciency sorting'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Removed guaranteed Unown (A) from Ruins of Alph'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some Pokémon teams'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some Pokémon encounter locations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduced some lag caused by achievements'),\n // v0.10.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.1', new Date(2022, 9, 31)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Spooky Togepi evolution line'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Increased chance of undiscovered fossils appearing in the Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted held item drop locations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted battle café spins per day'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More profile options'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some people not being able to create a new save'),\n // v0.10.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.10.0', new Date(2022, 9, 22), 'Galar'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'The Galar region is now available'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Farm Point hatchery helper added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More questlines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More held items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Pokémon now have genders'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Routes and dungeons now show the EV status of all encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Battle Frontier reward Pokémon now have a chance to be shiny'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted shard prices'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted farm wanderers'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Town to be sent to after snorlax and sudowoodo battles'),\n // v0.9.18\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.18', new Date(2022, 9, 10)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some saves not being able to update to v0.9.17'),\n // v0.9.17\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.17', new Date(2022, 9, 10)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Held items [BETA]'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Sudowoodo overworld battles added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Sevii now has it\\'s own achievement pool'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Dungeon floors added for dungeons of size 10 or bigger'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Kalos route 1 encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hoenn badge requirement ordering'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated typed egg pools'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Caught indicator for berry deals'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dungeon Token flute now helps with EVs instead'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Farm hands will no longer attempt to place berries you do not have'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Global achievement bonus increased to 150%'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Improved Hatchery and Pokédex loading times'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Underground layer generation'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Enigma will now show the full hint once unlocked'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Diancie Questline requirements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm aura calculations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokérus spreading between helpers'),\n // v0.9.16\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.16', new Date(2022, 8, 21)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Furfrou form added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Pinkan berry harvest rate'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc image changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added a Dock to Seafolk Village'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Re-adjusted when hatchery sounds play'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix farm harvested statistics'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Master Farmer achievement'),\n // v0.9.15\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.15', new Date(2022, 8, 20)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More Pokémon forms added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More one off battles added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New questlines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New setting added for quest modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Hatchery size settings'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Updated Alola maps'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Pinkan berry'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Unova, Kalos and Alola Elite 4 can now be challenged in any order'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc map changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc Pokémon stats updated'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc NPC changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Improved load times for Pokédex and Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Harvest rates for berries with a 0.5 harvest rate'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm hands not remembering to focus Cheri berries'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm hands not ignoring locked plots'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Discord login should be more consistent'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed disappearing Pokémon bug for most players'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Buying multiple Pokémon at the shop now applies the correct amount of EVs'),\n // v0.9.14\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.14', new Date(2022, 8, 2)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pinkan Dodrio is now purchasable in place of Pinkan Exeggutor'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc Pokémon stats updated'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Sevii island fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Alola islands being inaccessible for some people'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Questline requirements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'All badges now displayed in badge case when available'),\n // v0.9.13\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.13', new Date(2022, 8, 1)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Sevii islands 4, 5, 6 and 7'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Sevii questline'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Detective Pikachu questline'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Team Plasma questline'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Underground item sorting'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc NPC changes'),\n // v0.9.12\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.12', new Date(2022, 7, 18)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Revert regional update'),\n // v0.9.11\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.11', new Date(2022, 7, 18)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Celebi questline'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added ability to lock plots in the farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Bulletin Board, With misc quests available'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More Battle Frontier rewards'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc NPC changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokérus status not visually updating in the hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Multi quest progression'),\n // v0.9.10\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.10', new Date(2022, 7, 3)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Furfrou (star)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc NPC changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground survey now shows shards'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Correct amount of Chest/Enemies shown in Dungeon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon loot requirements'),\n // v0.9.9\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.9', new Date(2022, 6, 22)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hatching new Pokémon causing errors'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokémon gaining Pokérus and EVs early'),\n // v0.9.8\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.8', new Date(2022, 6, 22)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Ability to name Oak item loadouts'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Shards now appear in Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Shard traders'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New one time battles'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More questlines'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'First 3 Sevii islands'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Freeze mulch added to Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Rowap berry now affects EVs gained'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More methods to gain EVs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More sounds'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokérus can now spread between Pokémon sharing a type'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated current location to use player sprite'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated default quest location color'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More notification options'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Unlock extra quest slots 5 levels earlier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Trade stone is now Linking cord'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More filters and sorting options added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Tutorial quests'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Baby Pokémon can now be obtained by breeding any evolution in the line'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Display chests and Pokémon remaining in dungeon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Some Sinnoh and Alola stones added to Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted loot found in dungeon chests'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated some Pokémon evolution methods'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Setting for wider game UI'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated some sprites'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc UI changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Withered berries statistics not increasing correctly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some dungeons rewarding fighting eggs every time they were completed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Unable to use some battle items on mobile'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Missing town images'),\n // v0.9.7\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.7', new Date(2022, 5, 28)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Fighting Dojo to Saffron City'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Removed \\'None\\' region from hatchery filters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some dungeons environments'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Floette (Eternal) stats'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Display EV stats in pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Recieve fighting eggs from some fights'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Survival Area shop breaking other shops'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Incorrect trainer showing in dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed incorrect experience debuff'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Not applying Pokérus if modal was not closed correctly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Can no longer bomb/survey before new layer loaded in the Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Missing town images'),\n // v0.9.6\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.6', new Date(2022, 5, 26)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Able to disable offline money gains in settngs menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added a some more NPCs to towns'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Able to filter Pokémon in Protein menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Currency lost animation'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Save reminder notifications'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Kanto Team Rocket quest line'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Mina\\'s Trial quest line'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added EVs and Pokérus'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Open links in a new tab'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Diglett\\'s cave'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Roaming Pokémon encounters now use their own sound and notification'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Experience gain has been rebalanced'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Flutes have been adjusted'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted shops stock of items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated encounter environment backgrounds'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Discord Pokémon can no longer be obtained before you reach the respective regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Save data can be copied to clipboard if unable to download'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Changed Kanto encounters to follow Fire Red and Leaf Green instead of Yellow version'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc map changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Town and Route requirements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Having negative quest amounts'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Unown (A) HP in Ruins of Alph'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Being able to leave the region early if pokédex challenge enabled'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some quest lines not starting when they should have'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm hands being reset on reload'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some battle modals not closing'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some achievements not showing as completed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hatchery queue not filling empty slots occasionally'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Area completion status highlighting'),\n // v0.9.5\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.5', new Date(2022, 4, 26)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Starter modal appearing multiple times when grass type picked'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Error when obtaining a badge'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Key items not being obtained'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground hammer sprite not appearing'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Misc text changes'),\n // v0.9.4\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.4', new Date(2022, 4, 26)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Quest locations now highlighted where possible'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Battle Frontier now saves your stage if you leave early'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'You will now choose a starter each time you reach a new region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added weather selection to Damage Calculator'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Shop hotkeys'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added ability to sort Achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show current sub region name'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Hammer and Chisel sprites in Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Hatchery sort options and directions, Added a tooltip'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Display highest stage reached while in Battle Frontier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added option to display Proteins used in Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Pokémon League sprites on map'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some themes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted dungeon loot'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Grouped Mt. Chimney surrounding Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can now change movement keys for Safari Zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Timer now starts in Dungeons once you have moved'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Professor Oak will now tell you how many Pokémon you still need to obtain to move on'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Reduce load time, no longer preload all town images'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Fossils display caught status in Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Links on the Save Selector screen will now open in a new tab'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Pokédex filtering options'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added option to hide Shiny Pokémon in the Protein menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Berry Master shop buttons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Safari Zone movement animations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Shiny code wrong name displayed occasionally'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Damage calculator updates correctly when you hatch Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Misc text changes'),\n // v0.9.3\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.3', new Date(2022, 3, 28)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Hatchery Helpers [BETA]'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Flutes [BETA]'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Changed default setting for Farm timer'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added some more settings'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Grouped Mt. Coronet and Melemele Woods surrounding Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Moved sell all button in Underground to the Treasures tab'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Ruins of Alph added Unown (A) as a boss until caught'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokémon now sorted by ID in the evolution stone menu'),\n // v0.9.2\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.2', new Date(2022, 3, 21)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Updated Alola Akala map'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Select region with number keys while dock modal is open'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated save selector view on mobile'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Badge case split up by region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated some dungeon encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Unown encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated webworker and game ticks'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated some sprite inconsistencies'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground sell all no longer starts breeding fossils'),\n // v0.9.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.1', new Date(2022, 3, 14)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Easter quest line not starting on new saves'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Save deletion/importing in game'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Shop Pokémon prices rounding'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'On screen Safari Zone controls not working'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Achievement filtering'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon showing as incomplete if locked Pokémon not obtained yet'),\n // v0.9.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.9.0', new Date(2022, 3, 13), 'Alola'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'The Alola region is now available'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More hotkeys'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Customizable hotkeys'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Desktop notifications'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Sell-all button to Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Sinnoh Quest Line'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Dungeon Achievement amounts required'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted shop Evolution Stone caught indicator'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some sprites'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Indicate HP buff when opening chests in Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Changed some Sinnoh Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Ruins of Alph Unown encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Save profiles not loading if they contained a % symbol'),\n // v0.8.17\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.17', new Date(2022, 2, 31)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Shiny achievements per region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show Evolution Stones from future regions in the items menu if you have at least 1'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Incorrect regions for some evolution items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Damage calculator showing NaN'),\n // v0.8.16\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.16', new Date(2022, 2, 30)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added map colors for Achievement not yet complete'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Show Dungeon and Gym clears'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can re-order saves on the save selection screen'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Notification and sounds settings now grouped'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Increased size of Gem icons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added option to damage calculator that ignores Pokémon level'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the Quest Point cost for some Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Different Champion defeat message per region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hide Evolution Stones from future regions in the items menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Progress bar showing as incomplete when an Oak Item is ready to be upgraded'),\n // v0.8.15\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.15', new Date(2022, 2, 14)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Team Plasma questline'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Shards are now called Gems'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some dungeon loot'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'DNA no longer shows in master farmer trades'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Lum berry now affects Haban'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated route movement hotkeys order (-, +)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Timerball effect'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Sinnoh route 224 requirements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated dungeon achievement order'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated start menu order'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Trim search text in Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Weather changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show players trainer image as the trainer in the dungeon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Missing shop items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Enigma Discord requirement'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Updated some achivement descriptions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Updated message about disabling challenges'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Town images breaking if they contained a \\' character'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some notifications containing extra . characters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'MissingNo. appearing in Gyms/Routes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Shop evolution items showing incorrect caught status'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon XP gained for defeating Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor theme adjustments'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'New day message no longer appears on new saves'),\n // v0.8.14\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.14', new Date(2022, 1, 11)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Land vs Water questline in Hoenn'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can now shovel away Mulch in the Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added some new Pokéball types'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Undella Bay on the Unova map'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Reduced cost of Furfrou (Kabuki)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some NPCs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some dungeon loot'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Extra loot gained from Treasure Scanner now counts towards quests'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Challenges can now be disabled at any point'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can now download saves from main menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some shops items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted the way evolutions are shown in Evolution Item modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokémon have variable health on routes based on HP stat'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can hide Pokémon that have max protein in the protein menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Saves Shard menu collapsed state'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added more options for notifications relating to the Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed a problem with dungeons having incorrect item names for loot'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Attack value shown on hover in Battle Frontier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Distortion World image on map'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Progress bar percentages shown'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Extended Johto Pokémon League to cover more map'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Gaining dungeon tokens based on new route while catching'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Offline progress message not shown on new game creation'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'New Underground deals notification not shown if Underground not unlocked'),\n // v0.8.13\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.13', new Date(2021, 11, 21)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Dungeon loot Mimic encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added new Furfrou forms'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Team Rocket HP'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon loot not being tracked in statistics'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Nerfed dungeon loot (still being re-worked)'),\n // v0.8.12\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.12', new Date(2021, 11, 20)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added 2 new optional (recommended) challenges'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added 2 new x-mas Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added new Johto questline'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added new Johto trainers'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added new Johto dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Kyurem forms are now obtainable'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Better looting in dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added a Roamer encounter increase boost to Jaboca berries'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Logbook encounter message formatting'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Reduced Plume Fossil sizing'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted Castform encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some Pokémon encounter locations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Adjusted some items purchase locations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Shuffled around some item orders in menus'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor text fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Being able to go into Bait debt in the Safari Zone'),\n // v0.8.11\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.11', new Date(2021, 10, 19)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Trainers and Background will now show a list of images when changing them on your profile'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hatchery and Protein list now sort independently of Party'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hatchery and Protein list not sorting'),\n // v0.8.10\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.10', new Date(2021, 10, 17)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Allow using web workers for game ticks'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added setting to not reset shop amount when purchasing'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Sinnoh route orders and encounters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Slowpoke rare item drops'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added Farm, Daycare, Underground locations to all maps'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Moved a few dungeons out of towns'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Kalos visually'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Lowered some berry unlock requirements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'When shoveling a fully grown crop it will be harvested instead'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Lag caused by sorting by Pokémon attack'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Auto Gym button sizing'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduce some lag'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor text fixes'),\n // v0.8.9\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.9', new Date(2021, 8, 12)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Log book can now be filtered by event type'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Regional Pokédex achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Protein achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Gym auto re-battle system'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Kalos environments'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added a legend to the map'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Misc text fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some locations not showing as locked'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Missing/incorrect code contributors links'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon grid lines not appearing on FireFox'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'MissingNo. appearing in log book'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'MissingNo. appearing in Battle Frontier'),\n // v0.8.8\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.8', new Date(2021, 8, 5)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Credits modal for sprites and code contributions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can only move to tiles adjacent to visited tiles within Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can start attacking Gyms as soon as the GO text appears'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added more NPCs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Farm hands will restore energy while not hired'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Game settings are now stored within the each individual save'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Route highlights for uncaught Pokémon, uncaught shiny Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Settings to change colors of route highlights'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dungeons now decrease in size for every 10, 100, 1000 etc clears'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show net value of Underground in footer'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some Fossils appearing in the underground too early'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon trainers re-appearing after failing them previously'),\n // v0.8.7\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.7', new Date(2021, 7, 31)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, '(BETA) Added Farm Hands (Farm Automation) - Check out the Help tab in the Farm for more info'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added an option to hide challenge related modules'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Display total route defeats when on a route'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Player will return to last Dungeon/Town they were in before closing game'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Pokémon typed quest reward amounts'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Should no longer receive quest that cannot be completed right now (unless starting a new region)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Nerfed Dungeon Token gains in Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added unobtainable berries for No Oak Item saves to Johto Berry Master (must have prerequisites to purchase)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor theme fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Trainer image fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Being able to win and lose when fighting a Gym'),\n // v0.8.6\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.6', new Date(2021, 7, 22)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added more NPCs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Capture Pokémon Type quest rewards'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Pledge Grove'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Decrease shop multiplier when fighting Trainers/Gyms/Elite 4'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Boss icon visible on light themes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some Pokémon level speed types'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Achievements percentage going above maximum'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Quest box sometimes dissapearing'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor text fixes'),\n // v0.8.5\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.5', new Date(2021, 7, 4)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Battle Frontier not awarding items'),\n // v0.8.4\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.4', new Date(2021, 7, 4)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Able to unlock Apicot and Lancat berries'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Farming related achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Battle Frontier related achievements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added option to settings menu to shorten currency amounts displayed on main game screen'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Offline earnings for money (max of 24 hours)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added a couple of new quest types'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed click attack calculation'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Nerfed Kalos Route 22 HP'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Englarged clickable area for Kanto map towns and dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Vivillon base form changed to Vivillon (Meadow)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Removed Rare Candy from shops until it has a use'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Vivillon quest step not being completable if you had already defeated stage 666 in the Battle Frontier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some Gyms had incorrect HP'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some trainers teams'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some Pokémon were not counted towards the catch a type quests'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Show item count for non Underground items in the Daily deals'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Being able to enter some dungeons early'),\n // v0.8.3\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.3', new Date(2021, 6, 30)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Vivillon quest line'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Achievement bonus percentage now also applies to Dungeon Tokens'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added Mystery Egg to Unova shop'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the look of most maps'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added an icon to dungeon bosses'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show inventory amount of item you are receiving from Underground daily deal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Updated Oak Item achivements for no click challenge players'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground not refreshing after completing layer and purchasing size upgrade'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Softlock from Safari Ticket and Shard Case if the user refreshed the page after obtaining a badge'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some trainers teams'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Gym/Elite Four money reward amounts'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Kanto dock ship not showing on client'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokémon League images'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'When purchasing multiple shop Pokémon the shiny chance was only rolled once'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some Pokémon silhouettes showing colors when not obtained yet'),\n // v0.8.2\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.2', new Date(2021, 4, 3)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added in game FAQ'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated look of Kanto map'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added achievement for maxing all 12 Oak items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hatched display value not updating in hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Various text fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon bosses can now drop held items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Update some dungeon trainers HP'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, '2nd part of re-capturing tutorial is now optional, as may still appear odd on some browsers'),\n // v0.8.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.1', new Date(2021, 3, 28)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Kalos fossil Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added trainers to Hoenn dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added trainers to Unova dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Tidy up some badge sprites'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Starting tutorial no longer skippable'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hide unobtainable achievements when running challenge modes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Added starting towns to Unova and Kalos'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed a few Pokémon sprites'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor text fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Added some missing/unobtainable Kalos Pokémon'),\n // v0.8.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.8.0', new Date(2021, 3, 4), 'Kalos'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'The Kalos region is now available!\\nSome trainer sprites will be missing'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed missing Battle Frontier images'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Attempt to fix svg image on map for older Safari versions'),\n // v0.7.9\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.9', new Date(2021, 2, 3)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Attempting to fix some lag, please report on Discord/Github if you are still having major lag compared with v0.7.7, there may be a few patches pushed out for testing'),\n // v0.7.8\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.8', new Date(2021, 2, 2)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Increased roamer odds on specific routes changing every 8 hours, NPCs in certain towns will tell you the current route'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Mine items quest in Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed dungeon token gain'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Safari Zone animations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Safari Zone encounter statistics'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some roaming event mons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Not being able to import saves from < v0.5.x'),\n // v0.7.7\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.7', new Date(2021, 1, 20)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed currency quests'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed currency multipliers'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed quest refreshing without waiting for confirmation'),\n // v0.7.6\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.6', new Date(2021, 1, 19)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Oak item loadouts'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'No more impossible quest when doing challenges'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Able to delete saves on the windows client'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dungeon Trainers Pokémon will now reward Dungeon Tokens when defeated'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dungeon Trainers will now reward Money when defeated'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Sound not remembering previously set volume'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Let\\'s Go mons not showing in Pokémon list'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some missing stone evolutions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Elite four shortcut keys working again'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some Pokémon shop sprites'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some missing trainer sprites'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some routes/dungeons showing incorrect backgrounds'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Saved game not importing if settings are not set'),\n // v0.7.5\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.5', new Date(2021, 0, 29)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix proteins not increasing on usage'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some trainer images not loading'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dynamic Pokémon disappearing before leaving screen'),\n // v0.7.4\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.4', new Date(2021, 0, 29), 'Challenges, Trainers and Saves'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Multiple save file support'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Challenge modes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Trainers added to Kanto Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Log wandering Pokémon for Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Change Lum berry Aura effect'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Add more Burmy forms'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Underground items can spawn in any rotation'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Quest generation updated'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dynamic background Pokémon now have variable speed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Leave button won\\'t appear in Dungeon until the player has moved'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground survey upgrade display'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix Heatran & Kyurem HP'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground no longer notifies on new game'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hide future region forms from Battle Frontier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed quick catch glitch'),\n // v0.7.3\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.3', new Date(2021, 0, 18), 'Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Underground revamped'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More Pokémon held items added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Add tooltips to battle item values'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc Farm changes and fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Add Leave button to dungeon entrance'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hatchery steps given from Unvoa dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Old Amber quest reward'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Event description line breaks'),\n // v0.7.2\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.2', new Date(2021, 0, 3)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Poison Barb not gaining experience'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Map tooltips not always showing'),\n // v0.7.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.1', new Date(2021, 0, 1)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Unova Fossils now available in the Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add option to display Pokédex ID in hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Save achievement filters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Use multiple Protein at once'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buff P2 Lab, increase boss pool'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some parasitic Farm mutations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed shiny chance when hatching and using Shiny Charm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Vermilion City image & name'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Quest changing when traveling to a new region'),\n // v0.7.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.7.0', new Date(2020, 11, 23), 'Unova'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'The Unova region is now available!'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added notification for when Berry about to wither'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Minor text fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Route HP slightly buffed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Some Gyms and Dungeons HP buffed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Babiri berry removed from Enigma pool'),\n // v0.6.9\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.9', new Date(2020, 11, 20)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Give free quest refresh on all quests completed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated some environments'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Babiri berry effect'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Enigma berry'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Farm wandering Pokémon rate'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Petaya berry effect'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Kasib berry effect'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added hints for more berries'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated some NPC text'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed egg steps for baby Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Nerfed egg steps for evolved Pokémon forms'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed Farm auras not updating'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Modals locking game if clicked too fast'),\n // v0.6.8\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.8', new Date(2020, 11, 9)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added weather to the regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Empty Hatchery queue notification added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Nerfed Heatran'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor text fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some Farm mutations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed Farm auras not updating'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Can no longer move around the Safari Zone before paying'),\n // v0.6.7\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.7', new Date(2020, 10, 22)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added some more NPC around Kanto'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Doubled the chance of encountering uncaught Roaming Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Save category filter in Hatchery upon reloading'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Decreased the Shovel cost'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Farm items cost decreases faster based on berry type harvested'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor text fixes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Recalculate Pokémon attack upon hatch'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some Farm mutations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed larger BerryDex timers'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed quests auto refreshing if you gain a level then refreshed the page'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix Quickball on routes with less than 10 kills'),\n // v0.6.6\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.6', new Date(2020, 10, 18)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show shiny symbol for Pokémon in Protein modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Achievement pages being empty after completing last item on page'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Start menu visible while loading screen shown'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Save update from older versions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Time displayed in BerryDex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokédex hide shiny images toggle correctly reflects current state'),\n // v0.6.5\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.5', new Date(2020, 10, 18)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added toggle to hide shiny images in Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New display options added to Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can sort Pokémon list by total proteins used'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Pokéball types added, Can be obtained by trading with the Johto Berry Master'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add setting to switch between different growth timers in the Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Nerfed Protein, only 5 can be used per region visited'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Protein is now used from the Items menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated BerryDex to show more readable time format'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Berries are less likely to mutate nearby plots to themselves'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Berries are less likely to create mutations of themselves'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Nerfed some of the Berry Auras'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Increase Farm wandering Pokémon shiny chance'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc Farm changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Misc text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hotkeys will no longer activate while focused on inputs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Category list no longer cut off in Hacthery'),\n // v0.6.4\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.4', new Date(2020, 10, 17)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More Farm statistics'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'UI/text changes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Farm flavor mutations are more strict and less invasive'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hide locked berries in trade window'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Quest not completing if restarted after being quit'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm mulches can now be applied multiple times per plot'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Oak items upgraded currency shows correct currency'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Berry hints updating correctly each day'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some lag'),\n // v0.6.3\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.3', new Date(2020, 10, 13)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show Berry hints in BerryDex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Farm mulch should work correctly now'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Update Pokémon native regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Proteins used not based on Battle Item multiplier'),\n // v0.6.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.1', new Date(2020, 10, 13)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More Farm statistics'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Protein trade to Sinnoh Berry Master'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added multiple button to Mulch in Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix Pokémon not appearing in Battle Frontier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Evolution Stones not working'),\n // v0.6.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.6.0', new Date(2020, 10, 13), 'Farming'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Complete Farm overhaul'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Hotkeys added for oak items modal (O to open, number keys to toggle items)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Hotkeys added for Pokéball selector modal (P + number to open, number keys to toggle items)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More NPCs added around the regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Other Deoxys forms obtainable in the Battle Frontier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Protein item now has a use, buy from Pokémon League, use in Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Free quest refreshes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Hatchery filters are now saved upon reload'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Damage output modified, dual types nerfed, single types buffed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Unlock Kanto route 22 earlier in the game'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show currently locked Dungeon Bosses'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Modified Sinnoh route difficulty'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Display time played as a readable value'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Quests list not auto refreshed on new day or level up'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update Masterball image'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'All eggs will auto hatch when steps reached if Pokémon still in the queue'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Backup save data corrected'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokémon List resorted when new Pokémon obtained'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Attack display error'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Acheivements re-filter once acheivement completed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Swapped Kanto routes 7 and 8'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduce svg image sizes, fix some lag'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduce screen movement on mobile battle view'),\n // v0.5.8\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.8', new Date(2020, 10, 1)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Queue functionality added to Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can add Pokémon to custom Categories, and sort/filter by those'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Safari Zone Pokémon can now appear as overworld sprites'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Completed Quest and Achievements will show in the Log Book'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'See Pokémon Attack after calculations by hovering Pokémon Attack value'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add sparkle to shiny overworld sprites for Dynamic Background and Safari Zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can sort Pokémon by Times Hatched'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Boost Dungeon Tokens gained slightly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated images, Use svg images for Currency and Pokéballs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Evolution Stones will show a caught indicator in shops'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Display date in changelog when updates occured'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update Gyms Pokémon and defeated text'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update Kanto Pokémon encounters to be based on Pokémon Yellow version'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated layout of Pokémon List'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show event Pokémon in the Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can no longer upgrade shard effectiveness where there is no usage'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Roaming Pokémon chance of appearing is now based on route difficulty'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Doubled the chance of encountering uncaught Pokémon in the Safari Zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Display Pokéball amount in selector modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Can no longer start a new Pokémon League battle if modal open'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Shop cost will no longer go above 100× the base cost'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground hammer will display red box when on edge tiles'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Mine should no longer soft lock players'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Alternate Form Pokémon statistics shown correctly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'When hatching shop eggs, the Pokémon level will no longer be reset'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground daily trades statistic will increment correctly when doing multiple trades'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Minor display and text fixes'),\n // v0.5.7\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.7', new Date(2020, 9, 13)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added setting for Hatchery egg ready to hatch animations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More NPCs in towns around Johto and Hoenn'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Types displayed in Pokémon statistics modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Underground Bomb is now upgradable'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Buttons added to achievement modal to jump to first and last pages'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Number keys (1-9) can now be used to start Pokémon League battles'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Pokéball selector made smaller, now makes use of a modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Add some spacing to Damage Calculator'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Hatchery eggs will display in a row of 4 when module is in the middle columnn'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Always show total levels in Oak Item tooltips'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated images for shop Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Farm images made sharper'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeons with a large amount of Pokémon will no longer hide the start button'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Updated Hatchery sort display'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Notification sounds normalized'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Sprout images displayed in Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Achievement modal pages should now show the correct numbers'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Mine data contained in save data'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Saves should no longer have issues downloading'),\n // v0.5.6\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.6', new Date(2020, 9, 6)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Damage Calculator to Start Menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Background settings Night and Dynamic added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Walking in the Safari Zone will now add steps to your eggs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Achievements added for reaching maximum level on oak items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Achievement Tracker module'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added region filter to Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added sort dropdown to the Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added setting for shop value increment amount'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Introduction to some gameplay elements added for new players'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Eggs will wobble when they are ready to hatch'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Start Menu contains a link to the Wiki'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can hide the Pokémon filter in the Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Energy use disabled once you complete a layer in Underground until refreshed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added player icon in Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Can see your list of eggs and fossils even if you cannot breed them'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Unobtained Pokémon will show as white on dark themes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground will no longer contain multiple deals with the same items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Shop prices should no longer overflow when too large'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Discord usernames should no longer affect saves'),\n // v0.5.5\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.5', new Date(2020, 9, 3)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Achievements can now be filtered'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can sort Underground items by clicking on table titles'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'NPCs now in towns, will provide dialog that will help the player complete their Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More notification settings have been added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Increase shiny chance when using an evolution item'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Increase shiny chance for dungeon Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More shops added to towns'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'More Pokémon added to typed eggs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Electrike is now exclusive to eggs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, '\"Complete the Kanto Pokédex!\" achievement now requires all 151 Kanto Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Regirock, Regice and Registeel no longer Roaming, now in Sealed Chamber dungeon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Kyogre and Groudon will only appear in their dungeon after defeating the Hoenn Elite 4'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'If you encounter a new Pokémon that is also shiny, the higher tier ball will be selected'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Battle item effect timers now display upto 99 hours'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Phione now obtained by breeding Manaphy'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Quest list should only auto refresh if all quest are claimed or it is a new day'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Gym Pokémon can no longer be captured by players'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduce some lag caused by hatchery filters'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Mystery egg can now hatch Pokémon from the Dragon Egg pool'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Travelling to the next Region now requires all of that regions Pokémon (excluding different forms)'),\n // v0.5.4\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.4', new Date(2020, 8, 28)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More stores and items added in Johto, Hoenn and Sinnoh'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added notifications for the Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can now sort Pokémon list by Breeding Efficiency'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can now sort Pokémon list by Egg Steps'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New Rotom forms available'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added ability to use multiple battle items in 1 click'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Shards types can now be collapsed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Game should now load in older versions of Firefox'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Mesprit and Cresselia are now roaming in Sinnoh'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Updated Burmy (plant) shop image'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Safari Zone modal should no longer be able to close without clicking the intended buttons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Updated Shoal Cave entry cost'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hatchery should no longer cause lag when hatching'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Old Quests will no longer give a notification when completed once they are refreshed'),\n // v0.5.3\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.3', new Date(2020, 8, 21)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can filter Daycare Pokémon by name (regex supported)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Select which information is displayed under each Pokémon in the Daycare'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Possible to start with a Pikachu if no starter Pokémon selected enough times'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Some Roaming Pokémon will only appear after certain requirements have been met'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Some Dungeon Pokémon will only appear after certain requirements have been met'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Flower Paradise dungeon HP corrected'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Route 40 should no longer unlock before reaching it'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduce some checks firing too often'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Game controls will be ignored if focused on an input element'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Backgrounds should no longer overflow in breeding modal'),\n // v0.5.2\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.2', new Date(2020, 8, 10)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Underground quest line created'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More statistics added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Some minor Discord integration'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Attack achievement no longer based on current region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Modified the way game ticks are handled'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed breeding filter displayed options being reset after hatchery filled up'),\n // v0.5.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.1', new Date(2020, 7, 31)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added a notification for when the game has an update available'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add Croagunk to Route 212'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Move Hippopotas from Route 210 → Route 214'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Fight Area requirements'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Erika Victreebel'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Unobtainable items will no longer remain in the Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pacifidlog town shop now available'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hide alternate forms from Pokédex that have not yet been caught'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Shaymin (sky) form types corrected'),\n // v0.5.0 - Sinnoh\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.5.0', new Date(2020, 7, 28), 'Sinnoh'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'The Sinnoh region is now available'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New evolution stones'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Dungeon based evolutions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Time based evolutions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, '2 new fossils added to the Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Pokémon alternate forms can now be obtained'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Decrease attack reduction in newer regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'All Happiness/Friendship evolutions now make use of the Soothe Bell'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added base exp per quest completed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the order Routes, Dungeons and Gyms need to be completed in the Kanto region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Gyms should award correct amount of Egg steps now'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.REMOVED, 'Removed Time Stone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.REMOVED, 'Removed hold evolution items from the Underground'),\n // v0.4.20\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.20', new Date(2020, 7, 18), 'Battle Frontier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added the Battle Frontier in the Hoenn region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed Dungeon Token gain in higher regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the order Routes, Dungeons and Gyms need to be completed in the Johto region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the order Routes, Dungeons and Gyms need to be completed in the Kanto region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Questline progress restored correctly'),\n // v0.4.19\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.19', new Date(2020, 7, 15)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Filters added to the Day Care'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Achievements available for all regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Buffed bonus for the Cell Battery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Sounds will now play if enabled even if the notification is disabled'),\n // v0.4.18\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.18', new Date(2020, 7, 10), 'Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Prospect ability to the Underground to see which types of items are in the current layer'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Bomb ability to the Underground which will mine random tiles for you'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added ability to Skip layers in the Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added ability to sell/trade multiple items at once in the Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added volume control for notification sounds'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Some Pokémon now have a chance to drop rare items upon defeat'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Pokédex filter for Pokémon that drop rare items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Deoxys quest line'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Deoxys no longer roaming'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Separate Day Care modal into individual tabs for Pokémon, Eggs and Fossils'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update modal displays'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Event Pokémon no longer displayed in Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduce memory usage in Underground'),\n // v0.4.17\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.17', new Date(2020, 7, 6)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Update maps'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add notification settings'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add more notification sounds and settings'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can now filter the Pokédex by pure type Pokémon by selecting None for the second type'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added statistic for Hatched Shiny Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Caught indicator on eggs showing if you have obtained all the Pokémon available in that egg type'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Move some dungeons to be standalone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Safari Zone should no longer lock up'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Event Pokémon can now evolve'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Helix fossil now displays correctly when mining in the Underground'),\n // v0.4.16\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.16', new Date(2020, 6, 30)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added sounds for specific events'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added more settings'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'New maps'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated settings menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Shops will now only show the balance of currencies used there'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Gyms and Dungeons in the Johto and Hoenn regions have been buffed'),\n // v0.4.15\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.15', new Date(2020, 6, 27)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Eggs now have multiple different styles'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'xExp is now the Lucky Egg'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Currency, Item, Berry, Egg and Fossil images'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Day Care is now unlocked once you defeat Route 5'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Fossils will now show in the Hatchery'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update Farm layout for smaller displays'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update Safari Zone cost'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Underground now shows the 3 x 3 area which will be mined when using the hammer'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Underground total items should now be correct'),\n // v0.4.14\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.14', new Date(2020, 6, 22)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Dratini to Route 45'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Underground should now work better on smaller screens'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Enlarge buttons in Shortcut menu, Safari Zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Make Shop items fit better'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Breeding display takes up less space on smaller screens now'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Add confirmation when refreshing quest list'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Update Oak items tooltip when upgraded'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Auto refresh Daily Deals when upgrade purchased'),\n // v0.4.13\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.13', new Date(2020, 6, 20)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added shortcut module'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added Poké Mart to shortcuts module'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Masterball pricing'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Allow the game to continue running while Day Care is open'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Allow the game to continue running while Underground is open'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Don\\'t send the player back to Route 11 when leaving the Underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Allow the game to continue running while Farm is open'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Don\\'t send the player back to Route 14 when leaving the Farm'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added button to open Dock for cities located nearby'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Moved shiny icon further into the corner in the Day Care view, to make it easier to spot already shiny Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Dungeon size scales depending on region'),\n // v0.4.12\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.12', new Date(2020, 6, 18)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Modules can now be sorted/arranged any way you like, just drag and drop'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added confirmation when quiting a quest'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated dungeon token cost in Hoenn dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the gym fight view'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated some messages shown when you cannot access a location yet'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some battle background images were not showing, they should now appear correctly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Town Map will now be fully hidden when it is supposed to be'),\n // v0.4.11\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.11', new Date(2020, 6, 16)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Towns will show as orange if you have not yet completed the gym'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Map is able to be hidden now'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added mobile support to the Safari Zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'The Cell Battery Oak Item will now gain points each time you find an item'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the layout of the Shard modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the layout of the Safari Zone'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Stone evolutions will now only show the Pokéball if all possible evolutions have been caught'),\n // v0.4.10\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.10', new Date(2020, 6, 15)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added preload progress indicator'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Game will still load if not all the images preload correctly'),\n // v0.4.9\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.9', new Date(2020, 6, 14)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added option to disable found berries notifications'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added different background images when battling Pokémon depending on route/dungeon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Bootstrap, TypeScript and other dependencies, please report any problems you may notice'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Limit maximum Quest Points for Dungeon and Gym quests'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated quest list layout'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Format numbers in shop and Pokéball selector'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeons should now award Dungeon Tokens when catching a Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Badge names should display correctly now'),\n // v0.4.8\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.8', new Date(2020, 6, 12)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More events'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added caught status indicator to Safari Zone entrance'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added caught status indicator to Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show Oak Item details on hover on main screen'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated Oak Items modal to show current experience on hover'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Animate town and dungeon background images'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated battle views of routes and dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Event notifications showing way before event start'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Reduce lag when hatching Pokémon'),\n // v0.4.7\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.7', new Date(2020, 6, 9), 'Layout'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added option to sort Pokémon list by base attack'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added information and confirmation check before traveling to next available region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the Oak Items layout'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated layout of Towns and Dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the Hoenn map'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show the amount of Pokémon visible in Pokédex with filters active'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Event Pokémon no longer count towards achievements or being able to travel to next region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Mt. Chimney dungeon is now more powerful'),\n // v0.4.6\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.6', new Date(2020, 6, 7)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Old save can be backed up when the game updates incase anything goes wrong
You can disable auto download in the settings'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add events modal'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Safari now uses a Safari Ball'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added ability to track event Pokémon statistics'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update Discord link'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokéball should appear in dungeons again'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix Eeveelutions'),\n // v0.4.5\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.5', new Date(2020, 6, 5), 'Special events'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.EVENT, 'Flying Pikachu Event'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Special events can now appear in game'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Modified the look of the dock'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Always add caught Shiny Pokémon to the Log Book'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Added close button on the top right of more modals'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Dungeon layout should be shuffled again'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Hopefully fixed some values becoming NaN'),\n // v0.4.4\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.4', new Date(2020, 6, 4)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add some new game codes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Statistics can now be viewed from the Start Menu'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Pokémon statistics can be viewed by clicking a Pokémon in the Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update some game codes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.REMOVED, 'Remove old game codes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Can no longer breed fossils from regions you have not reached yet'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Added missing notifications for stone evolution Pokémon'),\n // v0.4.3\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.3', new Date(2020, 6, 3)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add setting to disable currency animations'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Increase some notifications display time'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Decreased price multiplier'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Modified Pokémon list reverse checkbox to show arrows instead'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated changelog layout'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix LilyCove City naming and image'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Tidy up Key items, Evolution stones selector'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Sketchy theme checkboxes and close icons should display correctly now'),\n // v0.4.2\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.2', new Date(2020, 6, 3)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fixed some Key items not being given when supposed to'),\n // v0.4.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.1', new Date(2020, 6, 3)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More items added to underground'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'All Hoenn Pokémon should be obtainable now'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokédex filtering should be working again'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Some items showing _ in their name in notifications'),\n // v0.4.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.4.0', new Date(2020, 6, 2), 'Statistics update'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Current save data should be compatible with future versions!'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'More statistics have been added'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated the way statistics are stored'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Updated notifications'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix some missing Hoenn Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix some missing images'),\n // v0.3.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.3.1', new Date(2020, 6, 1), 'Bug catcher'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Eevee will now evolve into Espeon or Umbreon depending on the time of day (when using Time stone)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Can no longer evolve Magmar and Electabuzz before you are allowed'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix breeding steps gained for newer regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix roaming encounters for newer regions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Fix route rewards for newer regions'),\n // v0.3.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.3.0', new Date(2020, 5, 30), 'Hoenn'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add initial Hoenn region'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Shiny Pokémon now increase click damage at a 50% rate compared to normal Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Allow better control of which type of ball to use when capturing a Pokémon'),\n // v0.2.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.2.1', new Date(2020, 0, 13)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.REMOVED, 'Remove Hoenn dungeons for now to avoid triggering errors'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Other berries will now be tasked in Quests'),\n // v0.2.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.2.0', new Date(2020, 0, 12), 'Redeemable codes'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add redeemable codes to get a quick boost. You can enter them under the Save tab'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Gyms no longer reset 1 second in'),\n // v0.1.0\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.1.0', new Date(2020, 0, 12), 'Farming refactor'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Farming plots are a bit more expensive'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Wailmer pail unlocks at 3 Cheri berries instead of 5'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Tooltips no longer overstay their welcome on the Farm'),\n // v0.0.5\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.0.5', new Date(2020, 0, 9)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can now use spacebar to start Gym/Dungeon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Stones now work with multiple evolutions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Pokémon will no longer evolve into evolutions you have already obtained'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Can obtain Pokémon from future generations by re-breeding'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Devolutions are obtained when breeding evolved forms'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add setting to toggle egg percentage/step count'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Total shiny Pokémon caught no longer adds to your click attack'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Halve xp needed to upgrade Oak items'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'BattleItems now buy correctly'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Increase dungeon tokens received when catching Pokémon'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Going to the breeder will no longer send you to route 5'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'You will now start the game with 25 Pokéballs'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Tutorial quest buy Pokéballs amount reduced'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Selecting \"max\" in store will no longer freeze the game for key items'),\n // v0.0.4 - 01-01-2020\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.0.4', new Date(2019, 11, 22)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Show Pokéball image by caught Pokémon in the Pokédex'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show the reason you cannot access a location'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Total shiny Pokémon caught now add to your total click attack'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Display floored dungeon tokens amount'),\n // v0.0.3\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.0.3', new Date(2019, 11, 17)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Can now progress in multiple quest at a time (amount based on Quest Level)'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Side cards can now be collapsed for more space'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Move battle item container'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update how achievement percentages are shown'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Update hatch/catch notification message'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Show the hatchery \"list\" button once Johto unlocked without page refresh'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Plates from underground should now sell for their correct value'),\n // v0.0.2\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.0.2', new Date(2019, 11, 16)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Added changelog'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.CHANGE, 'Show battle item names and descriptions'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Item magnet now works in dungeons'),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.FIXED, 'Battle items no longer always active'),\n // v0.0.1\n new _ChangelogUpdate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('v0.0.1', new Date(2019, 11, 16)),\n new _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.NEW, 'Add battle items'),\n];\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChangelogItems);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/changelog/ChangelogItems.ts?"); + +/***/ }), + +/***/ "./src/modules/changelog/ChangelogUpdate.ts": +/*!**************************************************!*\ + !*** ./src/modules/changelog/ChangelogUpdate.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ChangelogUpdate)\n/* harmony export */ });\n/* harmony import */ var _Changelog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Changelog */ \"./src/modules/changelog/Changelog.ts\");\n\nclass ChangelogUpdate extends _Changelog__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(version, date, desc = '') {\n super(_Changelog__WEBPACK_IMPORTED_MODULE_0__.changelogType.UPDATE, `${version}${desc ? ` - ${desc}` : ''} - ${date.toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })}`);\n this.version = version;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/changelog/ChangelogUpdate.ts?"); + +/***/ }), + +/***/ "./src/modules/codes/RedeemableCode.ts": +/*!*********************************************!*\ + !*** ./src/modules/codes/RedeemableCode.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RedeemableCode)\n/* harmony export */ });\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\nclass RedeemableCode {\n constructor(name, hash, isRedeemed, rewardFunction, requirement = undefined) {\n this.name = name;\n this.hash = hash;\n this.isRedeemed = isRedeemed;\n this.rewardFunction = rewardFunction;\n this.requirement = requirement;\n }\n redeem() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if (this.isRedeemed) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_0__[\"default\"].notify({\n message: 'You have already redeemed this code.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n return;\n }\n if (this.requirement && !this.requirement.isCompleted()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_0__[\"default\"].notify({\n message: 'Cannot redeem this code yet.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n return;\n }\n // If nothing returned, assume it was redeemed fine\n if ((_a = yield this.rewardFunction()) !== null && _a !== void 0 ? _a : true) {\n this.isRedeemed = true;\n }\n });\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/codes/RedeemableCode.ts?"); + +/***/ }), + +/***/ "./src/modules/codes/RedeemableCodeController.ts": +/*!*******************************************************!*\ + !*** ./src/modules/codes/RedeemableCodeController.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RedeemableCodeController)\n/* harmony export */ });\nclass RedeemableCodeController {\n static enterCode() {\n const el = document.getElementById('redeemable-code-input');\n const code = el.value;\n el.value = '';\n App.game.redeemableCodes.enterCode(code);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/codes/RedeemableCodeController.ts?"); + +/***/ }), + +/***/ "./src/modules/codes/RedeemableCodes.ts": +/*!**********************************************!*\ + !*** ./src/modules/codes/RedeemableCodes.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RedeemableCodes)\n/* harmony export */ });\n/* harmony import */ var _enums_BerryType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/BerryType */ \"./src/modules/enums/BerryType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../pokemons/PokemonList */ \"./src/modules/pokemons/PokemonList.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* harmony import */ var _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../requirements/MultiRequirement */ \"./src/modules/requirements/MultiRequirement.ts\");\n/* harmony import */ var _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../requirements/ObtainedPokemonRequirement */ \"./src/modules/requirements/ObtainedPokemonRequirement.ts\");\n/* harmony import */ var _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./RedeemableCode */ \"./src/modules/codes/RedeemableCode.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _wallet_Amount__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../wallet/Amount */ \"./src/modules/wallet/Amount.ts\");\n/* harmony import */ var _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../quests/QuestLineState */ \"./src/modules/quests/QuestLineState.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass RedeemableCodes {\n constructor() {\n this.saveKey = 'redeemableCodes';\n this.codeList = [\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('farming-quick-start', -83143881, false, () => __awaiter(this, void 0, void 0, function* () {\n // Give the player 10k farming points, 100 Cheri berries\n App.game.wallet.gainFarmPoints(10000);\n App.game.farming.gainBerry(_enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Cheri, 100, false);\n // Notify that the code was activated successfully\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code activated!',\n message: 'You gained 10,000 Farm Points and 100 Cheri Berries!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n return true;\n })),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('shiny-charmer', -318017456, false, () => __awaiter(this, void 0, void 0, function* () {\n // Select a random Pokemon to give the player as a shiny\n const pokemon = _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_6__.pokemonMap.randomRegion(player.highestRegion());\n // Floor the ID, only give base/main Pokemon forms\n const idToUse = Math.floor(pokemon.id);\n App.game.party.gainPokemonById(idToUse, true, true);\n // Notify that the code was activated successfully\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code activated!',\n message: `✨ You found a shiny ${_pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_6__.pokemonMap[idToUse].name}! ✨`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n return true;\n })),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('great-balls', -1761161712, false, () => __awaiter(this, void 0, void 0, function* () {\n // Give the player 10 Great Balls\n App.game.pokeballs.gainPokeballs(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Pokeball.Greatball, 10);\n // Notify that the code was activated successfully\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code activated!',\n message: 'You gained 10 Great Balls!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n return true;\n })),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('everstone', 1389168938, false, () => __awaiter(this, void 0, void 0, function* () {\n // Give the player 1 Everstone\n player.gainItem('Everstone', 1);\n // Notify that the code was activated successfully\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code activated!',\n message: 'You gained 1 Everstone!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n return true;\n })),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('typed-held-item', -2046503095, false, () => __awaiter(this, void 0, void 0, function* () {\n // Give the player 3 random typed held items\n const items = Object.values(_items_ItemList__WEBPACK_IMPORTED_MODULE_2__.ItemList).filter((i) => i.constructor.name === 'TypeRestrictedAttackBonusHeldItem')\n .sort(() => 0.5 - Math.random())\n .slice(0, 3);\n items.forEach((i) => i.gain(1));\n // Notify that the code was activated successfully\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code activated!',\n message: 'You gained 3 random Held Items, that boosts a specific type!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n return true;\n }), new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto)),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('eon-ticket', 528036885, false, () => __awaiter(this, void 0, void 0, function* () {\n // Give the player the Eon Ticket\n App.game.keyItems.gainKeyItem(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Eon_ticket, true);\n // Notify that the code was activated successfully\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code activated!',\n message: 'You got an Eon Ticket!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n return true;\n }), new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn)),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('ampharosite', -512934122, false, () => __awaiter(this, void 0, void 0, function* () {\n // Give the player Mega Ampharos\n player.gainMegaStone(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.MegaStoneType.Ampharosite);\n // Notify that the code was activated successfully\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code activated!',\n message: 'You gained an Ampharosite!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n return true;\n }), new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]([new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Ampharos')])),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('refund-vitamins', 1316108150, false, () => __awaiter(this, void 0, void 0, function* () {\n const vitamins = _GameHelper__WEBPACK_IMPORTED_MODULE_11__[\"default\"].enumStrings(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.VitaminType).map((name) => _items_ItemList__WEBPACK_IMPORTED_MODULE_2__.ItemList[name]);\n const toRefund = vitamins.map((item) => {\n const totalUsed = App.game.party.caughtPokemon.reduce((total, pokemon) => total + pokemon.vitaminsUsed[item.type](), 0);\n const totalNotUsed = player.itemList[item.name]();\n const capPriceAt = Math.ceil(Math.log(100) / Math.log(item.multiplier));\n let n = 0;\n if (totalUsed + totalNotUsed > capPriceAt) {\n n = totalUsed > capPriceAt\n ? totalNotUsed\n : totalNotUsed + totalUsed - capPriceAt;\n }\n return [item, n];\n });\n const refundAmounts = toRefund.reduce((totals, [item, n]) => {\n if (totals[item.currency] === undefined) {\n // eslint-disable-next-line no-param-reassign\n totals[item.currency] = 0;\n }\n const price = Math.round(item.basePrice * (player.itemMultipliers[item.saveName] || 1));\n // eslint-disable-next-line no-param-reassign\n totals[item.currency] += n * price;\n return totals;\n }, {});\n const refund = yield _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].confirm({\n title: 'Refund Unused Vitamins',\n message: `

This will refund ${toRefund.map(([item, n]) => `${n.toLocaleString('en-US')} ${item.name}`).join(', ')} for a total of ${Object.entries(refundAmounts)\n .map(([curr, amt]) => `${amt.toLocaleString('en-US')} ${_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency[curr]}`)\n .join(', ')}.

You can only do this once.
Are you sure?

`,\n });\n if (refund) {\n toRefund.forEach(([item, n]) => {\n player.loseItem(item.name, n);\n });\n Object.entries(refundAmounts).forEach(([curr, amt]) => {\n const refundAmt = new _wallet_Amount__WEBPACK_IMPORTED_MODULE_12__[\"default\"](amt, Number(curr));\n App.game.wallet.addAmount(refundAmt, true);\n });\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code Activated!',\n message: 'All unused vitamins refunded.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n }\n return refund;\n })),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('tutorial-skip', -253994129, false, () => __awaiter(this, void 0, void 0, function* () {\n const quest = App.game.quests.getQuestLine('Tutorial Quests');\n if (quest.state() != _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_13__[\"default\"].started) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Tutorial Skip',\n message: 'The Tutorial is already completed.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.warning,\n timeout: 1e4,\n });\n return false;\n }\n if (quest.curQuest() < 1) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Tutorial Skip',\n message: 'The first step of the Tutorial must first be completed.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.warning,\n timeout: 1e4,\n });\n return false;\n }\n while (quest.curQuest() < quest.totalQuests) {\n quest.curQuestObject().complete();\n }\n App.game.wallet.gainDungeonTokens(200);\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Tutorial Skip',\n message: 'You have skipped the tutorial, and found a stash of Dungeon Tokens.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.warning,\n timeout: 1e4,\n });\n return true;\n })),\n new _RedeemableCode__WEBPACK_IMPORTED_MODULE_10__[\"default\"]('Rare Candy', -296173205, false, () => __awaiter(this, void 0, void 0, function* () {\n // Give the player a few Rare Candies\n player.gainItem('Rare_Candy', 10);\n // Notify that the code was activated successfully\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n title: 'Code activated!',\n message: 'You gained 10 Rare Candy!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n });\n return true;\n })),\n ];\n }\n // eslint-disable-next-line class-methods-use-this\n isDiscordCode(code) {\n return /^\\w{4}-\\w{4}-\\w{4}$/.test(code);\n }\n enterCode(code) {\n // If this is a Discord code, send it to the Discord class to check\n if (App.game.discord.enabled && this.isDiscordCode(code)) {\n App.game.discord.enterCode(code);\n return;\n }\n const hash = _GameHelper__WEBPACK_IMPORTED_MODULE_11__[\"default\"].hash(code);\n const redeemableCode = this.codeList.find((c) => c.hash === hash);\n if (!redeemableCode) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n message: `Invalid code ${code}`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.danger,\n });\n return;\n }\n redeemableCode.redeem();\n }\n fromJSON(json) {\n if (json == null) {\n return;\n }\n json.forEach((name) => {\n const foundCode = this.codeList.find((code) => code.name === name);\n if (foundCode) {\n foundCode.isRedeemed = true;\n }\n });\n }\n toJSON() {\n return this.codeList.reduce((res, code) => {\n if (code.isRedeemed) {\n res.push(code.name);\n }\n return res;\n }, []);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/codes/RedeemableCodes.ts?"); + +/***/ }), + +/***/ "./src/modules/dayCycle/DayCycle.ts": +/*!******************************************!*\ + !*** ./src/modules/dayCycle/DayCycle.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DayCycle)\n/* harmony export */ });\n/* harmony import */ var _DayCycleMoment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DayCycleMoment */ \"./src/modules/dayCycle/DayCycleMoment.ts\");\n/* harmony import */ var _DayCyclePart__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DayCyclePart */ \"./src/modules/dayCycle/DayCyclePart.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\n\nclass DayCycle {\n}\nDayCycle.currentDayCyclePart = ko.pureComputed(() => {\n var _a, _b;\n const currentHour = _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].currentTime().getHours();\n return Number((_b = (_a = Object.entries(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.DayCycleStartHours).reverse().find(([, startHour]) => startHour <= currentHour)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : Object.keys(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.DayCycleStartHours).slice(-1));\n});\nDayCycle.image = ko.pureComputed(() => {\n return `assets/images/dayCycle/${_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"][DayCycle.currentDayCyclePart()]}.png`;\n});\nDayCycle.color = ko.pureComputed(() => {\n return DayCycle.dayCycleMoments[DayCycle.currentDayCyclePart()].color;\n});\nDayCycle.tooltip = ko.pureComputed(() => {\n return DayCycle.dayCycleMoments[DayCycle.currentDayCyclePart()].tooltip;\n});\nDayCycle.dayCycleMoments = {\n [_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Dawn]: new _DayCycleMoment__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Dawn, '#25b6a0', 'Dawn'),\n [_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Day]: new _DayCycleMoment__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Day, '#f4a470', 'Day'),\n [_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Dusk]: new _DayCycleMoment__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Dusk, '#93558a', 'Dusk'),\n [_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Night]: new _DayCycleMoment__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_DayCyclePart__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Night, '#4a6252', 'Night'),\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/dayCycle/DayCycle.ts?"); + +/***/ }), + +/***/ "./src/modules/dayCycle/DayCycleMoment.ts": +/*!************************************************!*\ + !*** ./src/modules/dayCycle/DayCycleMoment.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DayCycleMoment)\n/* harmony export */ });\n/* harmony import */ var _DayCyclePart__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DayCyclePart */ \"./src/modules/dayCycle/DayCyclePart.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\nclass DayCycleMoment {\n constructor(part, color, description) {\n this.part = part;\n this.color = color;\n this.description = description;\n }\n get tooltip() {\n const dayCycleStartHours = Object.entries(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayCycleStartHours);\n return dayCycleStartHours.map(([dayCyclePart, startHour], index) => {\n const [, endHour] = dayCycleStartHours[index + 1] || dayCycleStartHours[0];\n const content = `${_DayCyclePart__WEBPACK_IMPORTED_MODULE_0__[\"default\"][dayCyclePart]}: ${_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].twoDigitNumber(startHour)}:00 - ${_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].twoDigitNumber(endHour)}:00`;\n return _DayCyclePart__WEBPACK_IMPORTED_MODULE_0__[\"default\"][dayCyclePart] === _DayCyclePart__WEBPACK_IMPORTED_MODULE_0__[\"default\"][this.part]\n ? `${content}`\n : content;\n }).join('
');\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/dayCycle/DayCycleMoment.ts?"); + +/***/ }), + +/***/ "./src/modules/dayCycle/DayCyclePart.ts": +/*!**********************************************!*\ + !*** ./src/modules/dayCycle/DayCyclePart.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar DayCyclePart;\n(function (DayCyclePart) {\n DayCyclePart[DayCyclePart[\"Dawn\"] = 0] = \"Dawn\";\n DayCyclePart[DayCyclePart[\"Day\"] = 1] = \"Day\";\n DayCyclePart[DayCyclePart[\"Dusk\"] = 2] = \"Dusk\";\n DayCyclePart[DayCyclePart[\"Night\"] = 3] = \"Night\";\n})(DayCyclePart || (DayCyclePart = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DayCyclePart);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/dayCycle/DayCyclePart.ts?"); + +/***/ }), + +/***/ "./src/modules/effectEngine/effectEngineRunner.ts": +/*!********************************************************!*\ + !*** ./src/modules/effectEngine/effectEngineRunner.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EffectEngineRunner)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n\n\n\nclass EffectEngineRunner {\n static initialize(multiplier, items) {\n items.forEach((item) => {\n if (item.multiplierType) {\n multiplier.addBonus(item.multiplierType, () => (this.isActive(item.name)() ? item.multiplyBy : 1), item.displayName);\n }\n });\n }\n static tick() {\n this.counter = 0;\n const timeToReduce = 1;\n Object.values(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattleItemType).forEach((itemName) => {\n const timeRemaining = player.effectList[itemName]();\n if (timeRemaining > 0) {\n player.effectList[itemName](Math.max(0, timeRemaining - timeToReduce));\n this.updateFormattedTimeLeft(itemName);\n }\n if (player.effectList[itemName]() === 5) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: `The ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(itemName)}'s effect is about to wear off!`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.warning,\n sound: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationSound.General.battle_item_timer,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationSetting.Items.battle_item_timer,\n });\n }\n });\n }\n static incrementMultiplier() {\n this.multIndex((this.multIndex() + 1) % this.multipliers.length);\n }\n static decrementMultiplier() {\n this.multIndex((this.multIndex() + this.multipliers.length - 1) % this.multipliers.length);\n }\n static getEffect(itemName) {\n if (!player) {\n return 0;\n }\n return player.effectList[itemName]();\n }\n static addEffect(itemName, amount) {\n player.effectList[itemName](Math.max(0, player.effectList[itemName]() + (_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ITEM_USE_TIME * amount)));\n this.updateFormattedTimeLeft(itemName);\n }\n static updateFormattedTimeLeft(itemName) {\n const times = (0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.formatTime)(player.effectList[itemName]()).split(':');\n if (+times[0] > 99) {\n return player.effectTimer[itemName]('99h+');\n }\n if (+times[0] > 0) {\n return player.effectTimer[itemName](`${+times[0]}h`);\n }\n times.shift();\n return player.effectTimer[itemName](times.join(':'));\n }\n static getDungeonTokenMultiplier() {\n return this.isActive(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattleItemType.Token_collector)() ? 1.5 : 1;\n }\n static isActive(itemName) {\n return ko.pureComputed(() => {\n if (!player) {\n return false;\n }\n return !!player.effectList[itemName]();\n });\n }\n}\nEffectEngineRunner.counter = 0;\nEffectEngineRunner.multipliers = ['×1', '×10', '×100', '×1000', 'All'];\nEffectEngineRunner.multIndex = ko.observable(0);\nEffectEngineRunner.amountToUse = ko.pureComputed(() => (\n// Either the digits specified, or All (Infinity)\nNumber(EffectEngineRunner.multipliers[EffectEngineRunner.multIndex()].replace(/\\D/g, '')) || Infinity));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/effectEngine/effectEngineRunner.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/AuraType.ts": +/*!***************************************!*\ + !*** ./src/modules/enums/AuraType.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar AuraType;\n(function (AuraType) {\n AuraType[AuraType[\"Growth\"] = 0] = \"Growth\";\n AuraType[AuraType[\"Replant\"] = 1] = \"Replant\";\n AuraType[AuraType[\"Mutation\"] = 2] = \"Mutation\";\n AuraType[AuraType[\"Harvest\"] = 3] = \"Harvest\";\n AuraType[AuraType[\"Egg\"] = 4] = \"Egg\";\n AuraType[AuraType[\"Attract\"] = 5] = \"Attract\";\n AuraType[AuraType[\"Shiny\"] = 6] = \"Shiny\";\n AuraType[AuraType[\"Death\"] = 7] = \"Death\";\n AuraType[AuraType[\"Boost\"] = 8] = \"Boost\";\n AuraType[AuraType[\"Roaming\"] = 9] = \"Roaming\";\n AuraType[AuraType[\"Ev\"] = 10] = \"Ev\";\n AuraType[AuraType[\"Decay\"] = 11] = \"Decay\";\n AuraType[AuraType[\"Xp\"] = 12] = \"Xp\";\n})(AuraType || (AuraType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AuraType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/AuraType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/Badges.ts": +/*!*************************************!*\ + !*** ./src/modules/enums/Badges.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar BadgeEnums;\n(function (BadgeEnums) {\n BadgeEnums[BadgeEnums[\"None\"] = 0] = \"None\";\n // Kanto\n BadgeEnums[BadgeEnums[\"Boulder\"] = 1] = \"Boulder\";\n BadgeEnums[BadgeEnums[\"Cascade\"] = 2] = \"Cascade\";\n BadgeEnums[BadgeEnums[\"Thunder\"] = 3] = \"Thunder\";\n BadgeEnums[BadgeEnums[\"Rainbow\"] = 4] = \"Rainbow\";\n BadgeEnums[BadgeEnums[\"Soul\"] = 5] = \"Soul\";\n BadgeEnums[BadgeEnums[\"Marsh\"] = 6] = \"Marsh\";\n BadgeEnums[BadgeEnums[\"Volcano\"] = 7] = \"Volcano\";\n BadgeEnums[BadgeEnums[\"Earth\"] = 8] = \"Earth\";\n BadgeEnums[BadgeEnums[\"Elite_Lorelei\"] = 9] = \"Elite_Lorelei\";\n BadgeEnums[BadgeEnums[\"Elite_Bruno\"] = 10] = \"Elite_Bruno\";\n BadgeEnums[BadgeEnums[\"Elite_Agatha\"] = 11] = \"Elite_Agatha\";\n BadgeEnums[BadgeEnums[\"Elite_Lance\"] = 12] = \"Elite_Lance\";\n BadgeEnums[BadgeEnums[\"Elite_KantoChampion\"] = 13] = \"Elite_KantoChampion\";\n // Johto\n BadgeEnums[BadgeEnums[\"Zephyr\"] = 14] = \"Zephyr\";\n BadgeEnums[BadgeEnums[\"Hive\"] = 15] = \"Hive\";\n BadgeEnums[BadgeEnums[\"Plain\"] = 16] = \"Plain\";\n BadgeEnums[BadgeEnums[\"Fog\"] = 17] = \"Fog\";\n BadgeEnums[BadgeEnums[\"Storm\"] = 18] = \"Storm\";\n BadgeEnums[BadgeEnums[\"Mineral\"] = 19] = \"Mineral\";\n BadgeEnums[BadgeEnums[\"Glacier\"] = 20] = \"Glacier\";\n BadgeEnums[BadgeEnums[\"Rising\"] = 21] = \"Rising\";\n BadgeEnums[BadgeEnums[\"Elite_Will\"] = 22] = \"Elite_Will\";\n BadgeEnums[BadgeEnums[\"Elite_Koga\"] = 23] = \"Elite_Koga\";\n BadgeEnums[BadgeEnums[\"Elite_Bruno2\"] = 24] = \"Elite_Bruno2\";\n BadgeEnums[BadgeEnums[\"Elite_Karen\"] = 25] = \"Elite_Karen\";\n BadgeEnums[BadgeEnums[\"Elite_JohtoChampion\"] = 26] = \"Elite_JohtoChampion\";\n // Hoenn\n BadgeEnums[BadgeEnums[\"Stone\"] = 27] = \"Stone\";\n BadgeEnums[BadgeEnums[\"Knuckle\"] = 28] = \"Knuckle\";\n BadgeEnums[BadgeEnums[\"Dynamo\"] = 29] = \"Dynamo\";\n BadgeEnums[BadgeEnums[\"Heat\"] = 30] = \"Heat\";\n BadgeEnums[BadgeEnums[\"Balance\"] = 31] = \"Balance\";\n BadgeEnums[BadgeEnums[\"Feather\"] = 32] = \"Feather\";\n BadgeEnums[BadgeEnums[\"Mind\"] = 33] = \"Mind\";\n BadgeEnums[BadgeEnums[\"Rain\"] = 34] = \"Rain\";\n BadgeEnums[BadgeEnums[\"Elite_Sidney\"] = 35] = \"Elite_Sidney\";\n BadgeEnums[BadgeEnums[\"Elite_Phoebe\"] = 36] = \"Elite_Phoebe\";\n BadgeEnums[BadgeEnums[\"Elite_Glacia\"] = 37] = \"Elite_Glacia\";\n BadgeEnums[BadgeEnums[\"Elite_Drake\"] = 38] = \"Elite_Drake\";\n BadgeEnums[BadgeEnums[\"Elite_HoennChampion\"] = 39] = \"Elite_HoennChampion\";\n // Orange league\n BadgeEnums[BadgeEnums[\"Coral-Eye\"] = 40] = \"Coral-Eye\";\n BadgeEnums[BadgeEnums[\"Sea_Ruby\"] = 41] = \"Sea_Ruby\";\n BadgeEnums[BadgeEnums[\"Spike_Shell\"] = 42] = \"Spike_Shell\";\n BadgeEnums[BadgeEnums[\"Jade_Star\"] = 43] = \"Jade_Star\";\n BadgeEnums[BadgeEnums[\"Elite_OrangeChampion\"] = 44] = \"Elite_OrangeChampion\";\n // Orre\n BadgeEnums[BadgeEnums[\"Elite_F_Disk\"] = 45] = \"Elite_F_Disk\";\n BadgeEnums[BadgeEnums[\"Elite_L_Disk\"] = 46] = \"Elite_L_Disk\";\n BadgeEnums[BadgeEnums[\"Elite_R_Disk\"] = 47] = \"Elite_R_Disk\";\n BadgeEnums[BadgeEnums[\"Elite_U_Disk\"] = 48] = \"Elite_U_Disk\";\n BadgeEnums[BadgeEnums[\"Elite_ColosseumLovrina\"] = 49] = \"Elite_ColosseumLovrina\";\n BadgeEnums[BadgeEnums[\"Elite_ColosseumSnattle\"] = 50] = \"Elite_ColosseumSnattle\";\n BadgeEnums[BadgeEnums[\"Elite_ColosseumGorigan\"] = 51] = \"Elite_ColosseumGorigan\";\n BadgeEnums[BadgeEnums[\"Elite_ColosseumArdos\"] = 52] = \"Elite_ColosseumArdos\";\n BadgeEnums[BadgeEnums[\"Elite_ColosseumEldes\"] = 53] = \"Elite_ColosseumEldes\";\n // Sinnoh\n BadgeEnums[BadgeEnums[\"Coal\"] = 54] = \"Coal\";\n BadgeEnums[BadgeEnums[\"Forest\"] = 55] = \"Forest\";\n BadgeEnums[BadgeEnums[\"Relic\"] = 56] = \"Relic\";\n BadgeEnums[BadgeEnums[\"Cobble\"] = 57] = \"Cobble\";\n BadgeEnums[BadgeEnums[\"Fen\"] = 58] = \"Fen\";\n BadgeEnums[BadgeEnums[\"Mine\"] = 59] = \"Mine\";\n BadgeEnums[BadgeEnums[\"Icicle\"] = 60] = \"Icicle\";\n BadgeEnums[BadgeEnums[\"Beacon\"] = 61] = \"Beacon\";\n BadgeEnums[BadgeEnums[\"Elite_Aaron\"] = 62] = \"Elite_Aaron\";\n BadgeEnums[BadgeEnums[\"Elite_Bertha\"] = 63] = \"Elite_Bertha\";\n BadgeEnums[BadgeEnums[\"Elite_Flint\"] = 64] = \"Elite_Flint\";\n BadgeEnums[BadgeEnums[\"Elite_Lucian\"] = 65] = \"Elite_Lucian\";\n BadgeEnums[BadgeEnums[\"Elite_SinnohChampion\"] = 66] = \"Elite_SinnohChampion\";\n // Unova\n BadgeEnums[BadgeEnums[\"Basic\"] = 67] = \"Basic\";\n BadgeEnums[BadgeEnums[\"Toxic\"] = 68] = \"Toxic\";\n BadgeEnums[BadgeEnums[\"Insect\"] = 69] = \"Insect\";\n BadgeEnums[BadgeEnums[\"Bolt\"] = 70] = \"Bolt\";\n BadgeEnums[BadgeEnums[\"Quake\"] = 71] = \"Quake\";\n BadgeEnums[BadgeEnums[\"Jet\"] = 72] = \"Jet\";\n BadgeEnums[BadgeEnums[\"Legend\"] = 73] = \"Legend\";\n BadgeEnums[BadgeEnums[\"Wave\"] = 74] = \"Wave\";\n BadgeEnums[BadgeEnums[\"Elite_Shauntal\"] = 75] = \"Elite_Shauntal\";\n BadgeEnums[BadgeEnums[\"Elite_Marshal\"] = 76] = \"Elite_Marshal\";\n BadgeEnums[BadgeEnums[\"Elite_Grimsley\"] = 77] = \"Elite_Grimsley\";\n BadgeEnums[BadgeEnums[\"Elite_Caitlin\"] = 78] = \"Elite_Caitlin\";\n BadgeEnums[BadgeEnums[\"Elite_UnovaChampion\"] = 79] = \"Elite_UnovaChampion\";\n // Kalos\n BadgeEnums[BadgeEnums[\"Bug\"] = 80] = \"Bug\";\n BadgeEnums[BadgeEnums[\"Cliff\"] = 81] = \"Cliff\";\n BadgeEnums[BadgeEnums[\"Rumble\"] = 82] = \"Rumble\";\n BadgeEnums[BadgeEnums[\"Plant\"] = 83] = \"Plant\";\n BadgeEnums[BadgeEnums[\"Voltage\"] = 84] = \"Voltage\";\n BadgeEnums[BadgeEnums[\"Fairy\"] = 85] = \"Fairy\";\n BadgeEnums[BadgeEnums[\"Psychic\"] = 86] = \"Psychic\";\n BadgeEnums[BadgeEnums[\"Iceberg\"] = 87] = \"Iceberg\";\n BadgeEnums[BadgeEnums[\"Elite_Malva\"] = 88] = \"Elite_Malva\";\n BadgeEnums[BadgeEnums[\"Elite_Siebold\"] = 89] = \"Elite_Siebold\";\n BadgeEnums[BadgeEnums[\"Elite_Wikstrom\"] = 90] = \"Elite_Wikstrom\";\n BadgeEnums[BadgeEnums[\"Elite_Drasna\"] = 91] = \"Elite_Drasna\";\n BadgeEnums[BadgeEnums[\"Elite_KalosChampion\"] = 92] = \"Elite_KalosChampion\";\n // Alola\n BadgeEnums[BadgeEnums[\"Melemele_Stamp\"] = 93] = \"Melemele_Stamp\";\n BadgeEnums[BadgeEnums[\"Akala_Stamp\"] = 94] = \"Akala_Stamp\";\n BadgeEnums[BadgeEnums[\"Ula_Ula_Stamp\"] = 95] = \"Ula_Ula_Stamp\";\n BadgeEnums[BadgeEnums[\"Poni_Stamp\"] = 96] = \"Poni_Stamp\";\n BadgeEnums[BadgeEnums[\"Elite_Olivia\"] = 97] = \"Elite_Olivia\";\n BadgeEnums[BadgeEnums[\"Elite_Acerola\"] = 98] = \"Elite_Acerola\";\n BadgeEnums[BadgeEnums[\"Elite_Molayne\"] = 99] = \"Elite_Molayne\";\n BadgeEnums[BadgeEnums[\"Elite_Kahili\"] = 100] = \"Elite_Kahili\";\n BadgeEnums[BadgeEnums[\"Champion_Stamp\"] = 101] = \"Champion_Stamp\";\n // Magikarp Jump\n BadgeEnums[BadgeEnums[\"Friend_League\"] = 102] = \"Friend_League\";\n BadgeEnums[BadgeEnums[\"Quick_League\"] = 103] = \"Quick_League\";\n BadgeEnums[BadgeEnums[\"Heavy_League\"] = 104] = \"Heavy_League\";\n BadgeEnums[BadgeEnums[\"Great_League\"] = 105] = \"Great_League\";\n BadgeEnums[BadgeEnums[\"Fast_League\"] = 106] = \"Fast_League\";\n BadgeEnums[BadgeEnums[\"Luxury_League\"] = 107] = \"Luxury_League\";\n BadgeEnums[BadgeEnums[\"Heal_League\"] = 108] = \"Heal_League\";\n BadgeEnums[BadgeEnums[\"Ultra_League\"] = 109] = \"Ultra_League\";\n BadgeEnums[BadgeEnums[\"E4_League\"] = 110] = \"E4_League\";\n BadgeEnums[BadgeEnums[\"Master_League\"] = 111] = \"Master_League\";\n // Galar\n BadgeEnums[BadgeEnums[\"Galar_Grass\"] = 112] = \"Galar_Grass\";\n BadgeEnums[BadgeEnums[\"Galar_Water\"] = 113] = \"Galar_Water\";\n BadgeEnums[BadgeEnums[\"Galar_Fire\"] = 114] = \"Galar_Fire\";\n BadgeEnums[BadgeEnums[\"Galar_Fighting\"] = 115] = \"Galar_Fighting\";\n BadgeEnums[BadgeEnums[\"Galar_Ghost\"] = 116] = \"Galar_Ghost\";\n BadgeEnums[BadgeEnums[\"Galar_Fairy\"] = 117] = \"Galar_Fairy\";\n BadgeEnums[BadgeEnums[\"Galar_Rock\"] = 118] = \"Galar_Rock\";\n BadgeEnums[BadgeEnums[\"Galar_Ice\"] = 119] = \"Galar_Ice\";\n BadgeEnums[BadgeEnums[\"Galar_Dark\"] = 120] = \"Galar_Dark\";\n BadgeEnums[BadgeEnums[\"Galar_Dragon\"] = 121] = \"Galar_Dragon\";\n BadgeEnums[BadgeEnums[\"Elite_Marnie\"] = 122] = \"Elite_Marnie\";\n BadgeEnums[BadgeEnums[\"Elite_Bede\"] = 123] = \"Elite_Bede\";\n BadgeEnums[BadgeEnums[\"Elite_Hop\"] = 124] = \"Elite_Hop\";\n BadgeEnums[BadgeEnums[\"Elite_GalarChampion\"] = 125] = \"Elite_GalarChampion\";\n // Armor\n BadgeEnums[BadgeEnums[\"Elite_ArmorPoison\"] = 126] = \"Elite_ArmorPoison\";\n BadgeEnums[BadgeEnums[\"Elite_ArmorPsychic\"] = 127] = \"Elite_ArmorPsychic\";\n BadgeEnums[BadgeEnums[\"Elite_ArmorMatron\"] = 128] = \"Elite_ArmorMatron\";\n BadgeEnums[BadgeEnums[\"Elite_ArmorChampion\"] = 129] = \"Elite_ArmorChampion\";\n // Crown\n BadgeEnums[BadgeEnums[\"Elite_CrownChampion\"] = 130] = \"Elite_CrownChampion\";\n // Hisui\n BadgeEnums[BadgeEnums[\"Noble_Kleavor\"] = 131] = \"Noble_Kleavor\";\n BadgeEnums[BadgeEnums[\"Noble_Lilligant\"] = 132] = \"Noble_Lilligant\";\n BadgeEnums[BadgeEnums[\"Noble_Arcanine\"] = 133] = \"Noble_Arcanine\";\n BadgeEnums[BadgeEnums[\"Noble_Electrode\"] = 134] = \"Noble_Electrode\";\n BadgeEnums[BadgeEnums[\"Noble_Avalugg\"] = 135] = \"Noble_Avalugg\";\n BadgeEnums[BadgeEnums[\"Azure\"] = 136] = \"Azure\";\n //Paldea Victory Road\n BadgeEnums[BadgeEnums[\"Bug_Gym\"] = 137] = \"Bug_Gym\";\n BadgeEnums[BadgeEnums[\"Grass_Gym\"] = 138] = \"Grass_Gym\";\n BadgeEnums[BadgeEnums[\"Electric_Gym\"] = 139] = \"Electric_Gym\";\n BadgeEnums[BadgeEnums[\"Water_Gym\"] = 140] = \"Water_Gym\";\n BadgeEnums[BadgeEnums[\"Normal_Gym\"] = 141] = \"Normal_Gym\";\n BadgeEnums[BadgeEnums[\"Ghost_Gym\"] = 142] = \"Ghost_Gym\";\n BadgeEnums[BadgeEnums[\"Psychic_Gym\"] = 143] = \"Psychic_Gym\";\n BadgeEnums[BadgeEnums[\"Ice_Gym\"] = 144] = \"Ice_Gym\";\n BadgeEnums[BadgeEnums[\"Elite_Rika\"] = 145] = \"Elite_Rika\";\n BadgeEnums[BadgeEnums[\"Elite_Poppy\"] = 146] = \"Elite_Poppy\";\n BadgeEnums[BadgeEnums[\"Elite_Larry\"] = 147] = \"Elite_Larry\";\n BadgeEnums[BadgeEnums[\"Elite_Hassel\"] = 148] = \"Elite_Hassel\";\n BadgeEnums[BadgeEnums[\"Elite_PaldeaChampion\"] = 149] = \"Elite_PaldeaChampion\";\n BadgeEnums[BadgeEnums[\"Elite_Nemona\"] = 150] = \"Elite_Nemona\";\n // Starfall Street\n BadgeEnums[BadgeEnums[\"Dark_Star\"] = 151] = \"Dark_Star\";\n BadgeEnums[BadgeEnums[\"Fire_Star\"] = 152] = \"Fire_Star\";\n BadgeEnums[BadgeEnums[\"Poison_Star\"] = 153] = \"Poison_Star\";\n BadgeEnums[BadgeEnums[\"Fairy_Star\"] = 154] = \"Fairy_Star\";\n BadgeEnums[BadgeEnums[\"Fighting_Star\"] = 155] = \"Fighting_Star\";\n BadgeEnums[BadgeEnums[\"Elite_Clavell\"] = 156] = \"Elite_Clavell\";\n BadgeEnums[BadgeEnums[\"Elite_Penny\"] = 157] = \"Elite_Penny\";\n // Path of Legends\n BadgeEnums[BadgeEnums[\"Rock_Titan\"] = 158] = \"Rock_Titan\";\n BadgeEnums[BadgeEnums[\"Flying_Titan\"] = 159] = \"Flying_Titan\";\n BadgeEnums[BadgeEnums[\"Steel_Titan\"] = 160] = \"Steel_Titan\";\n BadgeEnums[BadgeEnums[\"Ground_Titan\"] = 161] = \"Ground_Titan\";\n BadgeEnums[BadgeEnums[\"Dragon_Titan\"] = 162] = \"Dragon_Titan\";\n BadgeEnums[BadgeEnums[\"Elite_Arven\"] = 163] = \"Elite_Arven\";\n // The Way Home\n BadgeEnums[BadgeEnums[\"Scarlet\"] = 164] = \"Scarlet\";\n BadgeEnums[BadgeEnums[\"Violet\"] = 165] = \"Violet\";\n})(BadgeEnums || (BadgeEnums = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BadgeEnums);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/Badges.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/BerryColor.ts": +/*!*****************************************!*\ + !*** ./src/modules/enums/BerryColor.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar BerryColor;\n(function (BerryColor) {\n BerryColor[BerryColor[\"Red\"] = 0] = \"Red\";\n BerryColor[BerryColor[\"Purple\"] = 1] = \"Purple\";\n BerryColor[BerryColor[\"Pink\"] = 2] = \"Pink\";\n BerryColor[BerryColor[\"Green\"] = 3] = \"Green\";\n BerryColor[BerryColor[\"Yellow\"] = 4] = \"Yellow\";\n BerryColor[BerryColor[\"Blue\"] = 5] = \"Blue\";\n BerryColor[BerryColor[\"Silver\"] = 6] = \"Silver\";\n BerryColor[BerryColor[\"Gold\"] = 7] = \"Gold\";\n})(BerryColor || (BerryColor = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BerryColor);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/BerryColor.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/BerryFirmness.ts": +/*!********************************************!*\ + !*** ./src/modules/enums/BerryFirmness.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar BerryFirmness;\n(function (BerryFirmness) {\n BerryFirmness[BerryFirmness[\"Very_Soft\"] = 0] = \"Very_Soft\";\n BerryFirmness[BerryFirmness[\"Soft\"] = 1] = \"Soft\";\n BerryFirmness[BerryFirmness[\"Hard\"] = 2] = \"Hard\";\n BerryFirmness[BerryFirmness[\"Very_Hard\"] = 3] = \"Very_Hard\";\n BerryFirmness[BerryFirmness[\"Super_Hard\"] = 4] = \"Super_Hard\";\n})(BerryFirmness || (BerryFirmness = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BerryFirmness);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/BerryFirmness.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/BerryType.ts": +/*!****************************************!*\ + !*** ./src/modules/enums/BerryType.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar BerryType;\n(function (BerryType) {\n BerryType[BerryType[\"None\"] = -1] = \"None\";\n // First generation\n BerryType[BerryType[\"Cheri\"] = 0] = \"Cheri\";\n BerryType[BerryType[\"Chesto\"] = 1] = \"Chesto\";\n BerryType[BerryType[\"Pecha\"] = 2] = \"Pecha\";\n BerryType[BerryType[\"Rawst\"] = 3] = \"Rawst\";\n BerryType[BerryType[\"Aspear\"] = 4] = \"Aspear\";\n BerryType[BerryType[\"Leppa\"] = 5] = \"Leppa\";\n BerryType[BerryType[\"Oran\"] = 6] = \"Oran\";\n BerryType[BerryType[\"Sitrus\"] = 7] = \"Sitrus\";\n // Second generation\n BerryType[BerryType[\"Persim\"] = 8] = \"Persim\";\n BerryType[BerryType[\"Razz\"] = 9] = \"Razz\";\n BerryType[BerryType[\"Bluk\"] = 10] = \"Bluk\";\n BerryType[BerryType[\"Nanab\"] = 11] = \"Nanab\";\n BerryType[BerryType[\"Wepear\"] = 12] = \"Wepear\";\n BerryType[BerryType[\"Pinap\"] = 13] = \"Pinap\";\n BerryType[BerryType[\"Figy\"] = 14] = \"Figy\";\n BerryType[BerryType[\"Wiki\"] = 15] = \"Wiki\";\n BerryType[BerryType[\"Mago\"] = 16] = \"Mago\";\n BerryType[BerryType[\"Aguav\"] = 17] = \"Aguav\";\n BerryType[BerryType[\"Iapapa\"] = 18] = \"Iapapa\";\n BerryType[BerryType[\"Lum\"] = 19] = \"Lum\";\n // Third Generation\n BerryType[BerryType[\"Pomeg\"] = 20] = \"Pomeg\";\n BerryType[BerryType[\"Kelpsy\"] = 21] = \"Kelpsy\";\n BerryType[BerryType[\"Qualot\"] = 22] = \"Qualot\";\n BerryType[BerryType[\"Hondew\"] = 23] = \"Hondew\";\n BerryType[BerryType[\"Grepa\"] = 24] = \"Grepa\";\n BerryType[BerryType[\"Tamato\"] = 25] = \"Tamato\";\n BerryType[BerryType[\"Cornn\"] = 26] = \"Cornn\";\n BerryType[BerryType[\"Magost\"] = 27] = \"Magost\";\n BerryType[BerryType[\"Rabuta\"] = 28] = \"Rabuta\";\n BerryType[BerryType[\"Nomel\"] = 29] = \"Nomel\";\n BerryType[BerryType[\"Spelon\"] = 30] = \"Spelon\";\n BerryType[BerryType[\"Pamtre\"] = 31] = \"Pamtre\";\n BerryType[BerryType[\"Watmel\"] = 32] = \"Watmel\";\n BerryType[BerryType[\"Durin\"] = 33] = \"Durin\";\n BerryType[BerryType[\"Belue\"] = 34] = \"Belue\";\n BerryType[BerryType[\"Pinkan\"] = 35] = \"Pinkan\";\n // Fourth Generation (Typed)\n BerryType[BerryType[\"Occa\"] = 36] = \"Occa\";\n BerryType[BerryType[\"Passho\"] = 37] = \"Passho\";\n BerryType[BerryType[\"Wacan\"] = 38] = \"Wacan\";\n BerryType[BerryType[\"Rindo\"] = 39] = \"Rindo\";\n BerryType[BerryType[\"Yache\"] = 40] = \"Yache\";\n BerryType[BerryType[\"Chople\"] = 41] = \"Chople\";\n BerryType[BerryType[\"Kebia\"] = 42] = \"Kebia\";\n BerryType[BerryType[\"Shuca\"] = 43] = \"Shuca\";\n BerryType[BerryType[\"Coba\"] = 44] = \"Coba\";\n BerryType[BerryType[\"Payapa\"] = 45] = \"Payapa\";\n BerryType[BerryType[\"Tanga\"] = 46] = \"Tanga\";\n BerryType[BerryType[\"Charti\"] = 47] = \"Charti\";\n BerryType[BerryType[\"Kasib\"] = 48] = \"Kasib\";\n BerryType[BerryType[\"Haban\"] = 49] = \"Haban\";\n BerryType[BerryType[\"Colbur\"] = 50] = \"Colbur\";\n BerryType[BerryType[\"Babiri\"] = 51] = \"Babiri\";\n BerryType[BerryType[\"Chilan\"] = 52] = \"Chilan\";\n BerryType[BerryType[\"Roseli\"] = 53] = \"Roseli\";\n BerryType[BerryType[\"Snover\"] = 54] = \"Snover\";\n // Fifth Generation\n BerryType[BerryType[\"Micle\"] = 55] = \"Micle\";\n BerryType[BerryType[\"Custap\"] = 56] = \"Custap\";\n BerryType[BerryType[\"Jaboca\"] = 57] = \"Jaboca\";\n BerryType[BerryType[\"Rowap\"] = 58] = \"Rowap\";\n BerryType[BerryType[\"Kee\"] = 59] = \"Kee\";\n BerryType[BerryType[\"Maranga\"] = 60] = \"Maranga\";\n BerryType[BerryType[\"Liechi\"] = 61] = \"Liechi\";\n BerryType[BerryType[\"Ganlon\"] = 62] = \"Ganlon\";\n BerryType[BerryType[\"Salac\"] = 63] = \"Salac\";\n BerryType[BerryType[\"Petaya\"] = 64] = \"Petaya\";\n BerryType[BerryType[\"Apicot\"] = 65] = \"Apicot\";\n BerryType[BerryType[\"Lansat\"] = 66] = \"Lansat\";\n BerryType[BerryType[\"Starf\"] = 67] = \"Starf\";\n BerryType[BerryType[\"Enigma\"] = 68] = \"Enigma\";\n BerryType[BerryType[\"Hopo\"] = 69] = \"Hopo\";\n})(BerryType || (BerryType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BerryType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/BerryType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/CaughtStatus.ts": +/*!*******************************************!*\ + !*** ./src/modules/enums/CaughtStatus.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar CaughtStatus;\n(function (CaughtStatus) {\n CaughtStatus[CaughtStatus[\"NotCaught\"] = 0] = \"NotCaught\";\n CaughtStatus[CaughtStatus[\"Caught\"] = 1] = \"Caught\";\n CaughtStatus[CaughtStatus[\"CaughtShiny\"] = 2] = \"CaughtShiny\";\n})(CaughtStatus || (CaughtStatus = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CaughtStatus);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/CaughtStatus.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/EncounterType.ts": +/*!********************************************!*\ + !*** ./src/modules/enums/EncounterType.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar EncounterType;\n(function (EncounterType) {\n EncounterType[\"route\"] = \"Route\";\n EncounterType[\"dungeon\"] = \"Dungeon\";\n EncounterType[\"dungeonBoss\"] = \"Dungeon Boss\";\n EncounterType[\"mimic\"] = \"Mimic\";\n EncounterType[\"roamer\"] = \"Roamer\";\n EncounterType[\"trainer\"] = \"Trainer\";\n EncounterType[\"ultraBeast\"] = \"Ultra Beast\";\n EncounterType[\"wanderer\"] = \"Wanderer\";\n})(EncounterType || (EncounterType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EncounterType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/EncounterType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/EvolutionType.ts": +/*!********************************************!*\ + !*** ./src/modules/enums/EvolutionType.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar EvolutionType;\n(function (EvolutionType) {\n EvolutionType[EvolutionType[\"Level\"] = 0] = \"Level\";\n EvolutionType[EvolutionType[\"Stone\"] = 1] = \"Stone\";\n EvolutionType[EvolutionType[\"Timed\"] = 2] = \"Timed\";\n EvolutionType[EvolutionType[\"Dungeon\"] = 3] = \"Dungeon\";\n EvolutionType[EvolutionType[\"Gym\"] = 4] = \"Gym\";\n EvolutionType[EvolutionType[\"Region\"] = 5] = \"Region\";\n EvolutionType[EvolutionType[\"Environment\"] = 6] = \"Environment\";\n EvolutionType[EvolutionType[\"Weather\"] = 7] = \"Weather\";\n EvolutionType[EvolutionType[\"Other\"] = 8] = \"Other\";\n EvolutionType[EvolutionType[\"Questline\"] = 9] = \"Questline\";\n})(EvolutionType || (EvolutionType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EvolutionType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/EvolutionType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/FarmNotificationType.ts": +/*!***************************************************!*\ + !*** ./src/modules/enums/FarmNotificationType.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar FarmNotificationType;\n(function (FarmNotificationType) {\n FarmNotificationType[FarmNotificationType[\"Ripe\"] = 0] = \"Ripe\";\n FarmNotificationType[FarmNotificationType[\"AboutToWither\"] = 1] = \"AboutToWither\";\n FarmNotificationType[FarmNotificationType[\"Withered\"] = 2] = \"Withered\";\n FarmNotificationType[FarmNotificationType[\"Mutated\"] = 3] = \"Mutated\";\n FarmNotificationType[FarmNotificationType[\"Replanted\"] = 4] = \"Replanted\";\n FarmNotificationType[FarmNotificationType[\"Dropped\"] = 5] = \"Dropped\";\n FarmNotificationType[FarmNotificationType[\"MulchRanOut\"] = 6] = \"MulchRanOut\";\n FarmNotificationType[FarmNotificationType[\"Wander\"] = 7] = \"Wander\";\n})(FarmNotificationType || (FarmNotificationType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FarmNotificationType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/FarmNotificationType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/FarmingTool.ts": +/*!******************************************!*\ + !*** ./src/modules/enums/FarmingTool.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar FarmingTool;\n(function (FarmingTool) {\n FarmingTool[FarmingTool[\"Berry\"] = 0] = \"Berry\";\n FarmingTool[FarmingTool[\"Mulch\"] = 1] = \"Mulch\";\n FarmingTool[FarmingTool[\"Shovel\"] = 2] = \"Shovel\";\n FarmingTool[FarmingTool[\"MulchShovel\"] = 3] = \"MulchShovel\";\n FarmingTool[FarmingTool[\"Lock\"] = 4] = \"Lock\";\n})(FarmingTool || (FarmingTool = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FarmingTool);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/FarmingTool.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/FlavorType.ts": +/*!*****************************************!*\ + !*** ./src/modules/enums/FlavorType.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar FlavorType;\n(function (FlavorType) {\n FlavorType[FlavorType[\"Spicy\"] = 0] = \"Spicy\";\n FlavorType[FlavorType[\"Dry\"] = 1] = \"Dry\";\n FlavorType[FlavorType[\"Sweet\"] = 2] = \"Sweet\";\n FlavorType[FlavorType[\"Bitter\"] = 3] = \"Bitter\";\n FlavorType[FlavorType[\"Sour\"] = 4] = \"Sour\";\n})(FlavorType || (FlavorType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FlavorType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/FlavorType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/ItemType.ts": +/*!***************************************!*\ + !*** ./src/modules/enums/ItemType.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar ItemType;\n(function (ItemType) {\n ItemType[ItemType[\"item\"] = 1] = \"item\";\n ItemType[ItemType[\"underground\"] = 2] = \"underground\";\n ItemType[ItemType[\"berry\"] = 3] = \"berry\";\n ItemType[ItemType[\"gem\"] = 4] = \"gem\";\n})(ItemType || (ItemType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ItemType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/ItemType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/KeyItemType.ts": +/*!******************************************!*\ + !*** ./src/modules/enums/KeyItemType.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar KeyItemType;\n(function (KeyItemType) {\n KeyItemType[KeyItemType[\"Teachy_tv\"] = 0] = \"Teachy_tv\";\n KeyItemType[KeyItemType[\"Coin_case\"] = 1] = \"Coin_case\";\n KeyItemType[KeyItemType[\"Pokeball_bag\"] = 2] = \"Pokeball_bag\";\n KeyItemType[KeyItemType[\"Town_map\"] = 3] = \"Town_map\";\n KeyItemType[KeyItemType[\"Dungeon_ticket\"] = 4] = \"Dungeon_ticket\";\n KeyItemType[KeyItemType[\"Super_rod\"] = 5] = \"Super_rod\";\n KeyItemType[KeyItemType[\"Holo_caster\"] = 6] = \"Holo_caster\";\n KeyItemType[KeyItemType[\"Mystery_egg\"] = 7] = \"Mystery_egg\";\n KeyItemType[KeyItemType[\"Safari_ticket\"] = 8] = \"Safari_ticket\";\n KeyItemType[KeyItemType[\"Wailmer_pail\"] = 9] = \"Wailmer_pail\";\n KeyItemType[KeyItemType[\"Explorer_kit\"] = 10] = \"Explorer_kit\";\n KeyItemType[KeyItemType[\"Eon_ticket\"] = 11] = \"Eon_ticket\";\n KeyItemType[KeyItemType[\"Event_calendar\"] = 12] = \"Event_calendar\";\n KeyItemType[KeyItemType[\"Gem_case\"] = 13] = \"Gem_case\";\n KeyItemType[KeyItemType[\"DNA_splicers\"] = 14] = \"DNA_splicers\";\n KeyItemType[KeyItemType[\"Reins_of_unity\"] = 15] = \"Reins_of_unity\";\n KeyItemType[KeyItemType[\"Pokerus_virus\"] = 16] = \"Pokerus_virus\";\n KeyItemType[KeyItemType[\"Z-Power_Ring\"] = 17] = \"Z-Power_Ring\";\n})(KeyItemType || (KeyItemType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (KeyItemType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/KeyItemType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/MulchType.ts": +/*!****************************************!*\ + !*** ./src/modules/enums/MulchType.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar MulchType;\n(function (MulchType) {\n MulchType[MulchType[\"None\"] = -1] = \"None\";\n MulchType[MulchType[\"Boost_Mulch\"] = 0] = \"Boost_Mulch\";\n MulchType[MulchType[\"Rich_Mulch\"] = 1] = \"Rich_Mulch\";\n MulchType[MulchType[\"Surprise_Mulch\"] = 2] = \"Surprise_Mulch\";\n MulchType[MulchType[\"Amaze_Mulch\"] = 3] = \"Amaze_Mulch\";\n MulchType[MulchType[\"Freeze_Mulch\"] = 4] = \"Freeze_Mulch\";\n MulchType[MulchType[\"Gooey_Mulch\"] = 5] = \"Gooey_Mulch\";\n})(MulchType || (MulchType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MulchType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/MulchType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/OakItemType.ts": +/*!******************************************!*\ + !*** ./src/modules/enums/OakItemType.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar OakItemType;\n(function (OakItemType) {\n OakItemType[OakItemType[\"Magic_Ball\"] = 0] = \"Magic_Ball\";\n OakItemType[OakItemType[\"Amulet_Coin\"] = 1] = \"Amulet_Coin\";\n OakItemType[OakItemType[\"Rocky_Helmet\"] = 2] = \"Rocky_Helmet\";\n OakItemType[OakItemType[\"Exp_Share\"] = 3] = \"Exp_Share\";\n OakItemType[OakItemType[\"Sprayduck\"] = 4] = \"Sprayduck\";\n OakItemType[OakItemType[\"Shiny_Charm\"] = 5] = \"Shiny_Charm\";\n OakItemType[OakItemType[\"Magma_Stone\"] = 6] = \"Magma_Stone\";\n OakItemType[OakItemType[\"Cell_Battery\"] = 7] = \"Cell_Battery\";\n OakItemType[OakItemType[\"Squirtbottle\"] = 8] = \"Squirtbottle\";\n OakItemType[OakItemType[\"Sprinklotad\"] = 9] = \"Sprinklotad\";\n OakItemType[OakItemType[\"Explosive_Charge\"] = 10] = \"Explosive_Charge\";\n OakItemType[OakItemType[\"Treasure_Scanner\"] = 11] = \"Treasure_Scanner\";\n})(OakItemType || (OakItemType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OakItemType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/OakItemType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/PlotStage.ts": +/*!****************************************!*\ + !*** ./src/modules/enums/PlotStage.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar PlotStage;\n(function (PlotStage) {\n PlotStage[PlotStage[\"Seed\"] = 0] = \"Seed\";\n PlotStage[PlotStage[\"Sprout\"] = 1] = \"Sprout\";\n PlotStage[PlotStage[\"Taller\"] = 2] = \"Taller\";\n PlotStage[PlotStage[\"Bloom\"] = 3] = \"Bloom\";\n PlotStage[PlotStage[\"Berry\"] = 4] = \"Berry\";\n})(PlotStage || (PlotStage = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PlotStage);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/PlotStage.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/PokemonType.ts": +/*!******************************************!*\ + !*** ./src/modules/enums/PokemonType.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar PokemonType;\n(function (PokemonType) {\n PokemonType[PokemonType[\"None\"] = -1] = \"None\";\n PokemonType[PokemonType[\"Normal\"] = 0] = \"Normal\";\n PokemonType[PokemonType[\"Fire\"] = 1] = \"Fire\";\n PokemonType[PokemonType[\"Water\"] = 2] = \"Water\";\n PokemonType[PokemonType[\"Electric\"] = 3] = \"Electric\";\n PokemonType[PokemonType[\"Grass\"] = 4] = \"Grass\";\n PokemonType[PokemonType[\"Ice\"] = 5] = \"Ice\";\n PokemonType[PokemonType[\"Fighting\"] = 6] = \"Fighting\";\n PokemonType[PokemonType[\"Poison\"] = 7] = \"Poison\";\n PokemonType[PokemonType[\"Ground\"] = 8] = \"Ground\";\n PokemonType[PokemonType[\"Flying\"] = 9] = \"Flying\";\n PokemonType[PokemonType[\"Psychic\"] = 10] = \"Psychic\";\n PokemonType[PokemonType[\"Bug\"] = 11] = \"Bug\";\n PokemonType[PokemonType[\"Rock\"] = 12] = \"Rock\";\n PokemonType[PokemonType[\"Ghost\"] = 13] = \"Ghost\";\n PokemonType[PokemonType[\"Dragon\"] = 14] = \"Dragon\";\n PokemonType[PokemonType[\"Dark\"] = 15] = \"Dark\";\n PokemonType[PokemonType[\"Steel\"] = 16] = \"Steel\";\n PokemonType[PokemonType[\"Fairy\"] = 17] = \"Fairy\";\n})(PokemonType || (PokemonType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PokemonType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/PokemonType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/SafariEnvironments.ts": +/*!*************************************************!*\ + !*** ./src/modules/enums/SafariEnvironments.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar SafariEnvironments;\n(function (SafariEnvironments) {\n SafariEnvironments[SafariEnvironments[\"Grass\"] = 0] = \"Grass\";\n SafariEnvironments[SafariEnvironments[\"Water\"] = 1] = \"Water\";\n})(SafariEnvironments || (SafariEnvironments = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SafariEnvironments);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/SafariEnvironments.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/SizeUnits.ts": +/*!****************************************!*\ + !*** ./src/modules/enums/SizeUnits.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar SizeUnits;\n(function (SizeUnits) {\n SizeUnits[SizeUnits[\"inch\"] = 0] = \"inch\";\n SizeUnits[SizeUnits[\"cm\"] = 1] = \"cm\";\n})(SizeUnits || (SizeUnits = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SizeUnits);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/SizeUnits.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/UndergroundItemValueType.ts": +/*!*******************************************************!*\ + !*** ./src/modules/enums/UndergroundItemValueType.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar UndergroundItemValueType;\n(function (UndergroundItemValueType) {\n UndergroundItemValueType[UndergroundItemValueType[\"Diamond\"] = 0] = \"Diamond\";\n UndergroundItemValueType[UndergroundItemValueType[\"Gem\"] = 1] = \"Gem\";\n UndergroundItemValueType[UndergroundItemValueType[\"Shard\"] = 2] = \"Shard\";\n UndergroundItemValueType[UndergroundItemValueType[\"Fossil\"] = 3] = \"Fossil\";\n UndergroundItemValueType[UndergroundItemValueType[\"FossilPiece\"] = 4] = \"FossilPiece\";\n UndergroundItemValueType[UndergroundItemValueType[\"EvolutionItem\"] = 5] = \"EvolutionItem\";\n UndergroundItemValueType[UndergroundItemValueType[\"MegaStone\"] = 6] = \"MegaStone\";\n})(UndergroundItemValueType || (UndergroundItemValueType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UndergroundItemValueType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/UndergroundItemValueType.ts?"); + +/***/ }), + +/***/ "./src/modules/enums/WeatherForecastStatus.ts": +/*!****************************************************!*\ + !*** ./src/modules/enums/WeatherForecastStatus.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar WeatherForecastStatus;\n(function (WeatherForecastStatus) {\n WeatherForecastStatus[WeatherForecastStatus[\"disabled\"] = 0] = \"disabled\";\n WeatherForecastStatus[WeatherForecastStatus[\"enabled\"] = 1] = \"enabled\";\n WeatherForecastStatus[WeatherForecastStatus[\"hasPassed\"] = 2] = \"hasPassed\";\n})(WeatherForecastStatus || (WeatherForecastStatus = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WeatherForecastStatus);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/enums/WeatherForecastStatus.ts?"); + +/***/ }), + +/***/ "./src/modules/gems/FluteEffectRunner.ts": +/*!***********************************************!*\ + !*** ./src/modules/gems/FluteEffectRunner.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FluteEffectRunner)\n/* harmony export */ });\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../logbook/LogBookTypes */ \"./src/modules/logbook/LogBookTypes.ts\");\n/* harmony import */ var _logbook_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../logbook/helpers */ \"./src/modules/logbook/helpers.ts\");\nvar _a;\n\n\n\n\n\n\n\n\nclass FluteEffectRunner {\n static initialize(multiplier) {\n FluteEffectRunner.numActiveFlutes(0);\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumStrings(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.FluteItemType).forEach((itemName) => {\n const item = _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[itemName];\n if (item.multiplierType) {\n multiplier.addBonus(item.multiplierType, () => this.getFluteMultiplier(itemName), item.displayName);\n }\n if (this.isActive(itemName)()) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(this.numActiveFlutes, 1);\n }\n });\n this.updateActiveGemTypes();\n }\n static tick() {\n this.counter = 0;\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumStrings(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.FluteItemType).forEach((itemName) => {\n if (this.getLowestGem(itemName) > 0 && this.isActive(itemName)()) {\n player.effectList[itemName](Math.max(0, this.getLowestGem(itemName) - this.numActiveFlutes()));\n this.updateFormattedTimeLeft(itemName);\n if (this.numActiveFlutes() >= this.getLowestGem(itemName)) {\n this.removeEffect(itemName);\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__[\"default\"].notify({\n message: `You ran out of gems for the ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_4__.humanifyString)(itemName)}'s effect!`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__[\"default\"].NotificationOption.danger,\n sound: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__[\"default\"].NotificationSound.General.battle_item_timer,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__[\"default\"].NotificationSetting.Items.battle_item_timer,\n timeout: 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_4__.MINUTE,\n });\n App.game.logbook.newLog(_logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_6__.LogBookTypes.OTHER, _logbook_helpers__WEBPACK_IMPORTED_MODULE_7__.createLogContent.fluteRanOutOfGems({ flute: (0,_GameConstants__WEBPACK_IMPORTED_MODULE_4__.humanifyString)(itemName) }));\n }\n }\n });\n this.gemCost();\n }\n static getLowestGem(itemName) {\n const item = _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[itemName];\n const gemArray = item.gemTypes.map(idx => App.game.gems.gemWallet[_enums_PokemonType__WEBPACK_IMPORTED_MODULE_5__[\"default\"][idx]]());\n const gemMaxTime = Math.min(...gemArray);\n return gemMaxTime;\n }\n static updateActiveGemTypes() {\n this.activeGemTypes.removeAll();\n const gemTypes = new Set();\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumStrings(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.FluteItemType).forEach((itemName) => {\n if (FluteEffectRunner.isActive(itemName)()) {\n const item = _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[itemName];\n item.gemTypes.forEach(idx => gemTypes.add(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_5__[\"default\"][idx]));\n }\n });\n [...gemTypes].forEach(x => this.activeGemTypes.push(x));\n }\n static gemCost() {\n this.activeGemTypes().forEach(idx => App.game.gems.gainGems(-this.numActiveFlutes(), idx));\n }\n static getEffect(itemName) {\n if (!player) {\n return 0;\n }\n return player.effectList[itemName]();\n }\n static toggleEffect(itemName) {\n if (this.isActive(itemName)()) {\n this.removeEffect(itemName);\n return;\n }\n player.effectList[itemName](Math.max(0, player.effectList[itemName]() + FluteEffectRunner.getLowestGem(itemName)));\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(this.numActiveFlutes, 1);\n this.updateFormattedTimeLeft(itemName);\n this.updateActiveGemTypes();\n }\n static removeEffect(itemName) {\n player.effectList[itemName](0);\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(this.numActiveFlutes, -1);\n this.updateFormattedTimeLeft(itemName);\n player.gainItem(itemName, 1);\n this.updateActiveGemTypes();\n }\n static fluteFormattedTime(itemName) {\n return (player.effectList[itemName]() / this.numActiveFlutes());\n }\n static fluteTooltip(itemName) {\n const str = [];\n str.push(`Time Remaining:
${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_4__.formatSecondsToTime)(this.fluteFormattedTime(itemName))}`);\n return str.join('
');\n }\n static updateFormattedTimeLeft(itemName) {\n const times = (0,_GameConstants__WEBPACK_IMPORTED_MODULE_4__.formatTime)(this.fluteFormattedTime(itemName)).split(':');\n if (+times[0] > 99) {\n return player.effectTimer[itemName]('99h+');\n }\n else if (+times[0] > 0) {\n return player.effectTimer[itemName](`${+times[0]}h`);\n }\n times.shift();\n player.effectTimer[itemName](times.join(':'));\n }\n static getFluteMultiplier(itemName) {\n const flute = _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[itemName];\n return this.isActive(flute.name)() ? flute.getMultiplier() : 1;\n }\n static isActive(itemName) {\n return ko.pureComputed(() => {\n if (!player) {\n return false;\n }\n return !!player.effectList[itemName]();\n });\n }\n static fluteGemTooltip(item) {\n let tooltipString = '';\n tooltipString += '
Consumes:
';\n tooltipString += '';\n for (const gem of item.gemTypes) {\n tooltipString += '';\n tooltipString += ``;\n tooltipString += '';\n tooltipString += ``;\n tooltipString += '';\n }\n tooltipString += '
${gem} gems(${App.game.gems.gemWallet[_enums_PokemonType__WEBPACK_IMPORTED_MODULE_5__[\"default\"][gem]]().toLocaleString('en-US')})
';\n return tooltipString;\n }\n}\n_a = FluteEffectRunner;\nFluteEffectRunner.counter = 0;\nFluteEffectRunner.numActiveFlutes = ko.observable(0);\nFluteEffectRunner.activeGemTypes = ko.observableArray();\nFluteEffectRunner.additionalInfoTooltip = ko.pureComputed(() => {\n const tooltip = [];\n // List all types boosted\n if (_a.activeGemTypes().length < 18) {\n _a.activeGemTypes().forEach(idx => {\n tooltip.push(`${_enums_PokemonType__WEBPACK_IMPORTED_MODULE_5__[\"default\"][idx]}`);\n });\n }\n else {\n tooltip.push('All Types');\n }\n // Adding header when active\n if (tooltip.length) {\n tooltip.unshift('+0.5% boost to:');\n }\n return tooltip.join('
');\n});\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/gems/FluteEffectRunner.ts?"); + +/***/ }), + +/***/ "./src/modules/gems/GemDeal.ts": +/*!*************************************!*\ + !*** ./src/modules/gems/GemDeal.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GemDeal)\n/* harmony export */ });\nclass GemDeal {\n constructor(gemCosts, item, itemAmount) {\n this.gems = gemCosts;\n this.item = { itemType: item, amount: itemAmount };\n }\n isVisible() {\n return this.item.itemType.isVisible();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/gems/GemDeal.ts?"); + +/***/ }), + +/***/ "./src/modules/gems/GemDealList.ts": +/*!*****************************************!*\ + !*** ./src/modules/gems/GemDealList.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _GemDeal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GemDeal */ \"./src/modules/gems/GemDeal.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n\n\n\n\nconst hoennFluteDeals = [\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Grass, amount: 5000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Flying, amount: 5000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Electric, amount: 5000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Yellow_Flute, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dark, amount: 5000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Psychic, amount: 5000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fighting, amount: 5000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Black_Flute, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ground, amount: 5000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Poison, amount: 5000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Steel, amount: 5000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Time_Flute, 1),\n];\nconst hoennStoneDeals = [\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Grass, amount: 125000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dragon, amount: 125000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Sceptilite, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fire, amount: 125000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fighting, amount: 125000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Blazikenite, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Water, amount: 125000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ground, amount: 125000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Swampertite, 1),\n];\nconst unovaFluteDeals = [\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fire, amount: 10000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Rock, amount: 10000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dragon, amount: 10000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Red_Flute, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Normal, amount: 10000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fairy, amount: 10000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ice, amount: 10000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.White_Flute, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Water, amount: 10000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Bug, amount: 10000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ghost, amount: 10000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Blue_Flute, 1),\n];\nconst kalosFurfrouDeal = [\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Normal, amount: 1000000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Water, amount: 1000000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Grass, amount: 500000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fighting, amount: 500000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Poison, amount: 500000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ground, amount: 500000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Flying, amount: 500000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Bug, amount: 500000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Rock, amount: 500000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fire, amount: 250000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Electric, amount: 250000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ice, amount: 250000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ghost, amount: 250000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Steel, amount: 250000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Psychic, amount: 250000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dragon, amount: 100000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dark, amount: 100000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fairy, amount: 100000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Furfrou (La Reine)\"], 1),\n];\nconst kalosStoneDeals = [\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Grass, amount: 125000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Poison, amount: 125000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Venusaurite, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fire, amount: 125000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dragon, amount: 125000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Charizardite_X, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fire, amount: 125000 },\n { gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Flying, amount: 125000 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Charizardite_Y, 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Water, amount: 250000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList.Blastoisinite, 1),\n];\nconst alolaSilvallyDeals = [\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fighting, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Fighting) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fighting, amount: 75000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Fighting) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Rock, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Rock) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Rock, amount: 150000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Rock) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dark, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Dark) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dark, amount: 45000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Dark) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fairy, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Fairy) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fairy, amount: 45000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Fairy) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Water, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Water) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Water, amount: 250000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Water) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Grass, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Grass) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Grass, amount: 150000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Grass) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fire, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Fire) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Fire, amount: 150000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Fire) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Electric, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Electric) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Electric, amount: 150000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Electric) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ice, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Ice) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ice, amount: 75000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Ice) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ground, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Ground) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ground, amount: 150000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Ground) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Bug, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Bug) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Bug, amount: 150000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Bug) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Flying, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Flying) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Flying, amount: 250000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Flying) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Poison, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Poison) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Poison, amount: 150000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Poison) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ghost, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Ghost) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Ghost, amount: 75000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Ghost) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Psychic, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Psychic) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Psychic, amount: 75000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Psychic) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Steel, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Steel) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Steel, amount: 45000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Steel) 2\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dragon, amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Dragon) 1\"], 1),\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Dragon, amount: 45000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Silvally (Dragon) 2\"], 1),\n];\nconst alolaMagikarpJumpDeal = [\n new _GemDeal__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([{ gemType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Water, amount: 1500000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_3__.ItemList[\"Magikarp Brown Stripes\"], 1),\n];\nconst dealList = {\n [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GemShops.HoennFluteMaster]: ko.observableArray(hoennFluteDeals),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GemShops.HoennStoneSalesman]: ko.observableArray(hoennStoneDeals),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GemShops.UnovaFluteMaster]: ko.observableArray(unovaFluteDeals),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GemShops.FurfrouGemTrader]: ko.observableArray(kalosFurfrouDeal),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GemShops.KalosStoneSalesman]: ko.observableArray(kalosStoneDeals),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GemShops.SilvallyTrader]: ko.observableArray(alolaSilvallyDeals),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GemShops.MagikarpJumpGemTrader]: ko.observableArray(alolaMagikarpJumpDeal),\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dealList);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/gems/GemDealList.ts?"); + +/***/ }), + +/***/ "./src/modules/gems/GemDeals.ts": +/*!**************************************!*\ + !*** ./src/modules/gems/GemDeals.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GemDeals)\n/* harmony export */ });\n/* harmony import */ var _GemDealList__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GemDealList */ \"./src/modules/gems/GemDealList.ts\");\n/* harmony import */ var _enums_Badges__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums/Badges */ \"./src/modules/enums/Badges.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n\n\n\n\n\n\nclass GemDeals {\n static generateDeals() {\n // No randomly-generated deals exist right now\n }\n static getDeals(shop) {\n var _a, _b, _c;\n return (_c = (_b = (_a = GemDeals.list)[shop]) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : [];\n }\n static canUse(shop, i) {\n var _a;\n const deal = (_a = GemDeals.list[shop]) === null || _a === void 0 ? void 0 : _a.peek()[i];\n if (!deal || _items_ItemList__WEBPACK_IMPORTED_MODULE_2__.ItemList[deal.item.itemType.name].isSoldOut()) {\n return false;\n }\n else {\n return deal.gems.every((value) => App.game.gems.gemWallet[value.gemType]() >= value.amount);\n }\n }\n static use(shop, i, tradeTimes = 1) {\n var _a;\n const deal = (_a = GemDeals.list[shop]) === null || _a === void 0 ? void 0 : _a.peek()[i];\n if (!deal) {\n return false;\n }\n if (!App.game.badgeCase.hasBadge(_enums_Badges__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Heat)) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n message: 'You are unable to use Flutes yet.\\nVisit the Gym in Lavaridge Town.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.danger,\n });\n return false;\n }\n if (GemDeals.canUse(shop, i)) {\n const trades = deal.gems.map(gem => {\n const amt = App.game.gems.gemWallet[gem.gemType]();\n const maxTrades = Math.floor(amt / gem.amount);\n return maxTrades;\n });\n const maxTrades = trades.reduce((a, b) => Math.min(a, b), tradeTimes);\n deal.gems.forEach((value) => _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].incrementObservable(App.game.gems.gemWallet[value.gemType], -value.amount * maxTrades));\n deal.item.itemType.gain(deal.item.amount * maxTrades);\n }\n }\n}\nGemDeals.list = Object.assign({}, _GemDealList__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/gems/GemDeals.ts?"); + +/***/ }), + +/***/ "./src/modules/gems/Gems.ts": +/*!**********************************!*\ + !*** ./src/modules/gems/Gems.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Gems)\n/* harmony export */ });\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _types_TypeHelper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../types/TypeHelper */ \"./src/modules/types/TypeHelper.ts\");\n\n\n\n\n\n\n\nclass Gems {\n constructor() {\n this.name = 'Gems';\n this.saveKey = 'gems';\n this.defaults = {\n gemWallet: Array(Gems.nTypes).fill(0),\n gemUpgrades: Array(Gems.nTypes * Gems.nEffects).fill(0),\n };\n this.validUpgrades = {};\n this.gemWallet = this.defaults.gemWallet.map((v) => ko.observable(v));\n this.gemUpgrades = this.defaults.gemUpgrades.map((v) => ko.observable(v));\n _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].enumNumbers(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_1__[\"default\"]).forEach((type) => {\n var _a, _b, _c, _d;\n this.validUpgrades[type] = {};\n this.validUpgrades[type][_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectiveness.Immune] = !!((_a = _types_TypeHelper__WEBPACK_IMPORTED_MODULE_6__[\"default\"].typeMatrix[type]) === null || _a === void 0 ? void 0 : _a.includes(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectivenessValue.Immune));\n this.validUpgrades[type][_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectiveness.NotVery] = !!((_b = _types_TypeHelper__WEBPACK_IMPORTED_MODULE_6__[\"default\"].typeMatrix[type]) === null || _b === void 0 ? void 0 : _b.includes(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectivenessValue.NotVery));\n this.validUpgrades[type][_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectiveness.Neutral] = !!((_c = _types_TypeHelper__WEBPACK_IMPORTED_MODULE_6__[\"default\"].typeMatrix[type]) === null || _c === void 0 ? void 0 : _c.includes(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectivenessValue.Neutral));\n this.validUpgrades[type][_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectiveness.Very] = !!((_d = _types_TypeHelper__WEBPACK_IMPORTED_MODULE_6__[\"default\"].typeMatrix[type]) === null || _d === void 0 ? void 0 : _d.includes(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectivenessValue.Very));\n });\n }\n static image(type) {\n return `assets/images/gems/${_enums_PokemonType__WEBPACK_IMPORTED_MODULE_1__[\"default\"][type]} Gem.png`;\n }\n gainGems(amt, typeNum) {\n if (!this.canAccess()) {\n return;\n }\n if (typeNum === _enums_PokemonType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].None) {\n return;\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].incrementObservable(this.gemWallet[typeNum], amt);\n if (amt > 0) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].incrementObservable(App.game.statistics.totalGemsGained, amt);\n _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].incrementObservable(App.game.statistics.gemsGained[typeNum], amt);\n }\n }\n getGemUpgradeCost(typeNum, effectNum) {\n const cost = (this.getGemUpgrade(typeNum, effectNum) + 1) * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.GEM_UPGRADE_COST;\n return cost;\n }\n hasMaxUpgrade(typeNum, effectNum) {\n return this.getGemUpgrade(typeNum, effectNum) >= _GameConstants__WEBPACK_IMPORTED_MODULE_2__.MAX_GEM_UPGRADES;\n }\n canBuyGemUpgrade(typeNum, effectNum) {\n if (App.game.challenges.list.disableGems.active()) {\n return false;\n }\n const lessThanMax = !this.hasMaxUpgrade(typeNum, effectNum);\n const hasEnoughGems = this.gemWallet[typeNum]() >= this.getGemUpgradeCost(typeNum, effectNum);\n return lessThanMax && hasEnoughGems;\n }\n buyGemUpgrade(typeNum, effectNum) {\n if (this.canBuyGemUpgrade(typeNum, effectNum)) {\n this.gainGems(-this.getGemUpgradeCost(typeNum, effectNum), typeNum);\n _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].incrementObservable(this.gemUpgrades[typeNum * Gems.nEffects + effectNum]);\n }\n }\n isValidUpgrade(typeNum, effectNum) {\n var _a;\n return !!((_a = this.validUpgrades[typeNum]) === null || _a === void 0 ? void 0 : _a[effectNum]);\n }\n getGemUpgrade(typeNum, effectNum) {\n return this.gemUpgrades[typeNum * Gems.nEffects + effectNum]();\n }\n initialize() { }\n canAccess() {\n return App.game.keyItems.hasKeyItem(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Gem_case);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n update(delta) { }\n toJSON() {\n return {\n gemWallet: _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].filterArrayEnd(this.gemWallet.map(ko.unwrap)),\n gemUpgrades: _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].filterArrayEnd(this.gemUpgrades.map(ko.unwrap)),\n };\n }\n fromJSON(json) {\n if (json != null) {\n json.gemWallet.forEach((v, i) => {\n this.gemWallet[i](v);\n });\n json.gemUpgrades.forEach((v, i) => {\n this.gemUpgrades[i](v);\n });\n }\n }\n openGemModal() {\n if (this.canAccess()) {\n $('#gemModal').modal('show');\n }\n else {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n message: 'You do not have the Gem Case.\\nRequires the Earth Badge.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.warning,\n });\n }\n }\n}\nGems.nTypes = _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].enumLength(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) - 1;\nGems.nEffects = _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].enumLength(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.TypeEffectiveness);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/gems/Gems.ts?"); + +/***/ }), + +/***/ "./src/modules/index.ts": +/*!******************************!*\ + !*** ./src/modules/index.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _polyfill__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./polyfill */ \"./src/modules/polyfill.ts\");\n/* harmony import */ var _polyfill__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_polyfill__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _koBindingHandlers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./koBindingHandlers */ \"./src/modules/koBindingHandlers.ts\");\n/* harmony import */ var _temporaryWindowInjection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./temporaryWindowInjection */ \"./src/modules/temporaryWindowInjection.ts\");\n// Get our polyfills loaded first\n\n// Ensure that the Knockout Extenders are injected\n\n// Inject the Knockout bindingHandlers (may load other local modules due to imports)\n\n// Load everything else\n\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/index.ts?"); + +/***/ }), + +/***/ "./src/modules/items/AttackGainConsumable.ts": +/*!***************************************************!*\ + !*** ./src/modules/items/AttackGainConsumable.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AttackGainConsumable)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Consumable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Consumable */ \"./src/modules/items/Consumable.ts\");\n\n\nclass AttackGainConsumable extends _Consumable__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(type, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money, options, displayName, description, bonusMultiplier = 1, canUse) {\n super(type, basePrice, currency, options, displayName, description, canUse);\n this.bonusMultiplier = bonusMultiplier;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/AttackGainConsumable.ts?"); + +/***/ }), + +/***/ "./src/modules/items/BattleItem.ts": +/*!*****************************************!*\ + !*** ./src/modules/items/BattleItem.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BattleItem)\n/* harmony export */ });\n/* harmony import */ var _effectEngine_effectEngineRunner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../effectEngine/effectEngineRunner */ \"./src/modules/effectEngine/effectEngineRunner.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\n\n\n\nclass BattleItem extends _Item__WEBPACK_IMPORTED_MODULE_4__[\"default\"] {\n constructor(type, description, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.money, displayName, multiplierType, multiplyBy) {\n super(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.BattleItemType[type], basePrice, currency, undefined, displayName, description, 'battleItem');\n this.multiplierType = multiplierType;\n this.multiplyBy = multiplyBy;\n this.type = type;\n }\n use(amount) {\n _effectEngine_effectEngineRunner__WEBPACK_IMPORTED_MODULE_0__[\"default\"].addEffect(this.name, amount);\n return true;\n }\n checkCanUse() {\n if (App.game.challenges.list.disableBattleItems.active()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__[\"default\"].notify({\n title: 'Challenge Mode',\n message: 'Battle Items are disabled',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__[\"default\"].NotificationOption.danger,\n });\n return false;\n }\n if (!player.itemList[this.name]()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__[\"default\"].notify({\n message: `You don't have any ${this.displayName}s left...`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__[\"default\"].NotificationOption.danger,\n });\n return false;\n }\n return true;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/BattleItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/BerryItem.ts": +/*!****************************************!*\ + !*** ./src/modules/items/BerryItem.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BerryItem)\n/* harmony export */ });\n/* harmony import */ var _enums_BerryType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/BerryType */ \"./src/modules/enums/BerryType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\n\nclass BerryItem extends _Item__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(berry, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.farmPoint, berryReq) {\n super(`${_enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][berry]}Berry`, basePrice, currency, { maxAmount: 1 }, `${_enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][berry]} Berry`);\n this.berry = berry;\n this.berryReq = berryReq;\n this.berryName = _enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][berry];\n }\n gain(amt) {\n App.game.farming.gainBerry(this.berry, amt, false);\n }\n get description() {\n return `Obtain a ${this.berryName}
(No Oak Item challenge runs only)`;\n }\n isAvailable() {\n var _a, _b, _c, _d;\n const hasBerry = (_a = !!App.game.farming.berryList[this.berry]()) !== null && _a !== void 0 ? _a : false;\n const unlockedBerryReq = (_d = (_c = (_b = App.game.farming.unlockedBerries)[this.berryReq]) === null || _c === void 0 ? void 0 : _c.call(_b)) !== null && _d !== void 0 ? _d : false;\n const noOakItemChallenge = App.game.challenges.list.disableOakItems.active();\n return super.isAvailable() && !hasBerry && unlockedBerryReq && noOakItemChallenge;\n }\n get image() {\n return `assets/images/items/berry/${this.berryName}.png`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/BerryItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/CaughtIndicatingItem.ts": +/*!***************************************************!*\ + !*** ./src/modules/items/CaughtIndicatingItem.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CaughtIndicatingItem)\n/* harmony export */ });\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\nclass CaughtIndicatingItem extends _Item__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/CaughtIndicatingItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/ChristmasPresent.ts": +/*!***********************************************!*\ + !*** ./src/modules/items/ChristmasPresent.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ChristmasPresent)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _utilities_Rand__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utilities/Rand */ \"./src/modules/utilities/Rand.ts\");\n/* harmony import */ var _wallet_Amount__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../wallet/Amount */ \"./src/modules/wallet/Amount.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\n\n\n\n\nclass ChristmasPresent extends _Item__WEBPACK_IMPORTED_MODULE_5__[\"default\"] {\n constructor(size = 1) {\n super('Christmas_present', undefined, undefined, undefined, 'Christmas Present');\n this.size = size;\n }\n gain() {\n // Should not be acquired multiple times at once\n super.gain(1);\n const scaling = player.highestRegion();\n const values = {\n [_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money]: 50 * Math.pow(3, scaling),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.questPoint]: 5 * Math.pow((1 + scaling), 2),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.dungeonToken]: 35 * Math.pow(2, scaling),\n [_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.diamond]: 1 + scaling * 2,\n [_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.farmPoint]: 15 * Math.pow((1 + scaling), 2),\n };\n const cur = Number(_utilities_Rand__WEBPACK_IMPORTED_MODULE_3__[\"default\"].fromArray(Object.keys(values)));\n const { amount } = App.game.wallet.addAmount(new _wallet_Amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"](Math.round(values[cur] * this.size), cur), false);\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: `You opened the gift and received ${amount.toLocaleString('en-US')}.`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.success,\n image: this.image,\n });\n }\n get description() {\n return 'A lovely Christmas Present.';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/ChristmasPresent.ts?"); + +/***/ }), + +/***/ "./src/modules/items/Consumable.ts": +/*!*****************************************!*\ + !*** ./src/modules/items/Consumable.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Consumable)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\nclass Consumable extends _Item__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(type, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money, options, displayName, description, canUse) {\n super(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ConsumableType[type], basePrice, currency, options, displayName, description, 'consumable');\n this.type = type;\n this._canUse = canUse;\n }\n canUse(pokemon) {\n var _a, _b;\n return (_b = (_a = this._canUse) === null || _a === void 0 ? void 0 : _a.call(this, pokemon)) !== null && _b !== void 0 ? _b : true;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/Consumable.ts?"); + +/***/ }), + +/***/ "./src/modules/items/ConsumableController.ts": +/*!***************************************************!*\ + !*** ./src/modules/items/ConsumableController.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ConsumableController)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\nvar _a;\n\n\nclass ConsumableController {\n static incrementMultiplier() {\n this.multiplierIndex((this.multiplierIndex() + 1) % this.multiplier.length);\n }\n static decrementMultiplier() {\n this.multiplierIndex((this.multiplierIndex() + this.multiplier.length - 1) % this.multiplier.length);\n }\n static getMultiplier() {\n return Number(this.multiplier[this.multiplierIndex()].replace(/\\D/g, '')) || Infinity;\n }\n static getImage(consumableType) {\n const consumableName = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.ConsumableType[consumableType !== null && consumableType !== void 0 ? consumableType : this.currentlySelected()];\n return `assets/images/items/consumable/${consumableName}.png`;\n }\n}\n_a = ConsumableController;\nConsumableController.currentlySelected = ko.observable(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.ConsumableType.Rare_Candy).extend({ numeric: 0 });\nConsumableController.currentlySelectedName = ko.computed(() => _GameConstants__WEBPACK_IMPORTED_MODULE_1__.ConsumableType[_a.currentlySelected()]);\nConsumableController.multiplier = ['×1', '×5', '×10', 'Max'];\nConsumableController.multiplierIndex = ko.observable(0);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/ConsumableController.ts?"); + +/***/ }), + +/***/ "./src/modules/items/EggItem.ts": +/*!**************************************!*\ + !*** ./src/modules/items/EggItem.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EggItem)\n/* harmony export */ });\n/* harmony import */ var _breeding_EggType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../breeding/EggType */ \"./src/modules/breeding/EggType.ts\");\n/* harmony import */ var _enums_CaughtStatus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums/CaughtStatus */ \"./src/modules/enums/CaughtStatus.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../pokemons/PokemonList */ \"./src/modules/pokemons/PokemonList.ts\");\n/* harmony import */ var _CaughtIndicatingItem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CaughtIndicatingItem */ \"./src/modules/items/CaughtIndicatingItem.ts\");\n\n\n\n\n\nclass EggItem extends _CaughtIndicatingItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"] {\n constructor(type, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_2__.Currency.questPoint, displayName) {\n super(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.EggItemType[type], basePrice, currency, undefined, displayName, 'An egg. Can be hatched in the Day Care.', 'egg');\n this.type = type;\n }\n use() {\n if (player.itemList[this.name]() <= 0) {\n return false;\n }\n let success;\n if (this.type === _GameConstants__WEBPACK_IMPORTED_MODULE_2__.EggItemType.Pokemon_egg) {\n success = App.game.breeding.gainPokemonEgg(_pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_3__.pokemonMap.randomRegion(player.highestRegion()));\n }\n else if (this.type === _GameConstants__WEBPACK_IMPORTED_MODULE_2__.EggItemType.Mystery_egg) {\n success = App.game.breeding.gainRandomEgg();\n }\n else {\n const etype = _breeding_EggType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][_GameConstants__WEBPACK_IMPORTED_MODULE_2__.EggItemType[this.type].split('_')[0]];\n success = App.game.breeding.gainEgg(App.game.breeding.createTypedEgg(etype));\n }\n if (success) {\n player.loseItem(this.name, 1);\n }\n return success;\n }\n getCaughtStatus() {\n switch (this.type) {\n case (_GameConstants__WEBPACK_IMPORTED_MODULE_2__.EggItemType.Pokemon_egg): {\n // random pokemon\n return _enums_CaughtStatus__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotCaught;\n }\n case (_GameConstants__WEBPACK_IMPORTED_MODULE_2__.EggItemType.Mystery_egg): {\n return App.game.breeding.getAllCaughtStatus();\n }\n default: {\n const etype = _breeding_EggType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][_GameConstants__WEBPACK_IMPORTED_MODULE_2__.EggItemType[this.type].split('_')[0]];\n return App.game.breeding.getTypeCaughtStatus(etype);\n }\n }\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/EggItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/EnergyRestore.ts": +/*!********************************************!*\ + !*** ./src/modules/items/EnergyRestore.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EnergyRestore)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\n\n\nclass EnergyRestore extends _Item__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n constructor(type, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money, displayName) {\n super(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.EnergyRestoreSize[type], basePrice, currency, undefined, displayName, 'Restores Energy in the Underground.');\n this.type = type;\n }\n use() {\n if (player.itemList[this.name]() <= 0) {\n return false;\n }\n if (App.game.underground.energy === App.game.underground.getMaxEnergy()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: 'Your mining energy is already full!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n return false;\n }\n App.game.underground.gainEnergyThroughItem(this.type);\n player.loseItem(this.name, 1);\n return true;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/EnergyRestore.ts?"); + +/***/ }), + +/***/ "./src/modules/items/FluteItem.ts": +/*!****************************************!*\ + !*** ./src/modules/items/FluteItem.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FluteItem)\n/* harmony export */ });\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n/* harmony import */ var _gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../gems/FluteEffectRunner */ \"./src/modules/gems/FluteEffectRunner.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n\n\n\n\n\nclass FluteItem extends _Item__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(name, description, gemTypes, multiplierType, multiplyBy) {\n super(name, Infinity, undefined, { maxAmount: 1 }, undefined, description, 'fluteItem');\n this.gemTypes = gemTypes;\n this.multiplierType = multiplierType;\n this.multiplyBy = multiplyBy;\n }\n use() {\n _gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_1__[\"default\"].toggleEffect(this.name);\n return true;\n }\n getDescription() {\n return `+${(this.getMultiplier() - 1).toLocaleString('en-US', { style: 'percent', minimumFractionDigits: 2, maximumFractionDigits: 2 })} bonus to ${this.description}`;\n }\n getFormattedTooltip() {\n let tooltipString = '';\n tooltipString += `
${this.displayName}
`;\n tooltipString += `
${this.getDescription()}
`;\n tooltipString += `
Consuming ${_gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_1__[\"default\"].numActiveFlutes()} Gem(s)/Second
`;\n return tooltipString;\n }\n getMultiplier() {\n return (this.multiplyBy - 1) * (AchievementHandler.achievementBonus() + 1) + 1;\n }\n isSoldOut() {\n return player.itemList[this.name]() > 0 || _gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isActive(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.FluteItemType[this.name])();\n }\n checkCanUse() {\n if (!_gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isActive(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.FluteItemType[this.name])() && !player.itemList[this.name]()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_4__[\"default\"].notify({\n message: `You don't have the ${this.displayName}...`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_3__[\"default\"].NotificationOption.danger,\n });\n return false;\n }\n if (_gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getLowestGem(this.name) <= _gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_1__[\"default\"].numActiveFlutes() + 1) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_4__[\"default\"].notify({\n message: 'You don\\'t have enough gems to use this Flute.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_3__[\"default\"].NotificationOption.danger,\n });\n return false;\n }\n return true;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/FluteItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/Item.ts": +/*!***********************************!*\ + !*** ./src/modules/items/Item.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Item)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _wallet_Amount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../wallet/Amount */ \"./src/modules/wallet/Amount.ts\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types */ \"./src/modules/items/types.ts\");\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n\nclass Item {\n constructor(name, basePrice = Infinity, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money, { saveName = '', maxAmount = Number.MAX_SAFE_INTEGER, multiplier = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ITEM_PRICE_MULTIPLIER, multiplierDecrease = true, multiplierDecreaser = _types__WEBPACK_IMPORTED_MODULE_4__.MultiplierDecreaser.Battle, visible = undefined, } = {}, displayName, description, imageDirectory) {\n this.name = name;\n this.basePrice = basePrice;\n this.currency = currency;\n // Base price needs to be positive, items that can't be purchased via currency should be priced at Infinity\n if (this.basePrice <= 0) {\n this.basePrice = Infinity;\n console.warn(`Item '${name}' created with invalid nonpositive base price, defaulting to Infinity`);\n }\n this.price = ko.observable(this.basePrice);\n // If no custom save name specified, default to item name\n this.saveName = saveName || name || `${name}|${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency[currency]}`;\n this.maxAmount = maxAmount || Number.MAX_SAFE_INTEGER;\n // Multiplier needs to be 1 at minimum\n this.multiplier = Math.max(1, multiplier || _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ITEM_PRICE_MULTIPLIER);\n this.multiplierDecrease = this.multiplier > 1 ? multiplierDecrease : false;\n this.multiplierDecreaser = multiplierDecreaser || _types__WEBPACK_IMPORTED_MODULE_4__.MultiplierDecreaser.Battle;\n this.visible = visible;\n this._displayName = displayName;\n this._description = description;\n this.imageDirectory = imageDirectory;\n }\n totalPrice(amount) {\n if (this.multiplier === 1) {\n return Math.max(0, this.basePrice * amount);\n }\n // multiplier should be capped at 100, so work out how many to buy at increasing price and how many at max\n // (m_start) * (m^k) = 100\n // => k = (2 - log(m_start)) / log(m)\n const mStart = Math.max(player.itemMultipliers[this.saveName] || 1, 1);\n const k = (mStart < 100)\n ? Math.ceil((2 - Math.log10(mStart)) / Math.log10(this.multiplier))\n : 0;\n const incAmount = Math.min(k, amount);\n const incCost = (this.price() * (1 - (Math.pow(this.multiplier, incAmount)))) / (1 - this.multiplier);\n const maxCost = (this.basePrice * 100 * (amount - incAmount));\n const total = incCost + maxCost;\n return Math.max(0, Math.round(total));\n }\n buy(amt) {\n if (amt <= 0) {\n return;\n }\n let n = amt;\n const displayName = (0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.pluralizeString)(this.displayName, n);\n if (n > this.maxAmount) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: `You can only buy ${this.maxAmount.toLocaleString('en-US')} × ${displayName}!`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n n = this.maxAmount;\n }\n if (!this.isAvailable() || this.isSoldOut()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: `${displayName} is sold out!`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n return;\n }\n if (App.game.wallet.loseAmount(new _wallet_Amount__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this.totalPrice(n), this.currency))) {\n this.gain(n);\n this.increasePriceMultiplier(n);\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: `You bought ${n.toLocaleString('en-US')} × ${displayName}.`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.success,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationSetting.Items.item_bought,\n });\n }\n else {\n let curr = (0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency[this.currency]);\n switch (this.currency) {\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money:\n curr = 'Pokédollars';\n break;\n default:\n curr += 's';\n break;\n }\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: `You don't have enough ${curr} to buy ${n.toLocaleString('en-US')} ${displayName}!`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n }\n }\n gain(n) {\n player.gainItem(this.name, n);\n }\n // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars\n use(amount = 1, ...rest) {\n return false;\n }\n checkCanUse() {\n if (!player.itemList[this.name]()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: `You don't have any ${this.displayName}s left...`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n return false;\n }\n return true;\n }\n // By default the item should be visible\n isVisible() {\n var _a, _b;\n return (_b = (_a = this.visible) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true;\n }\n // By default it is available if the item is currently visible\n isAvailable() {\n return this.isVisible();\n }\n // eslint-disable-next-line class-methods-use-this\n isSoldOut() {\n return false;\n }\n getDescription() {\n return this._description;\n }\n increasePriceMultiplier(amount = 1) {\n player.itemMultipliers[this.saveName] = Math.min(100, (player.itemMultipliers[this.saveName] || 1) * (Math.pow(this.multiplier, amount)));\n this.price(Math.round(this.basePrice * player.itemMultipliers[this.saveName]));\n }\n decreasePriceMultiplier(amount = 1, multiplierDecreaser) {\n if (!this.multiplierDecrease) {\n return;\n }\n if (this.multiplierDecreaser !== multiplierDecreaser) {\n return;\n }\n player.itemMultipliers[this.saveName] = Math.max(1, (player.itemMultipliers[this.saveName] || 1) / (Math.pow(this.multiplier, amount)));\n this.price(Math.round(this.basePrice * player.itemMultipliers[this.saveName]));\n }\n // eslint-disable-next-line class-methods-use-this\n init() {\n // Override in specific item class for any item specific initialization needed\n }\n get description() {\n return this._description;\n }\n get displayName() {\n var _a;\n return (_a = this._displayName) !== null && _a !== void 0 ? _a : (0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)((0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(this.name));\n }\n get image() {\n const subDirectory = this.imageDirectory ? `${this.imageDirectory}/` : '';\n return `assets/images/items/${subDirectory}${this.name}.png`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/Item.ts?"); + +/***/ }), + +/***/ "./src/modules/items/ItemHandler.ts": +/*!******************************************!*\ + !*** ./src/modules/items/ItemHandler.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ItemHandler)\n/* harmony export */ });\n/* harmony import */ var _ItemList__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\n\n\n\nclass ItemHandler {\n // public static amountToUse = 1;\n static useItem(name, amount = 1) {\n if (!_ItemList__WEBPACK_IMPORTED_MODULE_0__.ItemList[name].checkCanUse()) {\n return false;\n }\n // Only allow the player to use the amount they have maximum\n const amountToUse = Math.min(player.itemList[name](), amount);\n player.itemList[name](player.itemList[name]() - amountToUse);\n // run the function\n const result = _ItemList__WEBPACK_IMPORTED_MODULE_0__.ItemList[name].use(amountToUse);\n // If the function returned nothing assume it went fine\n return result !== null && result !== void 0 ? result : true;\n }\n static hasItem(name) {\n return player.itemList[name] ? !!player.itemList[name]() : false;\n }\n static resetAmount() {\n const input = $('input[name=\"amountOfStones\"]');\n input.val(1).change();\n }\n static increaseAmount(n) {\n const input = $('input[name=\"amountOfItems\"]');\n const newVal = (parseInt(input.val().toString(), 10) || 0) + n;\n input.val(newVal > 1 ? newVal : 1).change();\n }\n static useStones() {\n if (!ItemHandler.pokemonSelected()) {\n return _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: 'No Pokémon selected.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n }\n const partyPokemon = App.game.party.getPokemonByName(ItemHandler.pokemonSelected());\n if (partyPokemon.breeding && App.game.challenges.list.realEvolutions.active()) {\n // If the real evolution challenge is active, we prevent using stones on Pokémon in the hatchery to prevent exploits\n return _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: 'You can\\'t use an evolution item on a Pokémon if it\\'s in the hatchery...',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n }\n const amountTotal = Math.min(ItemHandler.amountSelected(), player.itemList[ItemHandler.stoneSelected()]());\n if (!amountTotal) {\n return _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n // TODO: PMX - Update plural system to handle all cases\n message: `You don't have any ${_ItemList__WEBPACK_IMPORTED_MODULE_0__.ItemList[ItemHandler.stoneSelected()].displayName}s left...`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n }\n if (!App.game.party.getPokemonByName(ItemHandler.pokemonSelected()).canUseStone(_GameConstants__WEBPACK_IMPORTED_MODULE_3__.StoneType[ItemHandler.stoneSelected()])) {\n return _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n message: `${ItemHandler.pokemonSelected()} isn't possible to evolve right now...
Check the lock icons next to the pokeballs for more details.`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger,\n });\n }\n let amountUsed = 0;\n for (let i = 0; i < amountTotal; i++) {\n player.itemList[ItemHandler.stoneSelected()](player.itemList[ItemHandler.stoneSelected()]() - 1);\n amountUsed++;\n if ((_ItemList__WEBPACK_IMPORTED_MODULE_0__.ItemList[ItemHandler.stoneSelected()]).use(1, ItemHandler.pokemonSelected()) || !App.game.party.getPokemonByName(this.pokemonSelected())) {\n // Stop when a shiny is encountered or the base is removed from the party in Real Evo.\n break;\n }\n }\n const multiple = amountUsed === 1 ? '' : 's';\n const stoneUsed = _ItemList__WEBPACK_IMPORTED_MODULE_0__.ItemList[ItemHandler.stoneSelected()];\n return _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n // TODO: PMX - Update plural system to handle all cases\n message: `You used ${amountUsed.toLocaleString('en-US')} × ${stoneUsed.displayName}${multiple} on ${ItemHandler.pokemonSelected()}.`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.success,\n });\n }\n static initializeItems() {\n // Set our unlock regions\n Object.values(_ItemList__WEBPACK_IMPORTED_MODULE_0__.ItemList).forEach((item) => item.init());\n }\n}\nItemHandler.stoneSelected = ko.observable(_GameConstants__WEBPACK_IMPORTED_MODULE_3__.StoneType[0]);\nItemHandler.pokemonSelected = ko.observable('Gloom'); // TODO: import {} when PartyController module, ko.observable(getPokemonsWithEvolution(0)[0].name);\nItemHandler.amountSelected = ko.observable(1);\nItemHandler.amount = ko.observable(1);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/ItemHandler.ts?"); + +/***/ }), + +/***/ "./src/modules/items/ItemList.ts": +/*!***************************************!*\ + !*** ./src/modules/items/ItemList.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ItemList\": () => (/* binding */ ItemList)\n/* harmony export */ });\n/* harmony import */ var _enums_BerryType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/BerryType */ \"./src/modules/enums/BerryType.ts\");\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _enums_MulchType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums/MulchType */ \"./src/modules/enums/MulchType.ts\");\n/* harmony import */ var _enums_OakItemType__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../enums/OakItemType */ \"./src/modules/enums/OakItemType.ts\");\n/* harmony import */ var _BattleItem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./BattleItem */ \"./src/modules/items/BattleItem.ts\");\n/* harmony import */ var _BerryItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./BerryItem */ \"./src/modules/items/BerryItem.ts\");\n/* harmony import */ var _buyKeyItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./buyKeyItem */ \"./src/modules/items/buyKeyItem.ts\");\n/* harmony import */ var _buyOakItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./buyOakItem */ \"./src/modules/items/buyOakItem.ts\");\n/* harmony import */ var _FluteItem__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./FluteItem */ \"./src/modules/items/FluteItem.ts\");\n/* harmony import */ var _EnergyRestore__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./EnergyRestore */ \"./src/modules/items/EnergyRestore.ts\");\n/* harmony import */ var _MulchItem__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./MulchItem */ \"./src/modules/items/MulchItem.ts\");\n/* harmony import */ var _PokeballItem__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./PokeballItem */ \"./src/modules/items/PokeballItem.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _ShovelItem__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ShovelItem */ \"./src/modules/items/ShovelItem.ts\");\n/* harmony import */ var _PokeBlock__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./PokeBlock */ \"./src/modules/items/PokeBlock.ts\");\n/* harmony import */ var _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./MegaStoneItem */ \"./src/modules/items/MegaStoneItem.ts\");\n/* harmony import */ var _Vitamin__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./Vitamin */ \"./src/modules/items/Vitamin.ts\");\n/* harmony import */ var _EggItem__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./EggItem */ \"./src/modules/items/EggItem.ts\");\n/* harmony import */ var _PokemonItem__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./PokemonItem */ \"./src/modules/items/PokemonItem.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* harmony import */ var _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../requirements/ObtainedPokemonRequirement */ \"./src/modules/requirements/ObtainedPokemonRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../requirements/QuestLineStepCompletedRequirement */ \"./src/modules/requirements/QuestLineStepCompletedRequirement.ts\");\n/* harmony import */ var _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../requirements/SpecialEventRequirement */ \"./src/modules/requirements/SpecialEventRequirement.ts\");\n/* harmony import */ var _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../requirements/MultiRequirement */ \"./src/modules/requirements/MultiRequirement.ts\");\n/* harmony import */ var _QuestItem__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./QuestItem */ \"./src/modules/items/QuestItem.ts\");\n/* harmony import */ var _ChristmasPresent__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./ChristmasPresent */ \"./src/modules/items/ChristmasPresent.ts\");\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _TreasureItem__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./TreasureItem */ \"./src/modules/items/TreasureItem.ts\");\n/* harmony import */ var _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../pokemons/PokemonList */ \"./src/modules/pokemons/PokemonList.ts\");\n/* harmony import */ var _AttackGainConsumable__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./AttackGainConsumable */ \"./src/modules/items/AttackGainConsumable.ts\");\n/* eslint-disable no-multi-spaces */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// eslint-disable-next-line import/prefer-default-export\nconst ItemList = {};\nItemList.xAttack = new _BattleItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.BattleItemType.xAttack, '+50% Bonus to Pokémon attack for 30 seconds', 600, undefined, 'X Attack', 'pokemonAttack', 1.5);\nItemList.xClick = new _BattleItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.BattleItemType.xClick, '+50% Bonus to click attack for 30 seconds', 400, undefined, 'X Click', 'clickAttack', 1.5);\nItemList.Lucky_egg = new _BattleItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.BattleItemType.Lucky_egg, '+50% Bonus to experience gained for 30 seconds', 800, undefined, 'Lucky Egg', 'exp', 1.5);\nItemList.Token_collector = new _BattleItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.BattleItemType.Token_collector, '+50% Bonus to Dungeon Tokens gained for 30 seconds', 1000, undefined, 'Token Collector', 'dungeonToken', 1.5);\nItemList.Dowsing_machine = new _BattleItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.BattleItemType.Dowsing_machine, 'Increases chance for Pokémon to drop rare hold items; chance to multiply loot from dungeon chests, for 30 seconds.', 1500, undefined, 'Dowsing Machine');\nItemList.Lucky_incense = new _BattleItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.BattleItemType.Lucky_incense, '+50% Bonus to Pokédollars gained for 30 seconds', 2000, undefined, 'Lucky Incense', 'money', 1.5);\nItemList.ChopleBerry = new _BerryItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Chople, 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, _enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Spelon);\nItemList.KebiaBerry = new _BerryItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Kebia, 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, _enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Pamtre);\nItemList.ShucaBerry = new _BerryItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Shuca, 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, _enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Watmel);\nItemList.ChartiBerry = new _BerryItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Charti, 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, _enums_BerryType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Cornn);\nItemList.SmallRestore = new _EnergyRestore__WEBPACK_IMPORTED_MODULE_9__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EnergyRestoreSize.SmallRestore, 30000, undefined, 'Small Restore');\nItemList.MediumRestore = new _EnergyRestore__WEBPACK_IMPORTED_MODULE_9__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EnergyRestoreSize.MediumRestore, 100000, undefined, 'Medium Restore');\nItemList.LargeRestore = new _EnergyRestore__WEBPACK_IMPORTED_MODULE_9__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EnergyRestoreSize.LargeRestore, 400000, undefined, 'Large Restore');\nItemList.Dungeon_ticket = new _buyKeyItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Dungeon_ticket, 100, undefined, undefined, 'Dungeon Ticket');\nItemList.Explorer_kit = new _buyKeyItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Explorer_kit, 5000, undefined, undefined, 'Explorer Kit');\nItemList.Event_calendar = new _buyKeyItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Event_calendar, 100000, undefined, undefined, 'Event Calendar');\nItemList.Squirtbottle = new _buyOakItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Squirtbottle, 5000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint);\nItemList.Sprinklotad = new _buyOakItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Sprinklotad, 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint);\nItemList.Explosive_Charge = new _buyOakItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Explosive_Charge, 5000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint);\nItemList.Treasure_Scanner = new _buyOakItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Treasure_Scanner, 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint);\nItemList.Yellow_Flute = new _FluteItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.FluteItemType.Yellow_Flute, 'Pokémon Attack', ['Grass', 'Flying', 'Electric'], 'pokemonAttack', 1.02);\nItemList.Black_Flute = new _FluteItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.FluteItemType.Black_Flute, 'Click Attack', ['Dark', 'Psychic', 'Fighting'], 'clickAttack', 1.02);\nItemList.Time_Flute = new _FluteItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.FluteItemType.Time_Flute, 'Gym and Dungeon Timers', ['Ground', 'Poison', 'Steel'], undefined, 1.02);\nItemList.Red_Flute = new _FluteItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.FluteItemType.Red_Flute, 'Egg Steps', ['Fire', 'Rock', 'Dragon'], 'eggStep', 1.02);\nItemList.White_Flute = new _FluteItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.FluteItemType.White_Flute, 'Shiny Chance', ['Normal', 'Fairy', 'Ice'], 'shiny', 1.02);\nItemList.Blue_Flute = new _FluteItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.FluteItemType.Blue_Flute, 'EV Yield', ['Water', 'Bug', 'Ghost'], 'ev', 1.02);\nItemList.Boost_Mulch = new _MulchItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_enums_MulchType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Boost_Mulch, 50, 'Boost Mulch', 'Increases Berry growth rate.');\nItemList.Rich_Mulch = new _MulchItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_enums_MulchType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Rich_Mulch, 100, 'Rich Mulch', 'Increases Berry harvest rate and replant chances.');\nItemList.Surprise_Mulch = new _MulchItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_enums_MulchType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Surprise_Mulch, 150, 'Surprise Mulch', 'Increases Berry mutation rate.');\nItemList.Amaze_Mulch = new _MulchItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_enums_MulchType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Amaze_Mulch, 200, 'Amaze Mulch', 'A weaker combination of Boost, Rich and Surprise mulch.');\nItemList.Freeze_Mulch = new _MulchItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_enums_MulchType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Freeze_Mulch, 350, 'Freeze Mulch', 'Stops Berry growth and auras. Mutations will still occur while berries are frozen.');\nItemList.Gooey_Mulch = new _MulchItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_enums_MulchType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Gooey_Mulch, 100, 'Gooey Mulch', 'Helps attract rarer species. Gooed Pokémon are less likely to flee.');\nItemList.Pokeball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Pokeball, 100, undefined, { multiplier: 1 }, 'Poké Ball');\nItemList.Greatball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Greatball, 500, undefined, undefined, 'Great Ball');\nItemList.Ultraball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Ultraball, 2000, undefined, undefined, 'Ultra Ball');\nItemList.Masterball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Masterball, 2500, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, undefined, 'Master Ball');\n// Not sold in shops\nItemList.Fastball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Fastball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, undefined, 'Fast Ball');\nItemList.Quickball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Quickball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, undefined, 'Quick Ball');\nItemList.Timerball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Timerball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, undefined, 'Timer Ball');\nItemList.Duskball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Duskball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, undefined, 'Dusk Ball');\nItemList.Luxuryball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Luxuryball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, undefined, 'Luxury Ball');\nItemList.Diveball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Diveball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.battlePoint, undefined, 'Dive Ball');\nItemList.Lureball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Lureball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.battlePoint, undefined, 'Lure Ball');\nItemList.Nestball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Nestball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.battlePoint, undefined, 'Nest Ball');\nItemList.Repeatball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Repeatball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.battlePoint, undefined, 'Repeat Ball');\nItemList.Beastball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Beastball, 500, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, undefined, 'Beast Ball');\nItemList.Moonball = new _PokeballItem__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Pokeball.Moonball, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint, undefined, 'Moon Ball');\nItemList.Berry_Shovel = new _ShovelItem__WEBPACK_IMPORTED_MODULE_13__.ShovelItem(300, 'Berry Shovel', 'Removes Berry Plants in the Farm.');\nItemList.Mulch_Shovel = new _ShovelItem__WEBPACK_IMPORTED_MODULE_13__.MulchShovelItem(300, 'Mulch Shovel', 'Removes Mulch from a plot in the Farm.');\nItemList.PokeBlock_Black = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Black, Infinity);\nItemList.PokeBlock_Red = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Red, Infinity);\nItemList.PokeBlock_Blue = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Blue, Infinity);\nItemList.PokeBlock_Pink = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Pink, Infinity);\nItemList.PokeBlock_Green = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Green, Infinity);\nItemList.PokeBlock_Yellow = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Yellow, Infinity);\nItemList.PokeBlock_Gold = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Gold, Infinity);\nItemList.PokeBlock_Purple = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Purple, Infinity);\nItemList.PokeBlock_Indigo = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Indigo, Infinity);\nItemList.PokeBlock_Brown = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Brown, Infinity);\nItemList.PokeBlock_Light_Blue = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Light_Blue, Infinity);\nItemList.PokeBlock_Olive = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Olive, Infinity);\nItemList.PokeBlock_Beige = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Beige, Infinity);\nItemList.PokeBlock_Gray = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.Gray, Infinity);\nItemList.PokeBlock_White = new _PokeBlock__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.PokeBlockColor.White, Infinity);\n// Mega Stones\nItemList.Abomasite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Abomasite, 'Abomasnow', 10000);\nItemList.Absolite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Absolite, 'Absol', 10000);\nItemList.Aerodactylite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Aerodactylite, 'Aerodactyl', 10000);\nItemList.Aggronite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Aggronite, 'Aggron', 10000);\nItemList.Alakazite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Alakazite, 'Alakazam', 10000);\n//ItemList.Altarianite = new MegaStoneItem(MegaStoneType.Altarianite, 'Altaria', 10000);\nItemList.Ampharosite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Ampharosite, 'Ampharos', 10000);\nItemList.Audinite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Audinite, 'Audino', 10000);\nItemList.Banettite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Banettite, 'Banette', 10000);\nItemList.Beedrillite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Beedrillite, 'Beedrill', 10000);\nItemList.Blastoisinite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Blastoisinite, 'Blastoise', 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Blastoise') }, 'Blastoisinite', 'A Mega Stone for Blastoise.');\nItemList.Blazikenite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Blazikenite, 'Blaziken', 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Blaziken') }, 'Blazikenite', 'A Mega Stone for Blaziken.');\nItemList.Blue_Orb = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Blue_Orb, 'Kyogre', 10000);\nItemList.Cameruptite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Cameruptite, 'Camerupt', 10000);\nItemList.Charizardite_X = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Charizardite_X, 'Charizard', 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Charizard') }, 'Charizardite X', 'A Mega Stone for Charizard.');\nItemList.Charizardite_Y = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Charizardite_Y, 'Charizard', 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Charizard') }, 'Charizardite Y', 'A Mega Stone for Charizard.');\nItemList.Diancite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Diancite, 'Diancie', 10000);\nItemList.Galladite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Galladite, 'Gallade', 10000);\nItemList.Garchompite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Garchompite, 'Garchomp', 10000);\nItemList.Gardevoirite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Gardevoirite, 'Gardevoir', 10000);\nItemList.Gengarite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Gengarite, 'Gengar', 10000);\nItemList.Glalitite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Glalitite, 'Glalie', 10000);\nItemList.Gyaradosite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Gyaradosite, 'Gyarados', 10000);\nItemList.Heracronite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Heracronite, 'Heracross', 10000);\nItemList.Houndoominite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Houndoominite, 'Houndoom', 10000);\nItemList.Kangaskhanite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Kangaskhanite, 'Kangaskhan', 10000);\nItemList.Latiasite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Latiasite, 'Latias', 10000);\nItemList.Latiosite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Latiosite, 'Latios', 10000);\nItemList.Lopunnite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Lopunnite, 'Lopunny', 10000);\nItemList.Lucarionite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Lucarionite, 'Lucario', 10000);\nItemList.Manectite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Manectite, 'Manectric', 10000);\nItemList.Mawilite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Mawilite, 'Mawile', 10000);\nItemList.Medichamite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Medichamite, 'Medicham', 10000);\nItemList.Metagrossite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Metagrossite, 'Metagross', 10000);\nItemList.Meteorite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Meteorite, 'Rayquaza', 10000);\nItemList.Mewtwonite_X = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Mewtwonite_X, 'Mewtwo', 10000);\nItemList.Mewtwonite_Y = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Mewtwonite_Y, 'Mewtwo', 10000);\nItemList.Pidgeotite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Pidgeotite, 'Pidgeot', 10000);\nItemList.Pinsirite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Pinsirite, 'Pinsir', 10000);\nItemList.Red_Orb = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Red_Orb, 'Groudon', 10000);\nItemList.Sablenite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Sablenite, 'Sableye', 10000);\nItemList.Salamencite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Salamencite, 'Salamence', 10000);\nItemList.Sceptilite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Sceptilite, 'Sceptile', 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Sceptile') }, 'Sceptilite', 'A Mega Stone for Sceptile.');\nItemList.Scizorite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Scizorite, 'Scizor', 10000);\nItemList.Sharpedonite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Sharpedonite, 'Sharpedo', 10000);\nItemList.Slowbronite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Slowbronite, 'Slowbro', 10000);\nItemList.Steelixite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Steelixite, 'Steelix', 10000);\nItemList.Swampertite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Swampertite, 'Swampert', 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Swampert') }, 'Swampertite', 'A Mega Stone for Swampert.');\nItemList.Tyranitarite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Tyranitarite, 'Tyranitar', 10000);\nItemList.Venusaurite = new _MegaStoneItem__WEBPACK_IMPORTED_MODULE_15__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.MegaStoneType.Venusaurite, 'Venusaur', 10000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Venusaur') }, 'Venusaurite', 'A Mega Stone for Venusaur.');\n// Eggs\nItemList.Fire_egg = new _EggItem__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EggItemType.Fire_egg, 1000, undefined, 'Fire Egg');\nItemList.Water_egg = new _EggItem__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EggItemType.Water_egg, 1000, undefined, 'Water Egg');\nItemList.Grass_egg = new _EggItem__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EggItemType.Grass_egg, 1000, undefined, 'Grass Egg');\nItemList.Fighting_egg = new _EggItem__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EggItemType.Fighting_egg, 1000, undefined, 'Fighting Egg');\nItemList.Electric_egg = new _EggItem__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EggItemType.Electric_egg, 1000, undefined, 'Electric Egg');\nItemList.Dragon_egg = new _EggItem__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EggItemType.Dragon_egg, 1000, undefined, 'Dragon Egg');\nItemList.Pokemon_egg = new _EggItem__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EggItemType.Pokemon_egg, 1000, undefined, 'Pokémon Egg');\nItemList.Mystery_egg = new _EggItem__WEBPACK_IMPORTED_MODULE_17__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.EggItemType.Mystery_egg, 700, undefined, 'Mystery Egg');\n// Quest Items\nItemList.Meteorite_Bills_Errand = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Meteorite_Bills_Errand', 'Meteorite', 'A Meteorite the Game Corner owner gave you for find his daughter', 'Bill\\'s Errand');\nItemList.Tidal_Bell_Lugia = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Tidal_Bell_Lugia', 'Tidal Bell', 'A Bell that can summon the Legendary Pokémon Lugia', 'Whirl Guardian');\nItemList.Clear_Bell_Hooh = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Clear_Bell_Hooh', 'Clear Bell', 'A Bell that can summon the Legendary Pokémon Ho-oh', 'Rainbow Guardian');\nItemList.GS_Ball_Celebi = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('GS_Ball_Celebi', 'GS Ball', 'A Strange Pokéball that Professor Ivy gave you', 'Unfinished Business');\nItemList.Eon_Ticket_Latis = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Eon_Ticket_Latis', 'Eon Ticket', 'A limited edition ticket for a cruise to the Southern Island.', 'The Eon Duo');\nItemList.Celios_Errand_Ruby = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Celios_Errand_Ruby', 'Ruby', 'A Ruby found in Ruby Path', 'Celio\\'s Errand');\nItemList.Celios_Errand_Sapphire = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Celios_Errand_Sapphire', 'Sapphire', 'A Sapphire you\\'ve recovered from Scientist Gideon', 'Celio\\'s Errand');\nItemList.Crystalline_Cocoon_Jirachi = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Crystalline_Cocoon_Jirachi', 'Crystalline Cocoon', 'A Purple Crystal that Butler gave you at Mt. Chimney Crater', 'Wish Maker');\nItemList.Meteorite_Shard_Delta = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Meteorite_Shard_Delta', 'Meteorite Shard', 'A Shard of a Meteorite', 'The Delta Episode');\nItemList.Mysterious_Vial_Detective_Pikachu = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Mysterious_Vial_Detective_Pikachu', 'Mysterious Vial', 'An Aipom dropped this while running away, I wonder what it is?', 'Detective Pikachu');\nItemList.Heart_Diamond_Diancie = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Heart_Diamond_Diancie', 'Heart Diamond', 'The energy core of the Diamond domain', 'Princess Diancie');\nItemList.Red_Petal_Mina = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Red_Petal_Mina', 'Red Petal', 'One of the Petals you need for Mina\\'s trial given by Captain Kiawe', 'Island Challenge');\nItemList.Orange_Petal_Mina = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Orange_Petal_Mina', 'Orange Petal', 'One of the Petals you need for Mina\\'s trial given by Captain Ilima', 'Island Challenge');\nItemList.Yellow_Petal_Mina = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Yellow_Petal_Mina', 'Yellow Petal', 'One of the Petals you need for Mina\\'s trial given by Captain Sophocles', 'Island Challenge');\nItemList.Green_Petal_Mina = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Green_Petal_Mina', 'Green Petal', 'One of the Petals you need for Mina\\'s trial given by Captain Mallow', 'Island Challenge');\nItemList.Blue_Petal_Mina = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Blue_Petal_Mina', 'Blue Petal', 'One of the Petals you need for Mina\\'s trial given by Captain Lana', 'Island Challenge');\nItemList.Purple_Petal_Mina = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Purple_Petal_Mina', 'Purple Petal', 'One of the Petals you need for Mina\\'s trial given by Kahuna Nanu', 'Island Challenge');\nItemList.Pink_Petal_Mina = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Pink_Petal_Mina', 'Pink Petal', 'One of the Petals you need for Mina\\'s trial given by Captain Mina', 'Island Challenge');\nItemList.Sand_Bag_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Sand_Bag_Magikarp_Jump', 'Sand Bag', 'One of the materials Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Jump_Counter_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Jump_Counter_Magikarp_Jump', 'Jump Counter', 'One of the materials Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Timber_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Timber_Magikarp_Jump', 'Timber', 'One of the materials Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Rock_Cruncher_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Rock_Cruncher_Magikarp_Jump', 'Rock Cruncher', 'One of the materials Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Power_Generator_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Power_Generator_Magikarp_Jump', 'Power Generator', 'One of the materials Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Pokeball_Smash_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Pokeball_Smash_Magikarp_Jump', 'Pokéball Smash', 'One of the materials Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Push_Dwebble_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Push_Dwebble_Magikarp_Jump', 'Push Dwebble', 'One of the pushing Pokémons Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Push_Boldore_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Push_Boldore_Magikarp_Jump', 'Push Boldore', 'One of the pushing Pokémons Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Push_Forretress_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Push_Forretress_Magikarp_Jump', 'Push Forretress', 'One of the pushing Pokémons Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Push_Golem_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Push_Golem_Magikarp_Jump', 'Push Golem', 'One of the pushing Pokémons Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Push_Steelix_Magikarp_Jump = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Push_Steelix_Magikarp_Jump', 'Push Steelix', 'One of the pushing Pokémons Dr. Splash asked you for his laboratory', 'Dr. Splash\\'s Research Project');\nItemList.Prison_Bottle = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Prison_Bottle', 'Prison Bottle', 'A magical bottle used to bind Hoopa', 'Clash of Ages');\nItemList.Great_Twisted_Spoon = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Great_Twisted_Spoon', 'Great Twisted Spoon', 'A larger version of the Twisted Spoon made specifically for Mewtwo', 'An Unrivaled Power');\nItemList.Island_Challenge_Amulet = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Island_Challenge_Amulet', 'Island Challenge Amulet', 'A symbol that denotes your pilgramige on the Island Challenge of Alola. Stronger Trials await you with this in your bag!', 'Island Challenge');\nItemList.Fighting_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Fighting_Memory_Silvally', 'Fighting Memory', 'One of Silvally\\'s memories, obtained from Kahuna Hala in Iki Town', 'Typing some Memories');\nItemList.Rock_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Rock_Memory_Silvally', 'Rock Memory', 'One of Silvally\\'s memories, obtained from Kahuna Olivia in Konikoni City', 'Typing some Memories');\nItemList.Dark_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Dark_Memory_Silvally', 'Dark Memory', 'One of Silvally\\'s memories, obtained from Kahuna Nanu in Malie City', 'Typing some Memories');\nItemList.Fairy_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Fairy_Memory_Silvally', 'Fairy Memory', 'One of Silvally\\'s memories, obtained from Captain Mina in Seafolk Village', 'Typing some Memories');\nItemList.Water_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Water_Memory_Silvally', 'Water Memory', 'One of Silvally\\'s memories, obtained from Captain Lana in Brooklet Hill', 'Typing some Memories', 'Typing some Memories', 125000000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.dungeonToken);\nItemList.Grass_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Grass_Memory_Silvally', 'Grass Memory', 'One of Silvally\\'s memories, obtained from Captain Mallow in Lush Jungle', 'Typing some Memories', 'Typing some Memories', 125000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint);\nItemList.Fire_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Fire_Memory_Silvally', 'Fire Memory', 'One of Silvally\\'s memories, obtained from Captain Kiawe in Wela Volcano Park', 'Typing some Memories', 'Typing some Memories', 75000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.battlePoint);\nItemList.Electric_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Electric_Memory_Silvally', 'Electric Memory', 'One of Silvally\\'s memories, obtained from Captain Sophocles in Hokulani Observatory', 'Typing some Memories', 'Typing some Memories', 500000000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money);\nItemList.Ice_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Ice_Memory_Silvally', 'Ice Memory', 'One of Silvally\\'s memories, obtained from Veteran Aristo in Mt. Lanakila', 'Typing some Memories', 'Typing some Memories', 1000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.diamond);\nItemList.Ground_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Ground_Memory_Silvally', 'Ground Memory', 'One of Silvally\\'s memories, obtained from Kahuna Hapu on Exeggutor Island Hill', 'Typing some Memories', 'Typing some Memories', 200000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint);\nItemList.Bug_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Bug_Memory_Silvally', 'Bug Memory', 'One of Silvally\\'s memories, obtained from Guzma in Po Town', 'Typing some Memories');\nItemList.Flying_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Flying_Memory_Silvally', 'Flying Memory', 'One of Silvally\\'s memories, obtained from Kahili on Ten Carat Hill', 'Typing some Memories');\nItemList.Poison_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Poison_Memory_Silvally', 'Poison Memory', 'One of Silvally\\'s memories, obtained from Plumeria in Vast Poni Canyon', 'Typing some Memories');\nItemList.Ghost_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Ghost_Memory_Silvally', 'Ghost Memory', 'One of Silvally\\'s memories, obtained from Captain Acerola in Thrifty Megamart', 'Typing some Memories');\nItemList.Psychic_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Psychic_Memory_Silvally', 'Psychic Memory', 'One of Silvally\\'s memories, obtained from Aether Branch Chief Faba in Aether Paradise', 'Typing some Memories');\nItemList.Steel_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Steel_Memory_Silvally', 'Steel Memory', 'One of Silvally\\'s memories, obtained from Molayne in Royal Avenue', 'Typing some Memories');\nItemList.Dragon_Memory_Silvally = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Dragon_Memory_Silvally', 'Dragon Memory', 'One of Silvally\\'s memories, obtained from Ryuki in A Tree Maybe', 'Typing some Memories');\nItemList.Max_Mushroom_IoA = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Max_Mushroom_IoA', 'Max Mushroom', 'A Mushroom that contains the power of Dynamax forms', 'The Dojo\\'s Armor');\nItemList.Shaderoot_Carrot_Calyrex = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Shaderoot_Carrot_Calyrex', 'Shaderoot Carrot', 'Carrot that the King of Bountiful Harvest\\'s beloved steed likes to eat. It grew in a gloomy field.', 'The Crown of Galar');\nItemList.Iceroot_Carrot_Calyrex = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Iceroot_Carrot_Calyrex', 'Iceroot Carrot', 'Carrot that the King of Bountiful Harvest\\'s beloved steed likes to eat. It grew in a field covered in snow.', 'The Crown of Galar');\nItemList.Wishing_Piece = new _QuestItem__WEBPACK_IMPORTED_MODULE_24__[\"default\"]('Wishing_Piece', 'Wishing Piece', 'Attracts Gigantamax Pokémon to the Max Lair', 'The Lair of Giants');\n// Vitamins\nItemList.Protein = new _Vitamin__WEBPACK_IMPORTED_MODULE_16__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType.Protein, 1e4, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money, {\n multiplier: 1.1,\n multiplierDecrease: false,\n saveName: `${_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType[_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType.Protein]}|${_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency[_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money]}`,\n}, undefined, 'Increases Pokémon attack bonus.
(attack gained per breeding cycle)
Increases steps required when hatching by 20');\nItemList.Calcium = new _Vitamin__WEBPACK_IMPORTED_MODULE_16__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType.Calcium, 5e4, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money, {\n multiplier: 1.1,\n multiplierDecrease: false,\n saveName: `${_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType[_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType.Calcium]}|${_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency[_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money]}`,\n visible: new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_19__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Region.hoenn),\n}, undefined, 'Increases Pokémon attack bonus %.
(attack gained per breeding cycle)
Increases steps required when hatching by 20');\nItemList.Carbos = new _Vitamin__WEBPACK_IMPORTED_MODULE_16__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType.Carbos, 1e5, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money, {\n multiplier: 1.1,\n multiplierDecrease: false,\n saveName: `${_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType[_GameConstants__WEBPACK_IMPORTED_MODULE_12__.VitaminType.Carbos]}|${_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency[_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money]}`,\n visible: new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_19__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.Region.unova),\n}, undefined, 'Reduces steps required when hatching');\n// Consumables\nItemList.Rare_Candy = new _AttackGainConsumable__WEBPACK_IMPORTED_MODULE_29__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.ConsumableType.Rare_Candy, Infinity, undefined, undefined, 'Rare Candy', 'Raises the level of a Pokémon and permanently increases its attack');\nItemList.Magikarp_Biscuit = new _AttackGainConsumable__WEBPACK_IMPORTED_MODULE_29__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_12__.ConsumableType.Magikarp_Biscuit, Infinity, undefined, undefined, undefined, 'Strengthen your Magikarp', 6, (pokemon) => Math.floor(pokemon.id) === _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_28__.pokemonMap.Magikarp.id);\n// Miscellaneous\nItemList.Christmas_present = new _ChristmasPresent__WEBPACK_IMPORTED_MODULE_25__[\"default\"]();\n// Underground Items\n// Sellable (Diamonds)\nItemList.Rare_bone = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Rare_bone', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Rare Bone');\nItemList.Star_piece = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Star_piece', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Star Piece');\nItemList.Revive = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Revive', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Revive');\nItemList.Max_revive = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Max_revive', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Max Revive');\nItemList.Iron_ball = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Iron_ball', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Iron Ball');\nItemList.Heart_scale = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Heart_scale', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Heart Scale');\nItemList.Light_clay = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Light_clay', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Light Clay');\nItemList.Odd_keystone = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Odd_keystone', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Odd Keystone');\nItemList.Hard_stone = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Hard_stone', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Hard Stone');\nItemList.Oval_stone = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Oval_stone', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Oval Stone');\nItemList.Smooth_rock = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Smooth_rock', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Smooth Rock');\nItemList.Heat_rock = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Heat_rock', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Heat Rock');\nItemList.Icy_rock = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Icy_rock', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Icy Rock');\nItemList.Damp_rock = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Damp_rock', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Diamond, 'Damp Rock');\n// Plates\nItemList.Draco_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Draco_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Draco Plate');\nItemList.Dread_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Dread_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Dread Plate');\nItemList.Earth_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Earth_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Earth Plate');\nItemList.Fist_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Fist_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Fist Plate');\nItemList.Flame_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Flame_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Flame Plate');\nItemList.Icicle_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Icicle_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Icicle Plate');\nItemList.Insect_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Insect_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Insect Plate');\nItemList.Iron_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Iron_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Iron Plate');\nItemList.Meadow_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Meadow_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Meadow Plate');\nItemList.Mind_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Mind_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Mind Plate');\nItemList.Sky_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Sky_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Sky Plate');\nItemList.Splash_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Splash_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Splash Plate');\nItemList.Spooky_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Spooky_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Spooky Plate');\nItemList.Stone_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Stone_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Stone Plate');\nItemList.Toxic_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Toxic_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Toxic Plate');\nItemList.Zap_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Zap_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Zap Plate');\nItemList.Pixie_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Pixie_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Pixie Plate');\nItemList.Blank_plate = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Blank_plate', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Gem, 'Blank Plate');\n// Fossils\nItemList.Helix_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Helix_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Helix Fossil');\nItemList.Dome_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Dome_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Dome Fossil');\nItemList.Old_amber = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Old_amber', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Old Amber');\nItemList.Root_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Root_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Root Fossil');\nItemList.Claw_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Claw_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Claw Fossil');\nItemList.Armor_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Armor_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Armor Fossil');\nItemList.Skull_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Skull_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Skull Fossil');\nItemList.Cover_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Cover_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Cover Fossil');\nItemList.Plume_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Plume_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Plume Fossil');\nItemList.Jaw_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Jaw_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Jaw Fossil');\nItemList.Sail_fossil = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Sail_fossil', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Fossil, 'Sail Fossil');\nItemList.Fossilized_bird = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Fossilized_bird', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].FossilPiece, 'Fossilized Bird');\nItemList.Fossilized_fish = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Fossilized_fish', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].FossilPiece, 'Fossilized Fish');\nItemList.Fossilized_drake = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Fossilized_drake', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].FossilPiece, 'Fossilized Drake');\nItemList.Fossilized_dino = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Fossilized_dino', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].FossilPiece, 'Fossilized Dino');\n// Shards\nItemList.Red_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Red_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Red Shard');\nItemList.Yellow_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Yellow_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Yellow Shard');\nItemList.Green_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Green_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Green Shard');\nItemList.Blue_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Blue_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Blue Shard');\nItemList.Grey_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Grey_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Grey Shard');\nItemList.Purple_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Purple_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Purple Shard');\nItemList.Ochre_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Ochre_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Ochre Shard');\nItemList.Black_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Black_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Black Shard');\nItemList.Crimson_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Crimson_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Crimson Shard');\nItemList.Lime_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Lime_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Lime Shard');\nItemList.White_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('White_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'White Shard');\nItemList.Pink_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Pink_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Pink Shard');\nItemList.Cyan_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Cyan_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Cyan Shard');\nItemList.Rose_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Rose_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Rose Shard');\nItemList.Brown_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Brown_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Brown Shard');\nItemList.Beige_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Beige_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Beige Shard');\nItemList.Slate_shard = new _TreasureItem__WEBPACK_IMPORTED_MODULE_27__[\"default\"]('Slate_shard', _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_26__[\"default\"].Shard, 'Slate Shard');\n// Pokemon shop items\n// Kanto\nItemList['Pinkan Arbok'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pinkan Arbok');\nItemList['Pinkan Oddish'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pinkan Oddish');\nItemList['Pinkan Poliwhirl'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pinkan Poliwhirl');\nItemList['Pinkan Geodude'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pinkan Geodude');\nItemList['Pinkan Dodrio'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pinkan Dodrio', 50000);\nItemList['Charity Chansey'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Charity Chansey', 5000);\nItemList['Exeggcute (Single)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Exeggcute (Single)');\nItemList.Lickitung = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Lickitung', 1000);\nItemList['Pinkan Weezing'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pinkan Weezing');\nItemList['Pinkan Scyther'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pinkan Scyther');\nItemList['Mr. Mime'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Mr. Mime', 1000);\nItemList['Pinkan Electabuzz'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pinkan Electabuzz');\nItemList.Jynx = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Jynx', 2000);\nItemList.Magikarp = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Magikarp', 50000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money, true);\nItemList['Magikarp Brown Stripes'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Magikarp Brown Stripes', 100);\nItemList['Magikarp Blue Raindrops'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Magikarp Blue Raindrops', 2000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.diamond);\nItemList['Magikarp Saucy Violet'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Magikarp Saucy Violet', 7500000000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money);\nItemList['Probably Feebas'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Magikarp (Feebas)', 5999, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.battlePoint, false, 'Probably Feebas');\nItemList.Eevee = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Eevee', 4000);\nItemList.Porygon = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Porygon', 2000);\nItemList.Togepi = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Togepi', 15000);\n// Hoenn\nItemList['Probably Chimecho'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Hoppip (Chimecho)', 358, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.diamond, false, 'Probably Chimecho');\nItemList.Beldum = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Beldum', 22500);\n// Sinnoh\nItemList['Grotle (Acorn)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Grotle (Acorn)');\nItemList.Combee = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Combee', 6750);\nItemList['Burmy (Plant)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Burmy (Plant)', 6750);\nItemList.Cherubi = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Cherubi', 6750);\nItemList.Spiritomb = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Spiritomb', 432, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.diamond);\n// Unova\nItemList.Zorua = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Zorua', 50625);\nItemList['Meloetta (Pirouette)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Meloetta (Pirouette)', 200000);\n// Kalos\nItemList['Furfrou (Debutante)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (Debutante)', 5000000000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.money);\nItemList['Furfrou (Diamond)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (Diamond)', 3000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.diamond);\nItemList['Furfrou (Matron)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (Matron)', 1500000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.farmPoint);\nItemList['Furfrou (Dandy)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (Dandy)', 250000);\nItemList['Furfrou (Kabuki)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (Kabuki)', 75000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.battlePoint);\nItemList['Furfrou (Pharaoh)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (Pharaoh)', 300000000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.dungeonToken);\nItemList['Furfrou (Star)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (Star)', 10000);\nItemList['Furfrou (La Reine)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (La Reine)');\nItemList['Furfrou (Heart)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Furfrou (Heart)', 15000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Probably Not Pikachu'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Inkay (Pikachu)', 100000000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.dungeonToken, false, 'Probably Not Pikachu');\n// Alola\nItemList['Type: Null'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Type: Null', 114000);\nItemList.Poipole = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Poipole', 90000);\n// Silvally Forms\nItemList['Silvally (Fighting) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Fighting)', undefined, undefined, false, 'Silvally (Fighting)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 3, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Fighting)', true)]) }, 'Silvally (Fighting) 1');\nItemList['Silvally (Fighting) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Fighting)', undefined, undefined, false, 'Silvally (Fighting)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Fighting)') }, 'Silvally (Fighting) 2');\nItemList['Silvally (Rock) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Rock)', undefined, undefined, false, 'Silvally (Rock)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 3, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Rock)', true)]) }, 'Silvally (Rock) 1');\nItemList['Silvally (Rock) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Rock)', undefined, undefined, false, 'Silvally (Rock)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Rock)') }, 'Silvally (Rock) 2');\nItemList['Silvally (Dark) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Dark)', undefined, undefined, false, 'Silvally (Dark)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 3, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Dark)', true)]) }, 'Silvally (Dark) 1');\nItemList['Silvally (Dark) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Dark)', undefined, undefined, false, 'Silvally (Dark)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Dark)') }, 'Silvally (Dark) 2');\nItemList['Silvally (Fairy) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Fairy)', undefined, undefined, false, 'Silvally (Fairy)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 3, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Fairy)', true)]) }, 'Silvally (Fairy) 1');\nItemList['Silvally (Fairy) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Fairy)', undefined, undefined, false, 'Silvally (Fairy)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Fairy)') }, 'Silvally (Fairy) 2');\nItemList['Silvally (Water) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Water)', undefined, undefined, false, 'Silvally (Water)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 17, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Water)', true)]) }, 'Silvally (Water) 1');\nItemList['Silvally (Water) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Water)', undefined, undefined, false, 'Silvally (Water)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Water)') }, 'Silvally (Water) 2');\nItemList['Silvally (Grass) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Grass)', undefined, undefined, false, 'Silvally (Grass)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 17, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Grass)', true)]) }, 'Silvally (Grass) 1');\nItemList['Silvally (Grass) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Grass)', undefined, undefined, false, 'Silvally (Grass)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Grass)') }, 'Silvally (Grass) 2');\nItemList['Silvally (Fire) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Fire)', undefined, undefined, false, 'Silvally (Fire)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 17, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Fire)', true)]) }, 'Silvally (Fire) 1');\nItemList['Silvally (Fire) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Fire)', undefined, undefined, false, 'Silvally (Fire)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Fire)') }, 'Silvally (Fire) 2');\nItemList['Silvally (Electric) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Electric)', undefined, undefined, false, 'Silvally (Electric)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 17, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Electric)', true)]) }, 'Silvally (Electric) 1');\nItemList['Silvally (Electric) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Electric)', undefined, undefined, false, 'Silvally (Electric)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Electric)') }, 'Silvally (Electric) 2');\nItemList['Silvally (Ice) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Ice)', undefined, undefined, false, 'Silvally (Ice)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 17, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Ice)', true)]) }, 'Silvally (Ice) 1');\nItemList['Silvally (Ice) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Ice)', undefined, undefined, false, 'Silvally (Ice)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Ice)') }, 'Silvally (Ice) 2');\nItemList['Silvally (Ground) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Ground)', undefined, undefined, false, 'Silvally (Ground)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 17, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Ground)', true)]) }, 'Silvally (Ground) 1');\nItemList['Silvally (Ground) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Ground)', undefined, undefined, false, 'Silvally (Ground)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Ground)') }, 'Silvally (Ground) 2');\nItemList['Silvally (Bug) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Bug)', undefined, undefined, false, 'Silvally (Bug)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 33, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Bug)', true)]) }, 'Silvally (Bug) 1');\nItemList['Silvally (Bug) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Bug)', undefined, undefined, false, 'Silvally (Bug)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Bug)') }, 'Silvally (Bug) 2');\nItemList['Silvally (Flying) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Flying)', undefined, undefined, false, 'Silvally (Flying)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 33, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Flying)', true)]) }, 'Silvally (Flying) 1');\nItemList['Silvally (Flying) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Flying)', undefined, undefined, false, 'Silvally (Flying)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Flying)') }, 'Silvally (Flying) 2');\nItemList['Silvally (Poison) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Poison)', undefined, undefined, false, 'Silvally (Poison)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 33, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Poison)', true)]) }, 'Silvally (Poison) 1');\nItemList['Silvally (Poison) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Poison)', undefined, undefined, false, 'Silvally (Poison)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Poison)') }, 'Silvally (Poison) 2');\nItemList['Silvally (Ghost) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Ghost)', undefined, undefined, false, 'Silvally (Ghost)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 33, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Ghost)', true)]) }, 'Silvally (Ghost) 1');\nItemList['Silvally (Ghost) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Ghost)', undefined, undefined, false, 'Silvally (Ghost)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Ghost)') }, 'Silvally (Ghost) 2');\nItemList['Silvally (Psychic) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Psychic)', undefined, undefined, false, 'Silvally (Psychic)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 33, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Psychic)', true)]) }, 'Silvally (Psychic) 1');\nItemList['Silvally (Psychic) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Psychic)', undefined, undefined, false, 'Silvally (Psychic)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Psychic)') }, 'Silvally (Psychic) 2');\nItemList['Silvally (Steel) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Steel)', undefined, undefined, false, 'Silvally (Steel)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 33, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Steel)', true)]) }, 'Silvally (Steel) 1');\nItemList['Silvally (Steel) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Steel)', undefined, undefined, false, 'Silvally (Steel)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Steel)') }, 'Silvally (Steel) 2');\nItemList['Silvally (Dragon) 1'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Dragon)', undefined, undefined, false, 'Silvally (Dragon)', { maxAmount: 1, visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_21__[\"default\"]('Typing some Memories', 33, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.AchievementOption.more), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Dragon)', true)]) }, 'Silvally (Dragon) 1');\nItemList['Silvally (Dragon) 2'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Silvally (Dragon)', undefined, undefined, false, 'Silvally (Dragon)', { visible: new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Silvally (Dragon)') }, 'Silvally (Dragon) 2');\n//Galar\nItemList.Dracozolt = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Dracozolt', 100000);\nItemList.Arctozolt = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Arctozolt', 100000);\nItemList.Dracovish = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Dracovish', 100000);\nItemList.Arctovish = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Arctovish', 100000);\nItemList['Zarude (Dada)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Zarude (Dada)', 500000);\n// Dream orbs\nItemList.Staryu = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Staryu');\nItemList.Igglybuff = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Igglybuff');\nItemList.Shuckle = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Shuckle');\nItemList.Smoochum = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Smoochum');\nItemList.Ralts = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Ralts');\nItemList.Swablu = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Swablu');\nItemList.Drifloon = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Drifloon');\nItemList.Bronzor = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Bronzor');\nItemList.Riolu = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Riolu');\nItemList.Rotom = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Rotom');\nItemList.Munna = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Munna');\nItemList.Sigilyph = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Sigilyph');\nItemList['Tornadus (Therian)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Tornadus (Therian)');\nItemList['Thundurus (Therian)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Thundurus (Therian)');\nItemList['Landorus (Therian)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Landorus (Therian)');\n// Contest\nItemList['Dugtrio (Punk)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Dugtrio (Punk)', 1500, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Gengar (Punk)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Gengar (Punk)', 3000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Goldeen (Diva)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Goldeen (Diva)', 500, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Onix (Rocker)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Onix (Rocker)', 1000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Tangela (Pom-pom)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Tangela (Pom-pom)', 400, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Weepinbell (Fancy)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Weepinbell (Fancy)', 700, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Sudowoodo (Golden)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Sudowoodo (Golden)', 2000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Pikachu (Rock Star)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pikachu (Rock Star)', 1000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Pikachu (Belle)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pikachu (Belle)', 1000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Pikachu (Pop Star)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pikachu (Pop Star)', 1000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Pikachu (Ph. D.)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pikachu (Ph. D.)', 1000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\nItemList['Pikachu (Libre)'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Pikachu (Libre)', 1000, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.contestToken);\n// Event\nItemList['Elf Munchlax'] = new _PokemonItem__WEBPACK_IMPORTED_MODULE_18__[\"default\"]('Elf Munchlax', 3108, _GameConstants__WEBPACK_IMPORTED_MODULE_12__.Currency.questPoint, undefined, undefined, { visible: new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]([new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_22__[\"default\"]('Merry Christmas!'), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Santa Snorlax')]) });\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/ItemList.ts?"); + +/***/ }), + +/***/ "./src/modules/items/MegaStoneItem.ts": +/*!********************************************!*\ + !*** ./src/modules/items/MegaStoneItem.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MegaStoneItem)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\nclass MegaStoneItem extends _Item__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(megaStone, basePokemon, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.questPoint, options, displayName, description) {\n super(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.MegaStoneType[megaStone], basePrice, currency, Object.assign({ maxAmount: 1 }, options), displayName, description);\n this.megaStone = megaStone;\n this.basePokemon = basePokemon;\n }\n totalPrice(amount) {\n let amt = amount;\n if (amt > this.maxAmount) {\n amt = this.maxAmount;\n }\n return this.basePrice * amt;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n gain(amt) {\n player.gainMegaStone(this.megaStone);\n }\n isAvailable() {\n return super.isAvailable() && App.game.party.alreadyCaughtPokemonByName(this.basePokemon);\n }\n get image() {\n return `assets/images/megaStone/${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.MegaStoneType[this.megaStone]}.png`;\n }\n isSoldOut() {\n return player.hasMegaStone(this.megaStone);\n }\n get description() {\n return this._description || `A Mega Stone for ${this.basePokemon}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/MegaStoneItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/MulchItem.ts": +/*!****************************************!*\ + !*** ./src/modules/items/MulchItem.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MulchItem)\n/* harmony export */ });\n/* harmony import */ var _enums_MulchType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/MulchType */ \"./src/modules/enums/MulchType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types */ \"./src/modules/items/types.ts\");\n\n\n\n\n\nclass MulchItem extends _Item__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n constructor(type, basePrice, displayName, description) {\n super(_enums_MulchType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][type], basePrice, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.farmPoint, { multiplierDecreaser: _types__WEBPACK_IMPORTED_MODULE_4__.MultiplierDecreaser.Berry }, displayName, description, 'farm');\n this.type = type;\n }\n gain(amt) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].incrementObservable(App.game.farming.mulchList[this.type], amt);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/MulchItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/PokeBlock.ts": +/*!****************************************!*\ + !*** ./src/modules/items/PokeBlock.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokeBlock)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\nclass PokeBlock extends _Item__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(color, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money) {\n super(`PokeBlock_${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.PokeBlockColor[color]}`, basePrice, currency);\n this.type = color;\n }\n get description() {\n return this._description || 'Unobtainable item for future uses';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/PokeBlock.ts?"); + +/***/ }), + +/***/ "./src/modules/items/PokeballItem.ts": +/*!*******************************************!*\ + !*** ./src/modules/items/PokeballItem.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokeballItem)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\nclass PokeballItem extends _Item__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(type, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money, options, displayName) {\n super(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokeball[type], basePrice, currency, options, displayName, 'A ball for catching Pokémon.', 'pokeball');\n this.type = type;\n }\n gain(amt) {\n App.game.pokeballs.gainPokeballs(this.type, amt);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/PokeballItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/PokemonItem.ts": +/*!******************************************!*\ + !*** ./src/modules/items/PokemonItem.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokemonItem)\n/* harmony export */ });\n/* harmony import */ var _CaughtIndicatingItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CaughtIndicatingItem */ \"./src/modules/items/CaughtIndicatingItem.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../pokemons/PokemonHelper */ \"./src/modules/pokemons/PokemonHelper.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _logbook_helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../logbook/helpers */ \"./src/modules/logbook/helpers.ts\");\n/* harmony import */ var _logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../logbook/LogBookTypes */ \"./src/modules/logbook/LogBookTypes.ts\");\n\n\n\n\n\n\n\n\nclass PokemonItem extends _CaughtIndicatingItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(pokemon, basePrice = undefined, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.questPoint, ignoreEV = false, displayName = undefined, options, name = pokemon) {\n super(name, basePrice, currency, options, undefined, `Add ${pokemon} to your party.`, 'pokemonItem');\n this.ignoreEV = ignoreEV;\n this.type = pokemon;\n this._translatedOrDisplayName = ko.pureComputed(() => displayName !== null && displayName !== void 0 ? displayName : _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_2__.displayName(pokemon)());\n }\n gain(amt) {\n let shiny = false;\n let numShiny = 0;\n const pokemonName = this.type;\n const pokemonID = _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_2__.getPokemonByName(pokemonName).id;\n for (let i = 0; i < amt; i++) {\n const shinyBool = PokemonFactory.generateShiny(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.SHINY_CHANCE_SHOP);\n if (shinyBool) {\n numShiny++;\n }\n shiny = shiny || shinyBool;\n // Statistics\n if (i < amt - 1) { // -1 because gainPokemonById will add 1 to statistics\n const gender = PokemonFactory.generateGenderById(pokemonID);\n const shadow = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.ShadowStatus.None;\n _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_2__.incrementPokemonStatistics(pokemonID, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.PokemonStatisticsType.Captured, shinyBool, gender, shadow);\n }\n }\n if (shiny || !App.game.party.alreadyCaughtPokemon(_pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_2__.getPokemonByName(pokemonName).id)) {\n const newCatch = !(shiny && App.game.party.alreadyCaughtPokemon(_pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_2__.getPokemonByName(pokemonName).id, true));\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n message: `${(shiny) ? `✨ You obtained a shiny ${pokemonName}! ✨` : `You obtained ${_GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].anOrA(pokemonName)} ${pokemonName}!`}`,\n pokemonImage: _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_2__.getImage(pokemonID, shiny),\n type: (shiny ? _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.warning : _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success),\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationSetting.General.new_catch,\n sound: (newCatch ? _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationSound.General.new_catch : null),\n });\n }\n if (shiny) {\n App.game.logbook.newLog(_logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_7__.LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemon(_pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_2__.getPokemonByName(pokemonName).id, true)\n ? _logbook_helpers__WEBPACK_IMPORTED_MODULE_6__.createLogContent.purchasedShinyDupe({ pokemon: pokemonName })\n : _logbook_helpers__WEBPACK_IMPORTED_MODULE_6__.createLogContent.purchasedShiny({ pokemon: pokemonName }));\n }\n App.game.party.gainPokemonById(pokemonID, shiny, true);\n const partyPokemon = App.game.party.getPokemon(pokemonID);\n partyPokemon.effortPoints += App.game.party.calculateEffortPoints(partyPokemon, false, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.ShadowStatus.None, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.SHOPMON_EP_YIELD * (amt - numShiny), this.ignoreEV);\n partyPokemon.effortPoints += App.game.party.calculateEffortPoints(partyPokemon, true, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.ShadowStatus.None, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.SHOPMON_EP_YIELD * numShiny, this.ignoreEV);\n }\n getCaughtStatus() {\n return PartyController.getCaughtStatusByName(this.type);\n }\n getPokerusStatus() {\n return PartyController.getPokerusStatusByName(this.type);\n }\n get image() {\n const subDirectory = this.imageDirectory ? `${this.imageDirectory}/` : '';\n return `assets/images/items/${subDirectory}${this.name.replace(/[^\\s\\w.()-]/g, '')}.png`;\n }\n get displayName() {\n return this._translatedOrDisplayName();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/PokemonItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/QuestItem.ts": +/*!****************************************!*\ + !*** ./src/modules/items/QuestItem.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ QuestItem)\n/* harmony export */ });\n/* harmony import */ var _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../quests/QuestLineState */ \"./src/modules/quests/QuestLineState.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\nclass QuestItem extends _Item__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(name, displayName, description, questlineName, endQuestlineName = questlineName, basePrice, currency, options) {\n super(name, basePrice, currency, Object.assign({ maxAmount: 1 }, options), displayName, description, 'quest');\n this.questlineName = questlineName;\n this.endQuestlineName = endQuestlineName;\n }\n isActive() {\n return App.game.quests.getQuestLine(this.questlineName).state() > _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_0__[\"default\"].inactive &&\n App.game.quests.getQuestLine(this.endQuestlineName).state() < _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ended;\n }\n isSoldOut() {\n return player.itemList[this.name]() > 0;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/QuestItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/ShovelItem.ts": +/*!*****************************************!*\ + !*** ./src/modules/items/ShovelItem.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MulchShovelItem\": () => (/* binding */ MulchShovelItem),\n/* harmony export */ \"ShovelItem\": () => (/* binding */ ShovelItem)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./types */ \"./src/modules/items/types.ts\");\n/* eslint-disable class-methods-use-this */\n/* eslint-disable max-classes-per-file */\n\n\n\n\n// TODO: merge these classes somehow, maybe make Farming have a (shovels: Record) property\nclass ShovelItem extends _Item__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(basePrice, displayName, description) {\n super('Berry_Shovel', basePrice, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.farmPoint, { multiplierDecreaser: _types__WEBPACK_IMPORTED_MODULE_3__.MultiplierDecreaser.Berry }, displayName, description, 'farm');\n }\n gain(amt) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(App.game.farming.shovelAmt, amt);\n }\n}\nclass MulchShovelItem extends _Item__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(basePrice, displayName, description) {\n super('Mulch_Shovel', basePrice, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.farmPoint, { multiplierDecreaser: _types__WEBPACK_IMPORTED_MODULE_3__.MultiplierDecreaser.Berry }, displayName, description, 'farm');\n }\n gain(amt) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(App.game.farming.mulchShovelAmt, amt);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/ShovelItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/TreasureItem.ts": +/*!*******************************************!*\ + !*** ./src/modules/items/TreasureItem.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TreasureItem)\n/* harmony export */ });\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\n\n\nclass TreasureItem extends _Item__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(id, valueType, displayName) {\n super(id, Infinity, _GameConstants__WEBPACK_IMPORTED_MODULE_2__.Currency.diamond, undefined, displayName, `${displayName || id} dug out from the Underground.`);\n this.valueType = valueType;\n }\n get image() {\n return `assets/images/${this.valueType === _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil ? 'breeding' : 'items/underground'}/${this.displayName}.png`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/TreasureItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/Vitamin.ts": +/*!**************************************!*\ + !*** ./src/modules/items/Vitamin.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Vitamin)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n\n\n\n\n\nclass Vitamin extends _Item__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(type, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money, options, displayName, description) {\n super(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.VitaminType[type], basePrice, currency, options, displayName, description);\n this.type = type;\n }\n gain(n) {\n super.gain(n);\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(App.game.statistics.totalVitaminsPurchased, n);\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(App.game.statistics.totalVitaminsObtained, n);\n }\n // eslint-disable-next-line class-methods-use-this\n use() {\n return true;\n }\n checkCanUse() {\n if (!player.itemList[this.name]()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_4__[\"default\"].notify({\n message: `You don't have any ${this.displayName} left...`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_3__[\"default\"].NotificationOption.danger,\n });\n return false;\n }\n return true;\n }\n get image() {\n return `assets/images/items/vitamin/${this.name}.png`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/Vitamin.ts?"); + +/***/ }), + +/***/ "./src/modules/items/VitaminController.ts": +/*!************************************************!*\ + !*** ./src/modules/items/VitaminController.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ VitaminController)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\n\nclass VitaminController {\n static incrementMultiplier() {\n this.multiplierIndex((this.multiplierIndex() + 1) % this.multiplier.length);\n }\n static decrementMultiplier() {\n this.multiplierIndex((this.multiplierIndex() + this.multiplier.length - 1) % this.multiplier.length);\n }\n static getMultiplier() {\n return Number(this.multiplier[this.multiplierIndex()].replace(/\\D/g, '')) || Infinity;\n }\n static getImage(vitaminType) {\n const vitaminName = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.VitaminType[vitaminType !== null && vitaminType !== void 0 ? vitaminType : this.currentlySelected()];\n return `assets/images/items/vitamin/${vitaminName}.png`;\n }\n}\nVitaminController.currentlySelected = ko.observable(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.VitaminType.Protein).extend({ numeric: 0 });\nVitaminController.add = ko.observable(true).extend({ boolean: null });\nVitaminController.multiplier = ['×1', '×5', '×10', 'Max'];\nVitaminController.multiplierIndex = ko.observable(0);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/VitaminController.ts?"); + +/***/ }), + +/***/ "./src/modules/items/buyKeyItem.ts": +/*!*****************************************!*\ + !*** ./src/modules/items/buyKeyItem.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BuyKeyItem)\n/* harmony export */ });\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\n\nclass BuyKeyItem extends _Item__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(item, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.questPoint, options, displayName) {\n super(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][item], basePrice, currency, Object.assign({ maxAmount: 1 }, options), displayName);\n this.item = item;\n }\n totalPrice(amount) {\n let amt = amount;\n if (amt > this.maxAmount) {\n amt = this.maxAmount;\n }\n return this.basePrice * amt;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n gain(amt) {\n App.game.keyItems.gainKeyItem(this.item);\n }\n isSoldOut() {\n return App.game.keyItems.hasKeyItem(this.item);\n }\n get image() {\n return `assets/images/keyitems/${this.name}.png`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/buyKeyItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/buyOakItem.ts": +/*!*****************************************!*\ + !*** ./src/modules/items/buyOakItem.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BuyOakItem)\n/* harmony export */ });\n/* harmony import */ var _enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/OakItemType */ \"./src/modules/enums/OakItemType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _oakItems_BoughtOakItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../oakItems/BoughtOakItem */ \"./src/modules/oakItems/BoughtOakItem.ts\");\n/* harmony import */ var _Item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Item */ \"./src/modules/items/Item.ts\");\n\n\n\n\nclass BuyOakItem extends _Item__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n constructor(item, basePrice, currency = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.questPoint) {\n super(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][item], basePrice, currency, { maxAmount: 1 }, undefined, 'Purchase to unlock this Oak Item');\n this.item = item;\n }\n totalPrice(amount) {\n let amt = amount;\n if (amt > this.maxAmount) {\n amt = this.maxAmount;\n }\n return this.basePrice * amt;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n gain(amt) {\n const oakItem = App.game.oakItems.itemList[this.item];\n if (oakItem instanceof _oakItems_BoughtOakItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) {\n oakItem.purchased = true;\n }\n }\n isAvailable() {\n const oakItem = App.game.oakItems.itemList[this.item];\n const purchased = (oakItem instanceof _oakItems_BoughtOakItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) ? oakItem.purchased : true;\n return super.isAvailable() && !purchased;\n }\n get image() {\n return `assets/images/oakitems/${this.name}.png`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/buyOakItem.ts?"); + +/***/ }), + +/***/ "./src/modules/items/types.ts": +/*!************************************!*\ + !*** ./src/modules/items/types.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MultiplierDecreaser\": () => (/* binding */ MultiplierDecreaser)\n/* harmony export */ });\n/**\n * Source event for decreasing shop multipliers\n */\nvar MultiplierDecreaser;\n(function (MultiplierDecreaser) {\n MultiplierDecreaser[MultiplierDecreaser[\"Battle\"] = 0] = \"Battle\";\n MultiplierDecreaser[MultiplierDecreaser[\"Berry\"] = 1] = \"Berry\";\n})(MultiplierDecreaser || (MultiplierDecreaser = {}));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/items/types.ts?"); + +/***/ }), + +/***/ "./src/modules/keyItems/KeyItem.ts": +/*!*****************************************!*\ + !*** ./src/modules/keyItems/KeyItem.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ KeyItem)\n/* harmony export */ });\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\n\nclass KeyItem {\n constructor(name, description, unlockReq, isUnlocked = false, unlockRewardOnClose = () => { }, displayName, unlockRewardOnUnlock = () => { }) {\n this.unlockRewardOnClose = unlockRewardOnClose;\n this.unlockRewardOnUnlock = unlockRewardOnUnlock;\n this.name = name;\n this.displayName = displayName !== null && displayName !== void 0 ? displayName : _GameConstants__WEBPACK_IMPORTED_MODULE_1__.humanifyString(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][this.name]);\n this.description = description;\n this.isUnlocked = ko.observable(isUnlocked !== null && isUnlocked !== void 0 ? isUnlocked : false);\n if (this.isUnlocked() || typeof unlockReq !== 'function') {\n this.unlockReq = null;\n return;\n }\n // This computed is disposed by unlock()\n this.unlockReq = ko.computed(unlockReq);\n this.unlocker = this.unlockReq.subscribe(() => {\n if (this.unlockReq()) {\n App.game.keyItems.gainKeyItem(this.name);\n }\n });\n }\n unlock() {\n this.isUnlocked(true);\n if (this.unlocker) {\n this.unlocker.dispose();\n }\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/keyItems/KeyItem.ts?"); + +/***/ }), + +/***/ "./src/modules/keyItems/KeyItemController.ts": +/*!***************************************************!*\ + !*** ./src/modules/keyItems/KeyItemController.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ KeyItemController)\n/* harmony export */ });\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n\nclass KeyItemController {\n static showGainModal(item) {\n this.latestGainedItem(item);\n $('.modal').modal('hide');\n $('#keyItemModal').modal({\n backdrop: 'static',\n keyboard: false,\n });\n }\n static hover(item) {\n this.inspectedItem(item);\n }\n static hoverRelease() {\n this.selectedItem(this.inspectedItem());\n }\n}\nKeyItemController.inspectedItem = ko.observable(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Teachy_tv);\nKeyItemController.selectedItem = ko.observable(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Teachy_tv);\nKeyItemController.latestGainedItem = ko.observable(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Teachy_tv);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/keyItems/KeyItemController.ts?"); + +/***/ }), + +/***/ "./src/modules/keyItems/KeyItems.ts": +/*!******************************************!*\ + !*** ./src/modules/keyItems/KeyItems.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ KeyItems)\n/* harmony export */ });\n/* harmony import */ var _KeyItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./KeyItem */ \"./src/modules/keyItems/KeyItem.ts\");\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _utilities_Information__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utilities/Information */ \"./src/modules/utilities/Information.ts\");\n/* harmony import */ var _KeyItemController__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./KeyItemController */ \"./src/modules/keyItems/KeyItemController.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\n\n\n\n\nclass KeyItems {\n constructor() {\n this.name = 'Key Items';\n this.saveKey = 'keyItems';\n this.itemList = [];\n }\n initialize() {\n this.itemList = [\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Teachy_tv, 'A television set that is tuned to a program with useful tips for novice TRAINERS.', null, true, undefined, 'Teachy TV'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Coin_case, 'A case for holding Pokédollars.', null, true, undefined, 'Coin Case'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Pokeball_bag, 'A small bag that can hold many different types of Poké Balls.', null, true, undefined, 'Poké Ball Bag'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Town_map, 'A very convenient map that can be viewed anytime. It even shows you your present location in the region.', () => App.game.statistics.routeKills[_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto][1]() >= _GameConstants__WEBPACK_IMPORTED_MODULE_4__.ROUTE_KILLS_NEEDED, false, () => {\n _utilities_Information__WEBPACK_IMPORTED_MODULE_2__[\"default\"].show({\n steps: [\n {\n element: document.getElementById('townMap'),\n intro: 'This is the Town Map.
Use this to move to between different Routes, Towns and Dungeons.',\n },\n ],\n });\n }, 'Town Map'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Dungeon_ticket, 'This ticket grants access to all dungeons in the Kanto region and beyond.
Tip: You gain Dungeon Tokens by capturing Pokémon.', undefined, undefined, undefined, 'Dungeon Ticket'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Super_rod, 'The best fishing rod for catching wild water Pokémon.', () => App.game.statistics.routeKills[_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto][12]() >= _GameConstants__WEBPACK_IMPORTED_MODULE_4__.ROUTE_KILLS_NEEDED, undefined, undefined, 'Super Rod'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Holo_caster, 'A device that allows users to see and track Achievements. Completing Achievements gives useful bonuses.', () => App.game.statistics.dungeonsCleared[(0,_GameConstants__WEBPACK_IMPORTED_MODULE_4__.getDungeonIndex)('Victory Road')]() > 0, undefined, undefined, 'Holo Caster'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Mystery_egg, 'A mysterious Egg obtained from Mr. Pokémon. This allows you to use the Pokémon Day Care to help improve your Pokémon Attack. Some baby Pokémon can only be found through breeding, too!', () => App.game.statistics.routeKills[_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto][3]() >= _GameConstants__WEBPACK_IMPORTED_MODULE_4__.ROUTE_KILLS_NEEDED, undefined, undefined, 'Mystery Egg'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Safari_ticket, 'This ticket grants access to the Safari Zone right outside Fuchsia City.', undefined, undefined, undefined, 'Safari Ticket'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Wailmer_pail, 'This is a tool for watering Berries to allow you to operate the farm.', () => MapHelper.accessToRoute(11, _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto), undefined, undefined, 'Wailmer Pail'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Explorer_kit, 'A bag filled with convenient tools for exploring. It provides access to the Underground.', undefined, undefined, undefined, 'Explorer Kit'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Eon_ticket, 'A limited edition ticket for a cruise to the Southern Island.', undefined, undefined, undefined, 'Eon Ticket'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Event_calendar, 'This calendar will keep you up to date on the latest events and let you start events early.', undefined, undefined, undefined, 'Event Calendar'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Gem_case, 'A case specifically designed for holding gems.', undefined, undefined, undefined, 'Gem Case'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].DNA_splicers, 'A splicer that fuses certain Pokémon.', undefined, undefined, undefined, 'DNA Splicers'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Reins_of_unity, 'Reins that people presented to the king. They enhance Calyrex’s power over bountiful harvests and unite Calyrex with its beloved steeds.', undefined, undefined, undefined, 'Reins of Unity'),\n new _KeyItem__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Pokerus_virus, 'A virus sample collected from your starter Pokémon. Infect more Pokémon in the hatchery, and use the new Pokérus Poké Ball option to focus catching Contagious pokemon for a damage boost.', () => App.game.statistics.dungeonsCleared[(0,_GameConstants__WEBPACK_IMPORTED_MODULE_4__.getDungeonIndex)('Distortion World')]() > 0, undefined, () => {\n App.game.pokeballs.alreadyCaughtContagiousSelection = App.game.pokeballs.alreadyCaughtSelection;\n _utilities_Information__WEBPACK_IMPORTED_MODULE_2__[\"default\"].show({\n steps: [\n {\n element: document.getElementById('pokeballSelector'),\n intro: 'You can now choose a different ball for Pokémon which are Contagious with Pokérus. This will be helpful for gaining EVs on those Pokémon.

Note: If you set the Contagious selector to \"Do not catch\", you will not catch Contagious pokemon - even if your Caught selector is set to catch Pokémon.',\n },\n ],\n exitOnEsc: false,\n });\n }, 'Pokérus Virus', () => {\n const patientZero = App.game.party.getPokemon(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.RegionalStarters[_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto][player.regionStarters[_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto]()]) || App.game.party.caughtPokemon[0];\n patientZero.pokerus = _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Pokerus.Contagious;\n }),\n /*new KeyItem(KeyItemType['Z-Power_Ring'],\n // Using a Z-Crystal boosts the power of all your Pokémon of a shared type for a short while, after which some time is needed to recharge.'\n 'A gift from Melemele\\'s kahuna that enables the use of Z-Crystals. What they do is still under development.',\n undefined, undefined, undefined, 'Z-Power Ring'),*/\n ];\n }\n hasKeyItem(item) {\n if (this.itemList[item] === undefined) {\n return false;\n }\n return this.itemList[item].isUnlocked();\n }\n gainKeyItem(item, silent = false) {\n if (!this.hasKeyItem(item)) {\n this.itemList[item].unlock();\n this.itemList[item].unlockRewardOnUnlock();\n if (!silent) {\n _KeyItemController__WEBPACK_IMPORTED_MODULE_3__[\"default\"].showGainModal(item);\n }\n }\n }\n // eslint-disable-next-line class-methods-use-this\n canAccess() {\n return true;\n }\n fromJSON(json) {\n Object.keys(json).forEach((key) => {\n if (json[key] !== undefined) {\n if (json[key] === true) {\n // Unlock to dispose unlocker if needed\n this.itemList[_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"][key]].unlock();\n }\n }\n });\n // Gain the item in case the requirements changed.\n this.itemList.forEach((keyItem) => {\n if (!keyItem.isUnlocked && keyItem.unlockReq !== null) {\n if (keyItem.unlockReq()) {\n App.game.keyItems.gainKeyItem(keyItem.name);\n }\n }\n });\n }\n toJSON() {\n const save = {};\n for (let i = 0; i < this.itemList.length; i++) {\n save[_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_1__[\"default\"][this.itemList[i].name]] = this.itemList[i].isUnlocked();\n }\n return save;\n }\n // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars\n update(delta) { }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/keyItems/KeyItems.ts?"); + +/***/ }), + +/***/ "./src/modules/koBindingHandlers.ts": +/*!******************************************!*\ + !*** ./src/modules/koBindingHandlers.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _settings_Settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settings/Settings */ \"./src/modules/settings/Settings.ts\");\n/// \n\n\nconst contentEditableHandler = {\n init: (element, valueAccessor) => {\n const value = valueAccessor();\n function onBlur() {\n if (ko.isWriteableObservable(value)) {\n value(this.textContent);\n }\n }\n element.textContent = value();\n element.contentEditable = 'true';\n element.addEventListener('blur', onBlur);\n },\n};\n//Fixes the PlayerSVG rendering beneath other SVGs by rerendering the current PlayerSVG in the forefront. #4306\n//TODO: Replace with logic that maintains a singular PlayerSpriteSVG (Might be performance costly over a simple observer)\nfunction handleVisibleElement(element) {\n if (element.classList.contains('iconLocation')) {\n if (element.classList.contains('iconLocation')) {\n var targetElement = document.getElementById('playerSprite');\n var imageElement = element.cloneNode(true);\n imageElement.classList.remove('hide');\n targetElement.innerHTML = '';\n targetElement.appendChild(imageElement);\n //Get required variables to replicate the rotate on parent group as well\n var rotate = imageElement.getAttribute('rotate');\n var x = imageElement.getAttribute('localx');\n var y = imageElement.getAttribute('localy');\n if (rotate) {\n targetElement.setAttribute('transform', 'rotate(90,' + x + ', ' + y + ')');\n }\n else {\n targetElement.setAttribute('transform', '');\n }\n }\n }\n}\nconst playerSpriteMoveHandler = {\n init: function (element) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'style') {\n const target = mutation.target;\n const displayStyle = window.getComputedStyle(target).getPropertyValue('display');\n const isVisible = displayStyle !== 'none';\n if (isVisible) {\n handleVisibleElement(element);\n }\n }\n }\n });\n // Observe changes to the 'style' attribute of the target element\n observer.observe(element, { attributes: true });\n // Trigger initial visibility check on load\n const displayStyle = window.getComputedStyle(element).getPropertyValue('display');\n const isVisible = displayStyle !== 'none';\n if (isVisible) {\n handleVisibleElement(element);\n }\n },\n};\n//TODO END\nconst sortableControllers = new WeakMap();\nconst sortableHandler = {\n init: function (element, valueAccessor, allBindings, viewModel) {\n sortableControllers.set(element, null);\n const value = valueAccessor();\n ko.applyBindingsToNode(element, {\n template: Object.assign(Object.assign({}, value), { afterRender(nodes, el) {\n nodes.forEach((n) => {\n if (n.dataset) {\n n.dataset.sortableId = value.options.getId(el);\n }\n });\n },\n beforeRemove(node, idx, el) {\n var _a;\n // Sortable may have cloned the node, so we need to get the real one\n const found = element.querySelector(`[data-sortable-id=\"${value.options.getId(el)}\"]`);\n (_a = (found !== null && found !== void 0 ? found : node)) === null || _a === void 0 ? void 0 : _a.remove();\n } }),\n }, viewModel);\n return { controlsDescendantBindings: true };\n },\n update: function (element, valueAccessor) {\n var _a;\n const value = ko.unwrap(valueAccessor());\n const options = Object.assign(Object.assign({ \n // defaults\n animation: 100, sort: true, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 20 }, ((_a = value.options) !== null && _a !== void 0 ? _a : {})), { dataIdAttr: 'data-sortable-id', \n // handle updating underlying knockout array when moving items\n onEnd: (evt, originalEvt) => {\n var _a, _b;\n (_b = (_a = value.options) === null || _a === void 0 ? void 0 : _a.onEnd) === null || _b === void 0 ? void 0 : _b.call(_a, evt, originalEvt);\n const { oldIndex, newIndex } = evt;\n const list = [...value.foreach()];\n const movedItem = list.splice(oldIndex, 1)[0];\n const newList = [\n ...list.slice(0, newIndex),\n movedItem,\n ...list.slice(newIndex),\n ];\n value.foreach(newList);\n } });\n sortableControllers.set(element, sortablejs__WEBPACK_IMPORTED_MODULE_0__[\"default\"].create(element, options));\n },\n};\nconst moduleResizeObserver = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const height = entry.target.getBoundingClientRect().height;\n if (height > 0) {\n const resizeId = entry.target.dataset.resizeId;\n _settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingByName(`moduleHeight.${resizeId}`, height);\n }\n });\n});\nconst resizableHandler = {\n init: function (element, valueAccessor) {\n const value = valueAccessor();\n element.classList.add('resizable-container');\n element.style.height = `${_settings_Settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSetting(`moduleHeight.${value.setting}`).value}px`;\n element.dataset.resizeId = value.setting;\n moduleResizeObserver.observe(element);\n },\n};\nconst tooltipHandler = {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\n var _a;\n const local = ko.utils.unwrapObservable(valueAccessor());\n const options = {};\n ko.utils.extend(options, ko.bindingHandlers.tooltip.options);\n ko.utils.extend(options, local);\n // TODO Bootstrap 5: Use customClass rather than rewriting the template\n options.template = `
`;\n $(element).tooltip(options);\n ko.utils.domNodeDisposal.addDisposeCallback(element, () => {\n $(element).tooltip('dispose');\n });\n },\n 'update': function (element, valueAccessor) {\n const local = ko.utils.unwrapObservable(valueAccessor());\n const options = {};\n ko.utils.extend(options, ko.bindingHandlers.tooltip.options);\n ko.utils.extend(options, local);\n // Update the config of the tooltip\n const tooltipData = $(element).data('bs.tooltip');\n tooltipData.config.title = options.title;\n // If the tooltip is visible, update its text\n const tooltipInner = tooltipData.tip && tooltipData.tip.querySelector('.tooltip-inner');\n if (tooltipInner) {\n tooltipInner.innerHTML = tooltipData.config.title || '';\n }\n if (tooltipData && tooltipData.config) {\n if (tooltipData.config.title === '') {\n $(element).tooltip('hide');\n }\n }\n },\n options: {\n placement: 'bottom',\n trigger: 'click',\n },\n};\nObject.assign(ko.bindingHandlers, {\n contentEditable: contentEditableHandler,\n playerSpriteMove: playerSpriteMoveHandler,\n sortable: sortableHandler,\n resizable: resizableHandler,\n tooltip: tooltipHandler,\n});\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/koBindingHandlers.ts?"); + +/***/ }), + +/***/ "./src/modules/koExtenders.ts": +/*!************************************!*\ + !*** ./src/modules/koExtenders.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/// \n/*\n WARNING: Avoid importing local modules here at all costs!\n\n This file absolutely must be loaded before these extenders can be used elsewhere. The compiler cannot\n detect dependencies on these extenders on its own and attempts to use them before this file loads\n will fail silently. Local imports here would make the evaluation order unpredictable and unstable;\n minor commits could break unrelated parts of the game. This is a nightmare to debug! Don't do it!\n\n When using these extenders in a module, import this file to ensure proper dependency tracking.\n*/\n// Only numeric values allowed - usage: ko.observable(0).extend({ numeric: 0 });\nconst numericExtender = (target, precision) => {\n // create a writable computed observable to intercept writes to our observable\n const result = ko.pureComputed({\n read: target,\n write: (newValueRaw) => {\n const newValue = Number(newValueRaw);\n if (Number.isNaN(newValue)) {\n return;\n }\n const current = target();\n const roundingMultiplier = Math.pow(10, precision);\n const valueToWrite = Math.round(newValue * roundingMultiplier) / roundingMultiplier;\n // only write if it changed\n if (valueToWrite !== current) {\n target(valueToWrite);\n }\n else if (newValue !== current) {\n // if the rounded value is the same, but a different value was\n // written, force a notification for the current field\n target.notifySubscribers(valueToWrite);\n }\n },\n }).extend({ notify: 'always' });\n // initialize with current value to make sure it is rounded appropriately\n result(target());\n // return the new computed observable\n return result;\n};\nconst booleanExtender = (target) => {\n // create a writable computed observable to intercept writes to our observable\n const result = ko.pureComputed({\n read: target,\n write: (newValueRaw) => {\n target(!!newValueRaw);\n },\n }).extend({ notify: 'always' });\n // initialize with current value to make sure it is rounded appropriately\n result(target());\n // return the new computed observable\n return result;\n};\n// Don't treat shallowly-equal arrays as new values, i.e. don't notify subscribers\n// Usage: ko.observable([]).extend({ arrayEquals: true });\nconst arrayEqualsExtender = (target) => {\n const defaultComparer = target.equalityComparer;\n target.equalityComparer = function (a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n // Compare arrays by element\n return a.length === b.length && a.every((x, i) => x === b[i]);\n }\n // Default comparator always treats non-primitive values as changed\n return defaultComparer(a, b);\n };\n return target;\n};\n// A modified version of the rateLimit extender that can be forced to evaluate early\n// Usage: const example = ko.pureComputed(() => { whatever }).extend({ skippableRateLimit: GameConstants.WEEK });\n// example.evaluateEarly();\nconst skippableRateLimitExtender = (target, delay) => {\n // Custom rate limiter function, see https://knockoutjs.com/documentation/rateLimit-observable.html#custom-rate-limit-methods\n const skippableLimiter = (callback, timeout) => {\n var timeoutInstance = null;\n var skipNextLimit = false;\n const startEvaluation = () => {\n timeoutInstance = null;\n skipNextLimit = false;\n // Starts target evaluation\n callback();\n };\n // Method added to the target observable to force evaluation\n const evaluateEarly = () => {\n if (timeoutInstance) {\n // Already rate-limited, evaluate now\n clearTimeout(timeoutInstance);\n startEvaluation();\n }\n else {\n // Not yet rate-limited, be ready to skip the limit\n // (This often happens when waiting for subscription notifications to propogate or for a dependency to reevaluate)\n skipNextLimit = true;\n }\n };\n Object.assign(target, { evaluateEarly });\n // Called to start pre-evaluation delay when a dependency updates\n const startRateLimit = () => {\n // Do nothing if already rate-limited\n if (!timeoutInstance) {\n if (skipNextLimit) {\n // Skipping rate limit this time and going straight to evaluation\n startEvaluation();\n }\n else {\n // Start rate limit delay\n timeoutInstance = setTimeout(startEvaluation, timeout);\n }\n }\n };\n return startRateLimit;\n };\n // Add rate limit using our custom limiter\n return target.extend({ rateLimit: { timeout: delay, method: skippableLimiter } });\n};\nObject.assign(ko.extenders, {\n numeric: numericExtender,\n boolean: booleanExtender,\n arrayEquals: arrayEqualsExtender,\n skippableRateLimit: skippableRateLimitExtender,\n});\n\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/koExtenders.ts?"); + +/***/ }), + +/***/ "./src/modules/logbook/LogBook.ts": +/*!****************************************!*\ + !*** ./src/modules/logbook/LogBook.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LogBook)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _LogBookLog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LogBookLog */ \"./src/modules/logbook/LogBookLog.ts\");\n/* harmony import */ var _LogBookTypes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./LogBookTypes */ \"./src/modules/logbook/LogBookTypes.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n\n\n\n\nclass LogBook {\n constructor() {\n this.name = 'Log Book';\n this.saveKey = 'logbook';\n this.filters = Object.keys(_LogBookTypes__WEBPACK_IMPORTED_MODULE_2__.LogBookTypes).reduce((_dict, setting) => Object.assign(_dict, { [setting]: ko.observable(true).extend({ boolean: null }) }), {});\n this.logs = ko.observableArray([]);\n this.filteredLogs = ko.pureComputed(() => this.logs().filter((log) => { var _a, _b; return (_b = (_a = this.filters)[log.type.label]) === null || _b === void 0 ? void 0 : _b.call(_a); }));\n }\n newLog(type, content) {\n if (this.canLog(type)) {\n const length = this.logs.unshift(new _LogBookLog__WEBPACK_IMPORTED_MODULE_1__[\"default\"](type, content));\n if (length > 1000) {\n this.logs.pop();\n }\n }\n }\n fromJSON(json) {\n var _a;\n if (json == null) {\n return;\n }\n (_a = json.logs) === null || _a === void 0 ? void 0 : _a.forEach((entry) => {\n this.logs.push(new _LogBookLog__WEBPACK_IMPORTED_MODULE_1__[\"default\"](entry.type, entry.content, entry.date));\n });\n Object.entries(json.filters || {}).forEach(([key, value]) => {\n var _a, _b;\n (_b = (_a = this.filters)[key]) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n });\n }\n toJSON() {\n return ko.toJS({\n logs: this.logs.slice(0, 100).map((log) => ({ type: log.type, content: log.content, date: log.date })),\n filters: this.filters,\n });\n }\n initialize() { }\n canAccess() {\n return true;\n }\n update() { } // This method intentionally left blank\n canLog(logBookType) {\n return _settings__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getSetting('logBook.' + logBookType.label).value;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/logbook/LogBook.ts?"); + +/***/ }), + +/***/ "./src/modules/logbook/LogBookLog.ts": +/*!*******************************************!*\ + !*** ./src/modules/logbook/LogBookLog.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LogBookLog)\n/* harmony export */ });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/modules/logbook/helpers.ts\");\n\nclass LogBookLog {\n constructor(type = {\n display: 'dark',\n label: 'OTHER',\n }, content = _helpers__WEBPACK_IMPORTED_MODULE_0__.createLogContent.notTranslated({ text: 'Unknown Entry' }), date = Date.now()) {\n this.type = type;\n this.content = content;\n this.date = date;\n this.description = this.content.key === _helpers__WEBPACK_IMPORTED_MODULE_0__.LogContentKey.notTranslated\n ? this.content.vars.text\n : App.translation.get(this.content.key, 'logbook', this.content.vars);\n }\n get displayLabel() {\n return App.translation.get(`type.${this.type.label}`, 'logbook');\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/logbook/LogBookLog.ts?"); + +/***/ }), + +/***/ "./src/modules/logbook/LogBookTypes.ts": +/*!*********************************************!*\ + !*** ./src/modules/logbook/LogBookTypes.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LogBookTypes\": () => (/* binding */ LogBookTypes)\n/* harmony export */ });\nconst LogBookTypes = {\n NEW: {\n display: 'primary',\n label: 'NEW',\n },\n SHINY: {\n display: 'warning',\n label: 'SHINY',\n },\n CAUGHT: {\n display: 'success',\n label: 'CAUGHT',\n },\n ESCAPED: {\n display: 'danger',\n label: 'ESCAPED',\n },\n ROAMER: {\n display: 'info',\n label: 'ROAMER',\n },\n ACHIEVE: {\n display: 'warning',\n label: 'ACHIEVE',\n },\n QUEST: {\n display: 'info',\n label: 'QUEST',\n },\n FOUND: {\n display: 'primary',\n label: 'FOUND',\n },\n FRONTIER: {\n display: 'success',\n label: 'FRONTIER',\n },\n WANDER: {\n display: 'primary',\n label: 'WANDER',\n },\n OTHER: {\n display: 'dark',\n label: 'OTHER',\n },\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/logbook/LogBookTypes.ts?"); + +/***/ }), + +/***/ "./src/modules/logbook/helpers.ts": +/*!****************************************!*\ + !*** ./src/modules/logbook/helpers.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LogContentKey\": () => (/* binding */ LogContentKey),\n/* harmony export */ \"createLogContent\": () => (/* binding */ createLogContent)\n/* harmony export */ });\n// These should match the translation keys in the translation repo\nvar LogContentKey;\n(function (LogContentKey) {\n LogContentKey[\"notTranslated\"] = \"notTranslated\";\n LogContentKey[\"earnedAchievement\"] = \"earnedAchievement\";\n LogContentKey[\"escapedShiny\"] = \"escapedShiny\";\n LogContentKey[\"escapedShinyDupe\"] = \"escapedShinyDupe\";\n LogContentKey[\"escapedWild\"] = \"escapedWild\";\n LogContentKey[\"encounterShiny\"] = \"encounterShiny\";\n LogContentKey[\"encounterShinyDupe\"] = \"encounterShinyDupe\";\n LogContentKey[\"encounterWild\"] = \"encounterWild\";\n LogContentKey[\"gainBattleFrontierReward\"] = \"gainBattleFrontierReward\";\n LogContentKey[\"gainBattleFrontierPoints\"] = \"gainBattleFrontierPoints\";\n LogContentKey[\"hatchedShiny\"] = \"hatchedShiny\";\n LogContentKey[\"hatchedShinyDupe\"] = \"hatchedShinyDupe\";\n LogContentKey[\"unableToPayHatcheryHelper\"] = \"unableToPayHatcheryHelper\";\n LogContentKey[\"unableToPayFarmHand\"] = \"unableToPayFarmHand\";\n LogContentKey[\"registeredBerry\"] = \"registeredBerry\";\n LogContentKey[\"shinyWander\"] = \"shinyWander\";\n LogContentKey[\"shinyWanderDupe\"] = \"shinyWanderDupe\";\n LogContentKey[\"wildWander\"] = \"wildWander\";\n LogContentKey[\"fluteRanOutOfGems\"] = \"fluteRanOutOfGems\";\n LogContentKey[\"purchasedShiny\"] = \"purchasedShiny\";\n LogContentKey[\"purchasedShinyDupe\"] = \"purchasedShinyDupe\";\n LogContentKey[\"evolvedShiny\"] = \"evolvedShiny\";\n LogContentKey[\"evolvedShinyDupe\"] = \"evolvedShinyDupe\";\n LogContentKey[\"captured\"] = \"captured\";\n LogContentKey[\"capturedShiny\"] = \"capturedShiny\";\n LogContentKey[\"capturedShinyDupe\"] = \"capturedShinyDupe\";\n LogContentKey[\"capturedShadow\"] = \"capturedShadow\";\n LogContentKey[\"enemyDrop\"] = \"enemyDrop\";\n LogContentKey[\"roamer\"] = \"roamer\";\n LogContentKey[\"roamerShiny\"] = \"roamerShiny\";\n LogContentKey[\"roamerShinyDupe\"] = \"roamerShinyDupe\";\n LogContentKey[\"completedQuest\"] = \"completedQuest\";\n LogContentKey[\"completedQuestWithPoints\"] = \"completedQuestWithPoints\";\n LogContentKey[\"questLevelUp\"] = \"questLevelUp\";\n LogContentKey[\"resistantToPokerus\"] = \"resistantToPokerus\";\n})(LogContentKey || (LogContentKey = {}));\nconst createLogContent = {\n notTranslated: (vars) => ({ key: LogContentKey.notTranslated, vars }),\n earnedAchievement: (vars) => ({ key: LogContentKey.earnedAchievement, vars }),\n escapedShiny: (vars) => ({ key: LogContentKey.escapedShiny, vars }),\n escapedShinyDupe: (vars) => ({ key: LogContentKey.escapedShinyDupe, vars }),\n escapedWild: (vars) => ({ key: LogContentKey.escapedWild, vars }),\n encounterShiny: (vars) => ({ key: LogContentKey.encounterShiny, vars }),\n encounterShinyDupe: (vars) => ({ key: LogContentKey.encounterShinyDupe, vars }),\n encounterWild: (vars) => ({ key: LogContentKey.encounterWild, vars }),\n gainBattleFrontierReward: (vars) => ({ key: LogContentKey.gainBattleFrontierReward, vars }),\n gainBattleFrontierPoints: (vars) => ({ key: LogContentKey.gainBattleFrontierPoints, vars }),\n hatchedShiny: (vars) => ({ key: LogContentKey.hatchedShiny, vars }),\n hatchedShinyDupe: (vars) => ({ key: LogContentKey.hatchedShinyDupe, vars }),\n unableToPayHatcheryHelper: (vars) => ({ key: LogContentKey.unableToPayHatcheryHelper, vars }),\n unableToPayFarmHand: (vars) => ({ key: LogContentKey.unableToPayFarmHand, vars }),\n registeredBerry: (vars) => ({ key: LogContentKey.registeredBerry, vars }),\n shinyWander: (vars) => ({ key: LogContentKey.shinyWander, vars }),\n shinyWanderDupe: (vars) => ({ key: LogContentKey.shinyWanderDupe, vars }),\n wildWander: (vars) => ({ key: LogContentKey.wildWander, vars }),\n fluteRanOutOfGems: (vars) => ({ key: LogContentKey.fluteRanOutOfGems, vars }),\n purchasedShiny: (vars) => ({ key: LogContentKey.purchasedShiny, vars }),\n purchasedShinyDupe: (vars) => ({ key: LogContentKey.purchasedShinyDupe, vars }),\n evolvedShiny: (vars) => ({ key: LogContentKey.evolvedShiny, vars }),\n evolvedShinyDupe: (vars) => ({ key: LogContentKey.evolvedShinyDupe, vars }),\n captured: (vars) => ({ key: LogContentKey.captured, vars }),\n capturedShiny: (vars) => ({ key: LogContentKey.capturedShiny, vars }),\n capturedShinyDupe: (vars) => ({ key: LogContentKey.capturedShinyDupe, vars }),\n capturedShadow: (vars) => ({ key: LogContentKey.capturedShadow, vars }),\n enemyDrop: (vars) => ({ key: LogContentKey.enemyDrop, vars }),\n roamer: (vars) => ({ key: LogContentKey.roamer, vars }),\n roamerShiny: (vars) => ({ key: LogContentKey.roamerShiny, vars }),\n roamerShinyDupe: (vars) => ({ key: LogContentKey.roamerShinyDupe, vars }),\n completedQuest: (vars) => ({ key: LogContentKey.completedQuest, vars }),\n completedQuestWithPoints: (vars) => ({ key: LogContentKey.completedQuestWithPoints, vars }),\n questLevelUp: (vars) => ({ key: LogContentKey.questLevelUp, vars }),\n resistantToPokerus: (vars) => ({ key: LogContentKey.resistantToPokerus, vars }),\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/logbook/helpers.ts?"); + +/***/ }), + +/***/ "./src/modules/moonCycle/CurrentMoonPhase.ts": +/*!***************************************************!*\ + !*** ./src/modules/moonCycle/CurrentMoonPhase.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CurrentMoonPhase)\n/* harmony export */ });\nclass CurrentMoonPhase {\n constructor(phase, color, description) {\n this.phase = phase;\n this.color = color;\n this.description = description;\n }\n get tooltip() {\n const tooltip = [];\n tooltip.push(this.description);\n return tooltip.join('
');\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/moonCycle/CurrentMoonPhase.ts?"); + +/***/ }), + +/***/ "./src/modules/moonCycle/MoonCycle.ts": +/*!********************************************!*\ + !*** ./src/modules/moonCycle/MoonCycle.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MoonCycle)\n/* harmony export */ });\n/* harmony import */ var _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CurrentMoonPhase */ \"./src/modules/moonCycle/CurrentMoonPhase.ts\");\n/* harmony import */ var _MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MoonCyclePhase */ \"./src/modules/moonCycle/MoonCyclePhase.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\n\n\nclass MoonCycle {\n}\nMoonCycle.currentMoonCyclePhase = ko.pureComputed(() => {\n var _a, _b;\n const date = _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].currentTime();\n const dayCycle = Math.floor((date.getTime() - date.getTimezoneOffset() * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.MINUTE) / _GameConstants__WEBPACK_IMPORTED_MODULE_2__.DAY);\n const moonPhaseLength = 1; // How many Days each Moon Phase lasts\n const moonPhase = Math.floor((dayCycle % (Object.entries(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.MoonCycleValues).length * moonPhaseLength)) / moonPhaseLength);\n return Number((_b = (_a = Object.entries(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.MoonCycleValues).reverse().find(([, moonPhaseC]) => moonPhaseC == moonPhase)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : Object.keys(_GameConstants__WEBPACK_IMPORTED_MODULE_2__.MoonCycleValues));\n});\nMoonCycle.image = ko.pureComputed(() => {\n return `assets/images/moonCycle/${_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"][MoonCycle.currentMoonCyclePhase()]}.png`;\n});\nMoonCycle.color = ko.pureComputed(() => {\n return MoonCycle.currentMoonPhases[MoonCycle.currentMoonCyclePhase()].color;\n});\nMoonCycle.tooltip = ko.pureComputed(() => {\n return MoonCycle.currentMoonPhases[MoonCycle.currentMoonCyclePhase()].tooltip;\n});\nMoonCycle.currentMoonPhases = {\n [_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NewMoon]: new _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NewMoon, '#221f3c', 'New Moon'),\n [_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaxingCrescent]: new _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaxingCrescent, '#3b365e', 'Waxing Crescent Moon'),\n [_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].FirstQuarter]: new _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].FirstQuarter, '#544e80', 'First Quarter Moon'),\n [_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaxingGibbous]: new _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaxingGibbous, '#7e77af', 'Waxing Gibbous Moon'),\n [_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].FullMoon]: new _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].FullMoon, '#9d97c7', 'Full Moon'),\n [_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaningGibbous]: new _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaningGibbous, '#7e77af', 'Waning Gibbous Moon'),\n [_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ThirdQuarter]: new _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ThirdQuarter, '#544e80', 'Third Quarter Moon'),\n [_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaningCrescent]: new _CurrentMoonPhase__WEBPACK_IMPORTED_MODULE_0__[\"default\"](_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_1__[\"default\"].WaningCrescent, '#3b365e', 'Waning Crescent Moon'),\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/moonCycle/MoonCycle.ts?"); + +/***/ }), + +/***/ "./src/modules/moonCycle/MoonCyclePhase.ts": +/*!*************************************************!*\ + !*** ./src/modules/moonCycle/MoonCyclePhase.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar MoonCyclePhase;\n(function (MoonCyclePhase) {\n MoonCyclePhase[MoonCyclePhase[\"NewMoon\"] = 0] = \"NewMoon\";\n MoonCyclePhase[MoonCyclePhase[\"WaxingCrescent\"] = 1] = \"WaxingCrescent\";\n MoonCyclePhase[MoonCyclePhase[\"FirstQuarter\"] = 2] = \"FirstQuarter\";\n MoonCyclePhase[MoonCyclePhase[\"WaxingGibbous\"] = 3] = \"WaxingGibbous\";\n MoonCyclePhase[MoonCyclePhase[\"FullMoon\"] = 4] = \"FullMoon\";\n MoonCyclePhase[MoonCyclePhase[\"WaningGibbous\"] = 5] = \"WaningGibbous\";\n MoonCyclePhase[MoonCyclePhase[\"ThirdQuarter\"] = 6] = \"ThirdQuarter\";\n MoonCyclePhase[MoonCyclePhase[\"WaningCrescent\"] = 7] = \"WaningCrescent\";\n})(MoonCyclePhase || (MoonCyclePhase = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MoonCyclePhase);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/moonCycle/MoonCyclePhase.ts?"); + +/***/ }), + +/***/ "./src/modules/multiplier/Multiplier.ts": +/*!**********************************************!*\ + !*** ./src/modules/multiplier/Multiplier.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Multiplier)\n/* harmony export */ });\n/* harmony import */ var _MultiplierType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MultiplierType */ \"./src/modules/multiplier/MultiplierType.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\nclass Multiplier {\n constructor() {\n this.multipliers = _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].objectFromEnumStrings(_MultiplierType__WEBPACK_IMPORTED_MODULE_0__[\"default\"], () => []);\n }\n addBonus(type, bonusFunction, source) {\n this.multipliers[type].push({ bonusFunction, source });\n }\n // useBonus is passed to the multiplier function to let it know if we are actually going to use the bonus it gives.\n // This is so that we can calculate the bonus without gaining oakitem exp or logging statistics\n getBonus(type, useBonus = false) {\n return this.multipliers[type].reduce((bonus, { bonusFunction }) => bonus * bonusFunction(useBonus), 1);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/multiplier/Multiplier.ts?"); + +/***/ }), + +/***/ "./src/modules/multiplier/MultiplierType.ts": +/*!**************************************************!*\ + !*** ./src/modules/multiplier/MultiplierType.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar MultiplierType;\n(function (MultiplierType) {\n MultiplierType[MultiplierType[\"pokemonAttack\"] = 0] = \"pokemonAttack\";\n MultiplierType[MultiplierType[\"clickAttack\"] = 1] = \"clickAttack\";\n MultiplierType[MultiplierType[\"exp\"] = 2] = \"exp\";\n MultiplierType[MultiplierType[\"money\"] = 3] = \"money\";\n MultiplierType[MultiplierType[\"dungeonToken\"] = 4] = \"dungeonToken\";\n MultiplierType[MultiplierType[\"shiny\"] = 5] = \"shiny\";\n MultiplierType[MultiplierType[\"eggStep\"] = 6] = \"eggStep\";\n MultiplierType[MultiplierType[\"roaming\"] = 7] = \"roaming\";\n MultiplierType[MultiplierType[\"ev\"] = 8] = \"ev\";\n})(MultiplierType || (MultiplierType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MultiplierType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/multiplier/MultiplierType.ts?"); + +/***/ }), + +/***/ "./src/modules/notifications/NotificationConstants.ts": +/*!************************************************************!*\ + !*** ./src/modules/notifications/NotificationConstants.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../settings/NotificationSetting */ \"./src/modules/settings/NotificationSetting.ts\");\n/* harmony import */ var _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utilities/Sound */ \"./src/modules/utilities/Sound.ts\");\n/* harmony import */ var _NotificationOption__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NotificationOption */ \"./src/modules/notifications/NotificationOption.ts\");\n\n\n\n/**\n * Contains all notification constants for easy access.\n */\nconst NotificationConstants = {\n NotificationOption: _NotificationOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n NotificationSound: {\n General: {\n shiny_long: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('shiny_long', 'Shiny Pokémon encountered/hatched'),\n new_catch: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('new_catch', 'New Pokémon/shiny captured'),\n roaming: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('roaming', 'Roaming Pokémon encountered'),\n achievement: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('achievement', 'New achievement earned'),\n battle_item_timer: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('battle_item_timer', 'Battle item about to wear off'),\n underground_energy_full: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('underground_energy_full', 'Mining energy reached maximum capacity'),\n battle_frontier: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('battle_frontier', 'Battle Frontier'),\n dream_orb: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('dream_orb', 'Opening Dream Orb'),\n pokerus: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokerus_resistant', 'Pokémon has become Resistant to Pokérus'),\n max_flow: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('max_flow', 'Maximum Flow has accumulated at the Purify Chamber'),\n },\n Hatchery: {\n ready_to_hatch: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('ready_to_hatch', 'Egg ready to hatch'),\n empty_queue: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('empty_queue', 'Hatchery queue is empty'),\n },\n Quests: {\n quest_ready_to_complete: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('quest_ready_to_complete', 'Quest is ready to be completed'),\n quest_level_increased: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('quest_level_increased', 'Quest level increased'),\n },\n Farming: {\n berry_discovered: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('berry_discovered', 'New Berry discovered'),\n ready_to_harvest: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('ready_to_harvest', 'Berry ready to harvest'),\n berry_wither: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('ready_to_harvest', 'Berry about to wither/has withered'),\n berry_mutated: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('ready_to_harvest', 'Berry has mutated'),\n berry_replanted: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('ready_to_harvest', 'Berry has been replanted'),\n berry_dropped: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('ready_to_harvest', 'Berry has been dropped'),\n mulch_ran_out: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('ready_to_harvest', 'Mulch has run out'),\n wandering_pokemon: new _utilities_Sound__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('wandering', 'Wandering Pokémon encountered'),\n },\n },\n NotificationSetting: {\n General: {\n encountered_shiny: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.encountered_shiny', 'Encountered a shiny Pokémon', true),\n encountered_roaming: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.encountered_roaming', 'Encountered a roaming Pokémon', true),\n quest_ready_to_complete: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.quest_ready_to_complete', 'Quest is ready to be completed', true),\n quest_completed: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.quest_completed', 'Quest completed', true),\n event_start_end: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.event_start_end', 'Event start/end information', true),\n gym_won: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.gym_won', 'Gym leader defeated', true),\n offline_earnings: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.offline_earnings', 'Offline earnings', true),\n achievement_complete: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.achievement_complete', 'Achievement complete', true, true),\n new_catch: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.new_catch', 'New Pokémon/shiny captured', true, true),\n battle_frontier: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.battle_frontier', 'Battle Frontier', true, true),\n pokerus: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.pokerus', 'Pokémon has become Resistant to Pokérus', true),\n },\n Hatchery: {\n ready_to_hatch: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.ready_to_hatch', 'Egg ready to hatch', true),\n hatched: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.hatched', 'Egg hatched', true),\n hatched_shiny: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.hatched_shiny', 'Egg hatched a shiny', true),\n empty_queue: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('empty_queue', 'Hatchery queue is empty', true),\n hatchery_helper: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.hatchery_helper', 'Hatchery Helper Hired/Fired', true),\n },\n Dungeons: {\n dungeon_complete: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.dungeon_complete', 'Dungeon completed', true),\n common_dungeon_item_found: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.common_dungeon_item_found', 'Common Item found in dungeon chest', true),\n rare_dungeon_item_found: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.rare_dungeon_item_found', 'Rare Item found in dungeon chest', true),\n },\n Items: {\n route_item_found: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.route_item_found', 'Berry found during route battle', true),\n battle_item_timer: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.battle_item_timer', 'Battle item about to wear off', true),\n dropped_item: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.dropped_item', 'Enemy Pokémon dropped an item', true),\n item_bought: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.item_bought', 'Item bought', true),\n },\n Underground: {\n underground_energy_full: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.underground_energy_full', 'Mining energy reached maximum capacity', true),\n underground_energy_restore: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.underground_energy_restore', 'Mining energy restored', true),\n underground_dig_deeper: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notifcation.underground_dig_deeper', 'You dig deeper...', true),\n underground_item_found: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.underground_item_found', 'Item found while mining', true),\n },\n Farming: {\n berry_discovered: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.berry_discovered', 'New Berry discovered', true),\n ready_to_harvest: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.ready_to_harvest', 'Berry ready to harvest', true),\n about_to_wither: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.about_to_wither', 'Berry about to wither', true),\n berry_withered: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.berry_withered', 'Berry has withered', true),\n berry_mutated: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.berry_mutated', 'Berry has mutated', true),\n berry_replanted: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.berry_replanted', 'Berry has been replanted', true),\n berry_dropped: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.berry_dropped', 'Berry has been dropped', true),\n mulch_ran_out: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.mulch_ran_out', 'Mulch has run out', true),\n wandering_pokemon: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.wandering_pokemon', 'Wandering Pokémon encountered', true),\n farm_hand: new _settings_NotificationSetting__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('notification.farm_hand', 'Farm Hand Hired/Fired', true),\n },\n },\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NotificationConstants);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/notifications/NotificationConstants.ts?"); + +/***/ }), + +/***/ "./src/modules/notifications/NotificationOption.ts": +/*!*********************************************************!*\ + !*** ./src/modules/notifications/NotificationOption.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar NotificationOption;\n(function (NotificationOption) {\n NotificationOption[NotificationOption[\"info\"] = 0] = \"info\";\n NotificationOption[NotificationOption[\"success\"] = 1] = \"success\";\n NotificationOption[NotificationOption[\"warning\"] = 2] = \"warning\";\n NotificationOption[NotificationOption[\"danger\"] = 3] = \"danger\";\n NotificationOption[NotificationOption[\"primary\"] = 4] = \"primary\";\n NotificationOption[NotificationOption[\"secondary\"] = 5] = \"secondary\";\n NotificationOption[NotificationOption[\"dark\"] = 6] = \"dark\";\n NotificationOption[NotificationOption[\"light\"] = 7] = \"light\";\n})(NotificationOption || (NotificationOption = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NotificationOption);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/notifications/NotificationOption.ts?"); + +/***/ }), + +/***/ "./src/modules/notifications/Notifier.ts": +/*!***********************************************!*\ + !*** ./src/modules/notifications/Notifier.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Notifier)\n/* harmony export */ });\n/* harmony import */ var _NotificationOption__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NotificationOption */ \"./src/modules/notifications/NotificationOption.ts\");\n/* harmony import */ var _utilities_Rand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utilities/Rand */ \"./src/modules/utilities/Rand.ts\");\n\n\nclass Notifier {\n static notify({ message, type = _NotificationOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"].primary, title = '', timeout = 3000, time = 'just now', sound, setting, image, pokemonImage, strippedMessage, }) {\n $(document).ready(() => {\n var _a;\n // If we have sounds enabled for this, play it now\n if (sound) {\n sound.play();\n }\n if (setting && setting.desktopNotification.value && Notification.permission === 'granted') {\n const tempEl = document.createElement('div');\n tempEl.innerHTML = strippedMessage !== null && strippedMessage !== void 0 ? strippedMessage : message.replace(//gi, '\\n');\n const msg = tempEl.innerText.replace(/ +/g, ' ');\n const desktopNotification = new Notification(title, {\n body: msg,\n icon: image,\n silent: true,\n });\n setTimeout(() => {\n desktopNotification.close();\n }, timeout);\n }\n // Check if this type of notification is disabled\n if (setting && setting.inGameNotification && !setting.inGameNotification.value) {\n return;\n }\n // Get the notification ready to display\n const toastID = _utilities_Rand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].string(7);\n const toastHTML = `
\n ${title ? `
\n ${image ? `` : ''}\n ${pokemonImage ? `` : ''}\n ${title || ''}\n ${time}\n \n
` : ''}\n
\n ${!title && image ? `` : ''}\n ${!title && pokemonImage ? `` : ''}\n ${message.replace(/\\n/g, '
')}
\n ${title ? '' : ''}\n
\n
`;\n $('#toaster').prepend(toastHTML);\n // Show the notification\n (_a = $(`#${toastID}`)) === null || _a === void 0 ? void 0 : _a.toast('show');\n // Once the notification is shown, hide it after specified timeout\n $(`#${toastID}`).on('shown.bs.toast', () => {\n setTimeout(() => {\n $(`#${toastID}`).toast('hide');\n }, timeout);\n });\n // Once hidden remove the element\n $(`#${toastID}`).on('hidden.bs.toast', () => {\n document.getElementById(toastID).remove();\n });\n });\n }\n static prompt({ title, message, type = _NotificationOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"].primary, timeout = 0, sound = null, }) {\n // If we have sounds enabled for this, play it now\n if (sound) {\n sound.play();\n }\n return new Promise((resolve) => {\n // Get the notification ready to display\n const modalID = _utilities_Rand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].string(7);\n const html = `\n
\n
\n
\n
\n
${title}
\n \n
\n
\n ${message.replace(/\\n/g, '
')}\n
\n
\n \n
\n \n
\n
\n
`;\n $('#toaster').before(html);\n document.getElementById(`promptInput${modalID}`).addEventListener('keyup', ({ key }) => {\n if (key === 'Enter') {\n $(`#modal${modalID}`).modal('hide');\n }\n if (key === 'Escape') {\n $(`#promptInput${modalID}`).val('');\n }\n });\n $(`#modal${modalID}`).modal({\n backdrop: 'static',\n show: true,\n });\n // Once the modal is shown, hide it after specified timeout\n $(`#modal${modalID}`).on('shown.bs.modal', () => {\n document.getElementById(`promptInput${modalID}`).focus();\n if (timeout > 0) {\n setTimeout(() => {\n $(`#modal${modalID}`).modal('hide');\n }, timeout);\n }\n });\n // Clean the input if the player closes the modal with the X\n document.getElementById(`promptClose${modalID}`).addEventListener('click', () => {\n $(`#promptInput${modalID}`).val('');\n });\n // Once hidden remove the element\n $(`#modal${modalID}`).on('hidden.bs.modal', () => {\n const inputEl = document.getElementById(`promptInput${modalID}`);\n const inputValue = inputEl === null || inputEl === void 0 ? void 0 : inputEl.value;\n document.getElementById(`modal${modalID}`).remove();\n resolve(inputValue);\n });\n });\n }\n static confirm({ title, message, confirm = 'Ok', cancel = 'Cancel', type = _NotificationOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"].primary, timeout = 0, sound = null, }) {\n // If we have sounds enabled for this, play it now\n if (sound) {\n sound.play();\n }\n return new Promise((resolve) => {\n // Get the notification ready to display\n const modalID = _utilities_Rand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].string(7);\n const html = `\n
\n
\n
\n
\n
${title}
\n \n
\n
\n ${message.replace(/\\n/g, '
')}\n
\n \n
\n
\n
`;\n $('#toaster').before(html);\n document.getElementById(`modalConfirm${modalID}`).addEventListener('click', () => {\n resolve(true);\n });\n $(`#modal${modalID}`).modal({\n backdrop: 'static',\n show: true,\n });\n // Once the modal is shown, hide it after specified timeout\n $(`#modal${modalID}`).on('shown.bs.modal', () => {\n if (timeout > 0) {\n setTimeout(() => {\n $(`#modal${modalID}`).modal('hide');\n }, timeout);\n }\n });\n // Once hidden remove the element\n $(`#modal${modalID}`).on('hidden.bs.modal', () => {\n document.getElementById(`modal${modalID}`).remove();\n resolve(false);\n });\n });\n }\n static warning({ title, message, confirm = 'I understand', type = _NotificationOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"].primary, timeout = 0, sound = null, }) {\n // If we have sounds enabled for this, play it now\n if (sound) {\n sound.play();\n }\n return new Promise((resolve) => {\n // Get the notification ready to display\n const modalID = _utilities_Rand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].string(7);\n const html = `\n
\n
\n
\n
\n
${title}
\n
\n
\n ${message.replace(/\\n/g, '
')}
\n
\n \n
\n
\n
`;\n $('#toaster').before(html);\n document.getElementById(`modalConfirm${modalID}`).addEventListener('click', () => {\n resolve(true);\n });\n $(`#modal${modalID}`).modal({\n backdrop: 'static',\n show: true,\n });\n // Once the modal is shown, hide it after specified timeout\n $(`#modal${modalID}`).on('shown.bs.modal', () => {\n if (timeout > 0) {\n setTimeout(() => {\n $(`#modal${modalID}`).modal('hide');\n }, timeout);\n }\n });\n // Once hidden remove the element\n $(`#modal${modalID}`).on('hidden.bs.modal', () => {\n document.getElementById(`modal${modalID}`).remove();\n resolve(false);\n });\n });\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/notifications/Notifier.ts?"); + +/***/ }), + +/***/ "./src/modules/oakItems/BoughtOakItem.ts": +/*!***********************************************!*\ + !*** ./src/modules/oakItems/BoughtOakItem.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BoughtOakItem)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../wallet/AmountFactory */ \"./src/modules/wallet/AmountFactory.ts\");\n/* harmony import */ var _OakItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OakItem */ \"./src/modules/oakItems/OakItem.ts\");\n\n\n\nclass BoughtOakItem extends _OakItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(name, displayName, description, shopName, increasing, bonusList, inactiveBonus = 1, expGain = 1, expList = [500, 1000, 2500, 5000, 10000], maxLevel = 5, costList = _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_1__[\"default\"].createArray([50000, 100000, 250000, 500000, 1000000], _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money), bonusSymbol = '×') {\n super(name, displayName, description, increasing, bonusList, inactiveBonus, -1, expGain, expList, maxLevel, costList, bonusSymbol);\n this.shopName = shopName;\n this.purchasedKO = ko.observable(false);\n }\n isUnlocked() {\n return this.purchased;\n }\n get hint() {\n return ko.pureComputed(() => `Purchase from the ${this.shopName}`);\n }\n toJSON() {\n const json = super.toJSON();\n json.purchased = this.purchased;\n return json;\n }\n fromJSON(json) {\n var _a;\n super.fromJSON(json);\n this.purchased = (_a = json.purchased) !== null && _a !== void 0 ? _a : false;\n }\n get purchased() {\n return this.purchasedKO();\n }\n set purchased(bool) {\n this.purchasedKO(bool);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/oakItems/BoughtOakItem.ts?"); + +/***/ }), + +/***/ "./src/modules/oakItems/OakItem.ts": +/*!*****************************************!*\ + !*** ./src/modules/oakItems/OakItem.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ OakItem)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _upgrades_ExpUpgrade__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../upgrades/ExpUpgrade */ \"./src/modules/upgrades/ExpUpgrade.ts\");\n/* harmony import */ var _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../wallet/AmountFactory */ \"./src/modules/wallet/AmountFactory.ts\");\n\n\n\n\nclass OakItem extends _upgrades_ExpUpgrade__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(name, displayName, description, increasing, bonusList, inactiveBonus, unlockReq, expGain, expList = [500, 1000, 2500, 5000, 10000], maxLevel = 5, costList = _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createArray([50000, 100000, 250000, 500000, 1000000], _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.money), bonusSymbol = '×') {\n super(name, displayName, maxLevel, expList, costList, bonusList, increasing);\n this.description = description;\n this.inactiveBonus = inactiveBonus;\n this.unlockReq = unlockReq;\n this.expGain = expGain;\n this.bonusSymbol = bonusSymbol;\n this.defaults = {\n level: 0,\n exp: 0,\n isActive: false,\n };\n this.isActiveKO = ko.observable(false);\n }\n use(exp = this.expGain, scale = 1) {\n if (!this.isActive) {\n return;\n }\n if (!this.isMaxLevel()) {\n this.gainExp(exp * scale);\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(App.game.statistics.oakItemUses[this.name]);\n }\n isUnlocked() {\n return App.game.party.caughtPokemon.length >= this.unlockReq;\n }\n // TODO: do we need both of these hint methods?\n getHint() {\n return `Capture ${this.unlockReq - App.game.party.caughtPokemon.length} more unique Pokémon`;\n }\n get hint() {\n return ko.pureComputed(() => `Capture ${this.unlockReq - App.game.party.caughtPokemon.length} more unique Pokémon`);\n }\n calculateBonus(level = this.level) {\n if (!this.isActive) {\n return this.inactiveBonus;\n }\n return super.calculateBonus(level);\n }\n calculateBonusIfActive(level = this.level) {\n return super.calculateBonus(level);\n }\n toJSON() {\n const json = super.toJSON();\n json.isActive = this.isActive;\n return json;\n }\n fromJSON(json) {\n var _a;\n super.fromJSON(json);\n this.isActive = (_a = json.isActive) !== null && _a !== void 0 ? _a : this.defaults.isActive;\n }\n // Knockout getters/setters\n get expPercentage() {\n const nextLevelExp = this.level === 0 ? this.expList[this.level] : this.expList[this.level] - this.expList[this.level - 1];\n return (Math.ceil(this.normalizedExp / this.expGain) / Math.ceil(nextLevelExp / this.expGain)) * 100;\n }\n get progressString() {\n const nextLevelExp = this.level === 0 ? this.expList[this.level] : this.expList[this.level] - this.expList[this.level - 1];\n return `${Math.ceil(this.normalizedExp / this.expGain).toLocaleString('en-US')} / ${Math.ceil(nextLevelExp / this.expGain).toLocaleString('en-US')}`;\n }\n get isActive() {\n return this.isActiveKO();\n }\n set isActive(bool) {\n this.isActiveKO(bool);\n }\n get bonusText() {\n return `${this.calculateBonusIfActive()}${this.bonusSymbol}`;\n }\n get tooltip() {\n return ko.pureComputed(() => `${this.displayName}

${this.description}

Level: ${this.level}/${this.maxLevel}
Bonus: ${this.bonusText}`);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/oakItems/OakItem.ts?"); + +/***/ }), + +/***/ "./src/modules/oakItems/OakItemController.ts": +/*!***************************************************!*\ + !*** ./src/modules/oakItems/OakItemController.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ OakItemController)\n/* harmony export */ });\n/* harmony import */ var _enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/OakItemType */ \"./src/modules/enums/OakItemType.ts\");\n\nclass OakItemController {\n static click(item) {\n this.selectedItem = item;\n if (App.game.oakItems.isActive(item)) {\n App.game.oakItems.deactivate(item);\n return;\n }\n if (App.game.challenges.list.disableOakItems.active()) {\n return;\n }\n App.game.oakItems.activate(item);\n }\n static hover(item) {\n this.inspectedItem = item;\n }\n static hoverRelease() {\n this.inspectedItem = this.selectedItem;\n }\n static get inspectedItem() {\n return this.inspectedItemKO();\n }\n static set inspectedItem(item) {\n this.inspectedItemKO(item);\n }\n static get selectedItem() {\n return this.selectedItemKO();\n }\n static set selectedItem(item) {\n this.selectedItemKO(item);\n }\n}\nOakItemController.inspectedItemKO = ko.observable(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Magic_Ball);\nOakItemController.selectedItemKO = ko.observable(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Magic_Ball);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/oakItems/OakItemController.ts?"); + +/***/ }), + +/***/ "./src/modules/oakItems/OakItemLoadout.ts": +/*!************************************************!*\ + !*** ./src/modules/oakItems/OakItemLoadout.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ OakItemLoadout)\n/* harmony export */ });\nclass OakItemLoadout {\n constructor(name, loadout = []) {\n this.name = ko.observable(name);\n this.loadout = ko.observableArray(loadout);\n }\n static copy(old) {\n return new OakItemLoadout(old.name(), old.loadout());\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/oakItems/OakItemLoadout.ts?"); + +/***/ }), + +/***/ "./src/modules/oakItems/OakItemLoadouts.ts": +/*!*************************************************!*\ + !*** ./src/modules/oakItems/OakItemLoadouts.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ OakItemLoadouts)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _OakItemLoadout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OakItemLoadout */ \"./src/modules/oakItems/OakItemLoadout.ts\");\n\n\nclass OakItemLoadouts {\n constructor() {\n this.saveKey = 'oakItemLoadouts';\n this.defaults = {};\n this.loadouts = Array(OakItemLoadouts.MAX_SLOTS).fill(0).map((_, i) => new _OakItemLoadout__WEBPACK_IMPORTED_MODULE_1__[\"default\"](`Loadout ${i + 1}`));\n this.selectedLoadout = ko.observable(0).extend({ numeric: 0 });\n }\n activateLoadout(index) {\n if (App.game.challenges.list.disableOakItems.active()) {\n return;\n }\n App.game.oakItems.deactivateAll();\n this.loadouts[index].loadout().forEach((item) => {\n App.game.oakItems.activate(item);\n });\n }\n toggleItem(item) {\n if (App.game.challenges.list.disableOakItems.active()) {\n return;\n }\n const { loadout } = this.loadouts[this.selectedLoadout()];\n if (loadout().includes(item)) {\n const index = loadout().indexOf(item);\n if (index !== -1) {\n loadout.splice(index, 1);\n }\n }\n else if (loadout().length < App.game.oakItems.maxActiveCount() && App.game.oakItems.isUnlocked(item)) {\n loadout.push(item);\n }\n }\n hasItem(item) {\n return ko.pureComputed(() => this.loadouts[this.selectedLoadout()].loadout().includes(item));\n }\n getSelectedLoadout() {\n return this.loadouts[this.selectedLoadout()];\n }\n fromJSON(json) {\n json === null || json === void 0 ? void 0 : json.forEach((loadout, index) => {\n this.loadouts[index] = new _OakItemLoadout__WEBPACK_IMPORTED_MODULE_1__[\"default\"](loadout.name, loadout.loadout);\n });\n }\n toJSON() {\n return ko.toJS(this.loadouts.map((loadout) => (Object.assign(Object.assign({}, loadout), { name: loadout.name() }))));\n }\n}\nOakItemLoadouts.MAX_SLOTS = 5;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/oakItems/OakItemLoadouts.ts?"); + +/***/ }), + +/***/ "./src/modules/oakItems/OakItems.ts": +/*!******************************************!*\ + !*** ./src/modules/oakItems/OakItems.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ OakItems)\n/* harmony export */ });\n/* harmony import */ var _enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/OakItemType */ \"./src/modules/enums/OakItemType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../wallet/AmountFactory */ \"./src/modules/wallet/AmountFactory.ts\");\n/* harmony import */ var _BoughtOakItem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./BoughtOakItem */ \"./src/modules/oakItems/BoughtOakItem.ts\");\n/* harmony import */ var _OakItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./OakItem */ \"./src/modules/oakItems/OakItem.ts\");\n\n\n\n\n\n\nclass OakItems {\n constructor(unlockRequirements, multiplier) {\n this.multiplier = multiplier;\n this.name = 'Oak Items';\n this.saveKey = 'oakItems';\n this.itemList = [];\n this.unlockRequirements = unlockRequirements;\n this.maxLevelOakItems = ko.observable(0);\n }\n // eslint-disable-next-line class-methods-use-this\n canAccess() {\n return App.game.party.caughtPokemon.length >= 20;\n }\n initialize() {\n this.itemList = [\n new _OakItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Magic_Ball, 'Magic Ball', 'Gives a bonus to your catchrate', true, [5, 6, 7, 8, 9, 10], 0, 20, 2, undefined, undefined, undefined, '%'),\n new _OakItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Amulet_Coin, 'Amulet Coin', 'Gain more Pokédollars from battling', true, [1.25, 1.30, 1.35, 1.40, 1.45, 1.50], 1, 30, 1),\n new _OakItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rocky_Helmet, 'Rocky Helmet', 'Clicks do more damage', true, [1.25, 1.30, 1.35, 1.40, 1.45, 1.50], 1, 40, 3),\n new _OakItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Exp_Share, 'EXP Share', 'Gain more exp from battling', true, [1.15, 1.18, 1.21, 1.24, 1.27, 1.30], 1, 50, 1),\n new _OakItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Sprayduck, 'Sprayduck', 'Makes your berries grow faster', false, [1.25, 1.30, 1.35, 1.40, 1.45, 1.50], 1, 60, 1),\n new _OakItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Shiny_Charm, 'Shiny Charm', 'Encounter shinies more often', true, [1.50, 1.60, 1.70, 1.80, 1.90, 2.00], 1, 70, 150),\n new _OakItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Magma_Stone, 'Magma Stone', 'Hatch eggs faster', false, [1.50, 1.60, 1.70, 1.80, 1.90, 2.00], 1, 80, 10),\n new _OakItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Cell_Battery, 'Cell Battery', 'More passive mining energy regen', false, [1.5, 1.6, 1.7, 1.8, 1.9, 2], 1, 90, 20),\n new _BoughtOakItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Squirtbottle, 'Squirtbottle', 'Increases the chance of berry mutations', 'Johto Berry Master', true, [1.25, 1.5, 1.75, 2, 2.25, 2.5], 1, 10, undefined, undefined, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createArray([2000, 5000, 10000, 20000, 50000], _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.farmPoint)),\n new _BoughtOakItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Sprinklotad, 'Sprinklotad', 'Increases the chance of berry replants', 'Hoenn Berry Master', true, [1.15, 1.3, 1.45, 1.6, 1.75, 1.9], 1, 2, undefined, undefined, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createArray([2000, 5000, 10000, 20000, 50000], _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.farmPoint)),\n new _BoughtOakItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Explosive_Charge, 'Explosive Charge', 'All new mining layers start with damaged tiles', 'Cinnabar Island Shop', true, [2, 4, 7, 11, 15, 20], 1, 50, undefined, undefined, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createArray([50000, 100000, 400000, 1000000, 2000000], _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.money)),\n new _BoughtOakItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Treasure_Scanner, 'Treasure Scanner', 'Chance to multiply mining rewards', 'Cinnabar Island Shop', true, [4, 8, 12, 16, 20, 24], 1, 25, undefined, undefined, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createArray([50000, 100000, 250000, 500000, 1000000], _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.money), '%'),\n ];\n this.addMultiplier('clickAttack', _enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rocky_Helmet);\n this.addMultiplier('exp', _enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Exp_Share);\n this.addMultiplier('money', _enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Amulet_Coin);\n this.addMultiplier('shiny', _enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Shiny_Charm);\n this.addMultiplier('eggStep', _enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Magma_Stone);\n this.itemList.forEach((i) => i.levelKO.subscribe(() => this.maxLevelOakItems(this.itemList.filter((i2) => i2.isMaxLevel()).length)));\n }\n calculateBonus(item, useItem = false) {\n const oakItem = this.itemList[item];\n if (oakItem === undefined) {\n console.error('Could not find oakItem', item, 'This could have unintended consequences');\n return 1;\n }\n if (useItem) {\n oakItem.use();\n }\n return oakItem.calculateBonus();\n }\n isUnlocked(item) {\n if (this.itemList[item] === undefined) {\n return false;\n }\n return this.itemList[item].isUnlocked();\n }\n use(item, scale = 1) {\n if (!this.isUnlocked(item)) {\n return;\n }\n this.itemList[item].use(undefined, scale);\n }\n maxActiveCount() {\n for (let i = 0; i < this.unlockRequirements.length; i += 1) {\n if (App.game.party.caughtPokemon.length < this.unlockRequirements[i]) {\n return i;\n }\n }\n return this.unlockRequirements.length;\n }\n activeCount() {\n let count = 0;\n for (let i = 0; i < this.itemList.length; i += 1) {\n if (this.itemList[i].isActive) {\n count += 1;\n }\n }\n return count;\n }\n hasAvailableSlot() {\n return this.activeCount() < this.maxActiveCount();\n }\n fromJSON(json) {\n if (json == null) {\n return;\n }\n // Loading OakItems\n _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].enumStrings(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"]).forEach((oakItem) => {\n if (json[oakItem] !== undefined) {\n this.itemList[_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][oakItem]].fromJSON(json[oakItem]);\n }\n });\n this.maxLevelOakItems(this.itemList.filter((i) => i.isMaxLevel()).length);\n }\n toJSON() {\n const save = {};\n for (let i = 0; i < this.itemList.length; i += 1) {\n save[_enums_OakItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][this.itemList[i].name]] = this.itemList[i].toJSON();\n }\n return save;\n }\n // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars\n update(delta) {\n // This method intentionally left blank\n }\n isActive(item) {\n if (this.itemList[item] === undefined) {\n return false;\n }\n return this.itemList[item].isActive;\n }\n activate(item) {\n if (App.game.challenges.list.disableOakItems.active()) {\n return;\n }\n if (!this.isUnlocked(item)) {\n return;\n }\n if (this.maxActiveCount() === 0) {\n return;\n }\n if (this.maxActiveCount() === 1) {\n this.deactivateAll();\n this.itemList[item].isActive = true;\n }\n if (this.activeCount() < this.maxActiveCount()) {\n this.itemList[item].isActive = true;\n }\n }\n deactivateAll() {\n for (let i = 0; i < this.itemList.length; i += 1) {\n this.itemList[i].isActive = false;\n }\n }\n deactivate(item) {\n this.itemList[item].isActive = false;\n }\n addMultiplier(type, item) {\n this.multiplier.addBonus(type, this.createMultiplierFunction(item), this.itemList[item].displayName);\n }\n createMultiplierFunction(item) {\n return (useBonus) => this.calculateBonus(item, useBonus);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/oakItems/OakItems.ts?"); + +/***/ }), + +/***/ "./src/modules/party/Category.ts": +/*!***************************************!*\ + !*** ./src/modules/party/Category.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokemonCategories)\n/* harmony export */ });\n/* harmony import */ var _settings_Settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../settings/Settings */ \"./src/modules/settings/Settings.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n\n\n\nclass PokemonCategories {\n constructor() {\n this.saveKey = 'categories';\n this.defaults = {};\n }\n static initialize() {\n PokemonCategories.addCategory('None', '#333333', 0); // dark grey\n PokemonCategories.addCategory('Favorite', '#e74c3c', 1); // red\n }\n static reset() {\n PokemonCategories.categoryAssignSelected(0);\n App.game.party.caughtPokemon.forEach((p) => {\n p.resetCategory();\n });\n [...PokemonCategories.categories()].forEach(c => {\n PokemonCategories.removeCategory(c.id, true);\n });\n ko.tasks.runEarly();\n PokemonCategories.initialize();\n const none = PokemonCategories.getCategoryById(0);\n none.name('None');\n none.color('#333333');\n }\n static addCategory(name, color, id = -1) {\n if (id === -1) {\n // Get next unused ID\n PokemonCategories.categories().forEach(c => {\n id = Math.max(id, c.id);\n });\n id++;\n }\n else {\n // Prevent adding an existing category\n // Really only used when resetting to preserve the None category\n if (PokemonCategories.categories().some(c => c.id === id)) {\n return;\n }\n }\n const cat = { name: ko.observable(name), color: ko.observable(color), id: id };\n PokemonCategories.categories.push(cat);\n // Subscribe to color change event\n const root = document.documentElement;\n cat.subscriber = cat.color.subscribe((value) => {\n root.style.setProperty(`--pokemon-category-${id + 1}`, value);\n });\n // Update the color now\n cat.color.valueHasMutated();\n }\n static removeCategory(id, force = false) {\n var _a;\n // Cannot remove None category\n if (id === 0) {\n return;\n }\n const index = PokemonCategories.categories().findIndex(c => c.id == id);\n // Is this case expected to happen ?\n if (index === -1) {\n return;\n }\n const cat = PokemonCategories.categories()[index];\n const pokeballFilters = App.game.pokeballFilters.list().filter(f => { var _a, _b; return ((_b = (_a = f.options) === null || _a === void 0 ? void 0 : _a.category) === null || _b === void 0 ? void 0 : _b.observableValue()) == cat.id; });\n if (pokeballFilters.length) {\n if (force) {\n // Forced remove (reset filters)\n // When the category is used in a pokeball filter disable the filter and remove the category option.\n pokeballFilters.forEach(filter => {\n filter.enabled(false);\n App.game.pokeballFilters.removeFilterOption(filter, 'category');\n });\n }\n else {\n const filterNames = pokeballFilters.map(f => `${f.name}`);\n if (filterNames.length > 1) {\n filterNames[filterNames.length - 1] = `and ${filterNames[filterNames.length - 1]}`;\n }\n const namesString = filterNames.join(filterNames.length > 2 ? ', ' : ' ');\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__[\"default\"].notify({\n title: 'Remove Category',\n message: `This category is in use by the ${namesString} Pokéball filter${filterNames.length > 1 ? 's' : ''} and cannot be removed.`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__[\"default\"].NotificationOption.danger,\n timeout: 1e4,\n });\n return;\n }\n }\n // Remove category from pokemon\n App.game.party.caughtPokemon.forEach((p) => p.removeCategory(cat.id));\n // Remove category from hatchery helper filters if selected\n App.game.breeding.hatcheryHelpers.available().forEach((helper) => {\n const idx = helper.categories().indexOf(cat.id);\n if (idx > -1) {\n helper.categories().splice(idx, 1);\n }\n });\n // Remove subscriber\n (_a = cat.subscriber) === null || _a === void 0 ? void 0 : _a.dispose();\n // Remove category\n PokemonCategories.categories.splice(index, 1);\n // Update Pokedex/Breeding filters\n if (_settings_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getSetting('pokedexCategoryFilter').value === cat.id) {\n _settings_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setSettingByName('pokedexCategoryFilter', -1);\n }\n if (_settings_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getSetting('breedingCategoryFilter').value === cat.id) {\n _settings_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setSettingByName('breedingCategoryFilter', -1);\n }\n }\n static getCategoryById(id) {\n return PokemonCategories.categories().find(c => c.id === id);\n }\n toJSON() {\n const categories = [];\n PokemonCategories.categories().forEach((c) => {\n categories.push({\n id: c.id,\n name: c.name(),\n color: c.color(),\n });\n });\n return {\n categories,\n };\n }\n fromJSON(json) {\n var _a, _b;\n if (!(json === null || json === void 0 ? void 0 : json.categories)) {\n return;\n }\n const categoryOrder = (_a = json.categories) === null || _a === void 0 ? void 0 : _a.map(c => c.id);\n (_b = json.categories) === null || _b === void 0 ? void 0 : _b.forEach((category) => {\n const cat = PokemonCategories.getCategoryById(category.id);\n if (cat) {\n cat.name(category.name);\n cat.color(category.color);\n }\n else {\n PokemonCategories.addCategory(category.name, category.color, category.id);\n }\n });\n PokemonCategories.categories().sort((a, b) => categoryOrder.indexOf(a.id) - categoryOrder.indexOf(b.id));\n }\n}\nPokemonCategories.categories = ko.observableArray([]);\nPokemonCategories.playerCategories = ko.pureComputed(() => PokemonCategories.categories().filter((cat) => cat.id > 0));\n// Pokedex & Hatchery category assign mode\nPokemonCategories.categoryAssignEnabled = ko.observable(false);\nPokemonCategories.categoryAssignSelected = ko.observable(0);\nPokemonCategories.initialize();\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/party/Category.ts?"); + +/***/ }), + +/***/ "./src/modules/party/LevelType.ts": +/*!****************************************!*\ + !*** ./src/modules/party/LevelType.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"levelRequirements\": () => (/* binding */ levelRequirements)\n/* harmony export */ });\n/* eslint-disable max-len */\nvar LevelType;\n(function (LevelType) {\n LevelType[LevelType[\"erratic\"] = 0] = \"erratic\";\n LevelType[LevelType[\"fast\"] = 1] = \"fast\";\n LevelType[LevelType[\"mediumfast\"] = 2] = \"mediumfast\";\n LevelType[LevelType[\"mediumslow\"] = 3] = \"mediumslow\";\n LevelType[LevelType[\"slow\"] = 4] = \"slow\";\n LevelType[LevelType[\"fluctuating\"] = 5] = \"fluctuating\";\n})(LevelType || (LevelType = {}));\nconst levelRequirements = [\n [0, 15, 52, 122, 237, 406, 637, 942, 1326, 1800, 2369, 3041, 3822, 4719, 5737, 6881, 8155, 9564, 11111, 12800, 14632, 16610, 18737, 21012, 23437, 26012, 28737, 31610, 34632, 37800, 41111, 44564, 48155, 51881, 55737, 59719, 63822, 68041, 72369, 76800, 81326, 85942, 90637, 95406, 100237, 105122, 110052, 115015, 120001, 125000, 131324, 137795, 144410, 151165, 158056, 165079, 172229, 179503, 186894, 194400, 202013, 209728, 217540, 225443, 233431, 241496, 249633, 257834, 267406, 276458, 286328, 296358, 305767, 316074, 326531, 336255, 346965, 357812, 367807, 378880, 390077, 400293, 411686, 423190, 433572, 445239, 457001, 467489, 479378, 491346, 501878, 513934, 526049, 536557, 548720, 560922, 571333, 583539, 591882, 600000, Number.MAX_SAFE_INTEGER],\n [0, 6, 21, 51, 100, 172, 274, 409, 583, 800, 1064, 1382, 1757, 2195, 2700, 3276, 3930, 4665, 5487, 6400, 7408, 8518, 9733, 11059, 12500, 14060, 15746, 17561, 19511, 21600, 23832, 26214, 28749, 31443, 34300, 37324, 40522, 43897, 47455, 51200, 55136, 59270, 63605, 68147, 72900, 77868, 83058, 88473, 94119, 100000, 106120, 112486, 119101, 125971, 133100, 140492, 148154, 156089, 164303, 172800, 181584, 190662, 200037, 209715, 219700, 229996, 240610, 251545, 262807, 274400, 286328, 298598, 311213, 324179, 337500, 351180, 365226, 379641, 394431, 409600, 425152, 441094, 457429, 474163, 491300, 508844, 526802, 545177, 563975, 583200, 602856, 622950, 643485, 664467, 685900, 707788, 730138, 752953, 776239, 800000, Number.MAX_SAFE_INTEGER],\n [0, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 1331, 1728, 2197, 2744, 3375, 4096, 4913, 5832, 6859, 8000, 9261, 10648, 12167, 13824, 15625, 17576, 19683, 21952, 24389, 27000, 29791, 32768, 35937, 39304, 42875, 46656, 50653, 54872, 59319, 64000, 68921, 74088, 79507, 85184, 91125, 97336, 103823, 110592, 117649, 125000, 132651, 140608, 148877, 157464, 166375, 175616, 185193, 195112, 205379, 216000, 226981, 238328, 250047, 262144, 274625, 287496, 300763, 314432, 328509, 343000, 357911, 373248, 389017, 405224, 421875, 438976, 456533, 474552, 493039, 512000, 531441, 551368, 571787, 592704, 614125, 636056, 658503, 681472, 704969, 729000, 753571, 778688, 804357, 830584, 857375, 884736, 912673, 941192, 970299, 1000000, Number.MAX_SAFE_INTEGER],\n [0, 9, 57, 96, 135, 179, 236, 314, 419, 560, 742, 973, 1261, 1612, 2035, 2535, 3120, 3798, 4575, 5460, 6458, 7577, 8825, 10208, 11735, 13411, 15244, 17242, 19411, 21760, 24294, 27021, 29949, 33084, 36435, 40007, 43808, 47846, 52127, 56660, 61450, 66505, 71833, 77440, 83335, 89523, 96012, 102810, 109923, 117360, 125126, 133229, 141677, 150476, 159635, 169159, 179056, 189334, 199999, 211060, 222522, 234393, 246681, 259392, 272535, 286115, 300140, 314618, 329555, 344960, 360838, 377197, 394045, 411388, 429235, 447591, 466464, 485862, 505791, 526260, 547274, 568841, 590969, 613664, 636935, 660787, 685228, 710266, 735907, 762160, 789030, 816525, 844653, 873420, 902835, 932903, 963632, 995030, 1027103, 1059860, Number.MAX_SAFE_INTEGER],\n [0, 10, 33, 80, 156, 270, 428, 640, 911, 1250, 1663, 2160, 2746, 3430, 4218, 5120, 6141, 7290, 8573, 10000, 11576, 13310, 15208, 17280, 19531, 21970, 24603, 27440, 30486, 33750, 37238, 40960, 44921, 49130, 53593, 58320, 63316, 68590, 74148, 80000, 86151, 92610, 99383, 106480, 113906, 121670, 129778, 138240, 147061, 156250, 165813, 175760, 186096, 196830, 207968, 219520, 231491, 243890, 256723, 270000, 283726, 297910, 312558, 327680, 343281, 359370, 375953, 393040, 410636, 428750, 447388, 466560, 486271, 506530, 527343, 548720, 570666, 593190, 616298, 640000, 664301, 689210, 714733, 740880, 767656, 795070, 823128, 851840, 881211, 911250, 941963, 973360, 1005446, 1038230, 1071718, 1105920, 1140841, 1176490, 1212873, 1250000, Number.MAX_SAFE_INTEGER],\n [0, 4, 13, 32, 65, 112, 178, 276, 393, 540, 745, 967, 1230, 1591, 1957, 2457, 3046, 3732, 4526, 5440, 6482, 7666, 9003, 10506, 12187, 14060, 16140, 18439, 20974, 23760, 26811, 30146, 33780, 37731, 42017, 46656, 50653, 55969, 60505, 66560, 71677, 78533, 84277, 91998, 98415, 107069, 114205, 123863, 131766, 142500, 151222, 163105, 172697, 185807, 196322, 210739, 222231, 238036, 250562, 267840, 281456, 300293, 315059, 335544, 351520, 373744, 390991, 415050, 433631, 459620, 479600, 507617, 529063, 559209, 582187, 614566, 639146, 673863, 700115, 737280, 765275, 804997, 834809, 877201, 908905, 954084, 987754, 1035837, 1071552, 1122660, 1160499, 1214753, 1254796, 1312322, 1354652, 1415577, 1460276, 1524731, 1571884, 1640000, Number.MAX_SAFE_INTEGER],\n];\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LevelType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/party/LevelType.ts?"); + +/***/ }), + +/***/ "./src/modules/pokeballs/PokeballFilter.ts": +/*!*************************************************!*\ + !*** ./src/modules/pokeballs/PokeballFilter.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokeballFilter)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PokeballFilterOptions */ \"./src/modules/pokeballs/PokeballFilterOptions.ts\");\n\n\nclass PokeballFilter {\n constructor(name, options, ball = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokeball.None, enabled = true, inverted = false) {\n var _a, _b;\n this._name = ko.observable(name);\n this.ball = ko.observable(ball);\n this._options = ko.observable(Object.fromEntries(Object.entries(options).map(([k, v]) => [k, _PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_1__.pokeballFilterOptions[k].createSetting(v)])));\n this.enabled = ko.observable(enabled);\n this.inverted = ko.observable(inverted);\n this.uuid = (_b = (_a = crypto.randomUUID) === null || _a === void 0 ? void 0 : _a.call(crypto)) !== null && _b !== void 0 ? _b : Array.prototype.slice.apply(crypto.getRandomValues(new Uint8Array(16))) // use getRandomValues to generate 16 bytes\n .map((i) => ('0' + i.toString(16)).slice(-2)).join('') // turn the bytes into their hexadecimal representation\n .replace(/^(.{8})(.{4})(.{4})(.{4})(.+)$/, '$1-$2-$3-$4-$5'); // format like a UUID generated by randomUUID\n }\n test(data) {\n if (!this.enabled()) {\n return false;\n }\n return this.inverted()\n // true if any option doesn't match\n ? Object.entries(this.options).some(([key, setting]) => !_PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_1__.pokeballFilterOptions[key].matchTest(setting.observableValue(), data[key]))\n // true only when all options match\n : Object.entries(this.options).every(([key, setting]) => _PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_1__.pokeballFilterOptions[key].matchTest(setting.observableValue(), data[key]));\n }\n get description() {\n const disabledText = this.enabled()\n ? ''\n : 'This filter is disabled.

';\n const optionList = Object.entries(this.options);\n if (optionList.length === 0) {\n return `${disabledText}${[\n 'This filter will catch all Pokémon.',\n ].join('
')}`;\n }\n const bulletPoints = `
    ${optionList\n .map(([opt, setting]) => `
  • ${_PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_1__.pokeballFilterOptions[opt].describe(setting.observableValue())}
  • `)\n .join('')}
`;\n return `${disabledText}This filter affects wild Pokémon ${this.inverted()\n ? 'without'\n : 'with'} the combined traits of: ${bulletPoints}`;\n }\n get name() {\n return this._name();\n }\n set name(value) {\n this._name(value);\n }\n get options() {\n return this._options();\n }\n set options(value) {\n this._options(value);\n }\n toJSON() {\n return {\n name: this.name,\n options: Object.fromEntries(Object.entries(this.options).map(([k, s]) => [k, s.observableValue()])),\n ball: this.ball(),\n inverted: this.inverted(),\n enabled: this.enabled(),\n };\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokeballs/PokeballFilter.ts?"); + +/***/ }), + +/***/ "./src/modules/pokeballs/PokeballFilterOptions.ts": +/*!********************************************************!*\ + !*** ./src/modules/pokeballs/PokeballFilterOptions.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"pokeballFilterOptions\": () => (/* binding */ pokeballFilterOptions)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _settings_BooleanSetting__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings/BooleanSetting */ \"./src/modules/settings/BooleanSetting.ts\");\n/* harmony import */ var _settings_Setting__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../settings/Setting */ \"./src/modules/settings/Setting.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _settings_SettingOption__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../settings/SettingOption */ \"./src/modules/settings/SettingOption.ts\");\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _requirements_CustomRequirement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../requirements/CustomRequirement */ \"./src/modules/requirements/CustomRequirement.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _enums_EncounterType__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../enums/EncounterType */ \"./src/modules/enums/EncounterType.ts\");\n/* harmony import */ var _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../requirements/QuestLineStepCompletedRequirement */ \"./src/modules/requirements/QuestLineStepCompletedRequirement.ts\");\n/* harmony import */ var _party_Category__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../party/Category */ \"./src/modules/party/Category.ts\");\n\n\n\n\n\n\n\n\n\n\n\nclass PokeballFilterOption {\n constructor(createSetting, describe, requirement, matchTest = (optionValue, testValue) => optionValue === testValue) {\n this.createSetting = createSetting;\n this.describe = describe;\n this.requirement = requirement;\n this.matchTest = matchTest;\n this.defaultSetting = createSetting();\n }\n canUse() {\n var _a, _b;\n return (_b = (_a = this.requirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true;\n }\n}\nconst tempShadowRequirement = new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Shadows in the Desert', 3);\nconst encounterTypeRequirements = {\n [_enums_EncounterType__WEBPACK_IMPORTED_MODULE_8__[\"default\"].trainer]: tempShadowRequirement,\n [_enums_EncounterType__WEBPACK_IMPORTED_MODULE_8__[\"default\"].ultraBeast]: new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Ultra Beast Hunt', 2),\n};\nconst pokeballFilterOptions = {\n shiny: new PokeballFilterOption((bool = true) => new _settings_BooleanSetting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokeballFilterShiny', 'Shiny', bool), (isShiny) => `Are ${isShiny ? '' : 'not '}Shiny`),\n shadow: new PokeballFilterOption((bool = true) => new _settings_BooleanSetting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokeballFilterShadow', 'Shadow', bool), (isShadow) => `Are ${isShadow ? '' : 'not '}Shadow`, tempShadowRequirement),\n caught: new PokeballFilterOption((bool = true) => new _settings_BooleanSetting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokeballFilterCaught', 'Caught', bool), (isCaught) => `${isCaught ? 'Already' : 'Not yet'} caught`),\n caughtShiny: new PokeballFilterOption((bool = true) => new _settings_BooleanSetting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokeballFilterCaughtShiny', 'Caught Shiny', bool), (isCaughtShiny) => `Shiny form ${isCaughtShiny ? 'already ' : 'not yet '}caught`),\n caughtShadow: new PokeballFilterOption((bool = true) => new _settings_BooleanSetting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokeballFilterCaughtShadow', 'Caught Shadow', bool), (isCaughtShadow) => `Shadow form ${isCaughtShadow ? 'already ' : 'not yet '}caught`, tempShadowRequirement),\n pokerus: new PokeballFilterOption((pokerus = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokerus.Uninfected) => new _settings_Setting__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('pokeballFilterPokerus', 'Pokérus State', _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].enumStrings(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokerus).map((k) => new _settings_SettingOption__WEBPACK_IMPORTED_MODULE_4__[\"default\"](k, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokerus[k])), pokerus), (pokerusState) => `Are in the ${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokerus[pokerusState]} Pokérus state`, new _requirements_CustomRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"](ko.pureComputed(() => App.game.keyItems.hasKeyItem(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_5__[\"default\"].Pokerus_virus)), true, 'Pokérus virus is required')),\n pokemonType: new PokeballFilterOption((type = _enums_PokemonType__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Normal, name = 'pokeballFilterPokemonType', defaultName = 'Pokémon Type') => new _settings_Setting__WEBPACK_IMPORTED_MODULE_2__[\"default\"](name, defaultName, _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].enumStrings(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_7__[\"default\"]).map((k) => new _settings_SettingOption__WEBPACK_IMPORTED_MODULE_4__[\"default\"](k, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_7__[\"default\"][k])), type), (pokemonType) => `Is ${_enums_PokemonType__WEBPACK_IMPORTED_MODULE_7__[\"default\"][pokemonType]} type`, undefined, (optionValue, testValues) => testValues.includes(optionValue)),\n encounterType: new PokeballFilterOption((type = _enums_EncounterType__WEBPACK_IMPORTED_MODULE_8__[\"default\"].route) => new _settings_Setting__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('pokeballFilterEncounterType', 'Encounter Type', Object.values(_enums_EncounterType__WEBPACK_IMPORTED_MODULE_8__[\"default\"]).map((v) => new _settings_SettingOption__WEBPACK_IMPORTED_MODULE_4__[\"default\"](v, v, encounterTypeRequirements[v])), type), (type) => `Is ${_GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].anOrA(type)} ${type} encounter`),\n category: new PokeballFilterOption((category = 0) => new _settings_Setting__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('pokeballFilterCategory', 'Category', () => _party_Category__WEBPACK_IMPORTED_MODULE_10__[\"default\"].categories().map((c) => new _settings_SettingOption__WEBPACK_IMPORTED_MODULE_4__[\"default\"](c.name(), c.id)), category), (category) => { var _a; return `In the ${(_a = _party_Category__WEBPACK_IMPORTED_MODULE_10__[\"default\"].categories().find(c => c.id == category)) === null || _a === void 0 ? void 0 : _a.name()} category`; }, undefined, (optionValue, testValues) => testValues === null || testValues === void 0 ? void 0 : testValues.includes(optionValue)),\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokeballs/PokeballFilterOptions.ts?"); + +/***/ }), + +/***/ "./src/modules/pokeballs/PokeballFilters.ts": +/*!**************************************************!*\ + !*** ./src/modules/pokeballs/PokeballFilters.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokeballFilters)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _PokeballFilter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PokeballFilter */ \"./src/modules/pokeballs/PokeballFilter.ts\");\n/* harmony import */ var _PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PokeballFilterOptions */ \"./src/modules/pokeballs/PokeballFilterOptions.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../notifications/NotificationOption */ \"./src/modules/notifications/NotificationOption.ts\");\n/* harmony import */ var _utilities_arrayUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utilities/arrayUtils */ \"./src/modules/utilities/arrayUtils.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\nclass PokeballFilters {\n constructor() {\n this.name = 'Pokeball Filters';\n this.saveKey = 'pokeballFilters';\n this.defaults = {};\n this.presets = [\n { name: 'New Shiny', options: { shiny: true, caughtShiny: false }, ball: _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokeball.Pokeball },\n { name: 'New', options: { caught: false }, ball: _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokeball.Pokeball },\n { name: 'Caught Shiny', options: { shiny: true, caughtShiny: true }, ball: _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokeball.Pokeball },\n { name: 'Contagious', options: { pokerus: _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokerus.Contagious } },\n { name: 'Caught', options: { caught: true } },\n ];\n this.list = ko.observableArray([]);\n this.displayList = ko.pureComputed(() => this.list().filter((f) => !PokeballFilters.hideFilter(f)));\n this.testSettings = (() => {\n const settings = Object.fromEntries(Object.entries(_PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_2__.pokeballFilterOptions).map(([k, pfo]) => [k, pfo.createSetting()]));\n // Create two Pokemon Type settings\n delete settings.pokemonType;\n settings.type1 = _PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_2__.pokeballFilterOptions.pokemonType.createSetting(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Normal, 'pokeballFilterPokemonType1', 'Pokémon Type 1');\n settings.type2 = _PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_2__.pokeballFilterOptions.pokemonType.createSetting(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Normal, 'pokeballFilterPokemonType2', 'Pokémon Type 2');\n return settings;\n })();\n this.testSettingsData = ko.pureComputed(() => {\n const data = Object.fromEntries(Object.entries(this.testSettings).map(([k, v]) => [k, v.observableValue()]));\n // Handle Pokemon Types\n data.pokemonType = [data.type1, data.type2];\n delete data.type1;\n delete data.type2;\n data.category = [data.category];\n return data;\n });\n }\n static hideFilter(filter) {\n return Object.keys(filter.options).some((k) => !_PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_2__.pokeballFilterOptions[k].canUse());\n }\n initialize() {\n this.testSettings.caught.observableValue.subscribe((isCaught) => {\n if (!isCaught) {\n // If not caught, we can't have shiny or shadow either\n this.testSettings.caughtShiny.observableValue(false);\n this.testSettings.caughtShadow.observableValue(false);\n }\n }, undefined, undefined);\n this.testSettings.caughtShiny.observableValue.subscribe((isCaughtShiny) => {\n if (isCaughtShiny) {\n this.testSettings.caught.observableValue(true);\n }\n }, undefined, undefined);\n this.testSettings.caughtShadow.observableValue.subscribe((isCaughtShadow) => {\n if (isCaughtShadow) {\n this.testSettings.caught.observableValue(true);\n }\n }, undefined, undefined);\n _settings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSetting('catchFilters.invertPriorityOrder').observableValue.subscribe(() => this.list.reverse());\n }\n canAccess() { return true; }\n update() { }\n getFilterByName(name) {\n return this.list().find((filter) => filter.name === name);\n }\n findMatch(data) {\n return _settings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSetting('catchFilters.invertPriorityOrder').value\n ? (0,_utilities_arrayUtils__WEBPACK_IMPORTED_MODULE_5__.findRight)(this.displayList(), (filter) => filter.test(data))\n : this.displayList().find((filter) => filter.test(data));\n }\n deleteFilter(filter) {\n return __awaiter(this, void 0, void 0, function* () {\n if (yield _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__[\"default\"].confirm({\n title: 'Delete pokeball filter',\n message: `Are you sure you want to delete \"${filter.name}\"?`,\n type: _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_4__[\"default\"].danger,\n confirm: 'Delete',\n })) {\n this.list.remove(filter);\n }\n });\n }\n createFilter() {\n const enabled = _settings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSetting('catchFilters.initialEnabled').value;\n this.list.unshift(new _PokeballFilter__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('New Filter', {}, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokeball.Pokeball, enabled));\n }\n addFilterOption(filter, option) {\n if (filter.options[option]) {\n // Don't replace the option if it exists already\n return;\n }\n const newOptions = Object.assign(Object.assign({}, filter.options), { [option]: _PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_2__.pokeballFilterOptions[option].createSetting() });\n filter.options = newOptions;\n }\n removeFilterOption(filter, option) {\n // Make a copy to put in observable, to make sure UI is updated properly\n const newOptions = Object.assign({}, filter.options);\n delete newOptions[option];\n filter.options = newOptions;\n }\n reset() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(yield _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__[\"default\"].confirm({\n title: 'Reset filters to defaults',\n message: 'Are you sure you want to reset your filters to the default ones?',\n }))) {\n return;\n }\n const defaultFilters = this.presets.map(({ name, options, ball, enabled, inverted }) => (new _PokeballFilter__WEBPACK_IMPORTED_MODULE_1__[\"default\"](name, options, ball, enabled, inverted)));\n if (_settings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSetting('catchFilters.invertPriorityOrder').value) {\n defaultFilters.reverse();\n }\n this.list(defaultFilters);\n });\n }\n toJSON() {\n return {\n list: this.list().map((pf) => pf.toJSON()),\n };\n }\n fromJSON(json) {\n var _a;\n if (json === null) {\n return;\n }\n const list = ((_a = json.list) === null || _a === void 0 ? void 0 : _a.length) > 0\n ? json.list\n : _settings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSetting('catchFilters.invertPriorityOrder').value\n ? [...this.presets].reverse()\n : this.presets;\n list.forEach(({ name, options, ball, inverted, enabled }) => {\n this.list.push(new _PokeballFilter__WEBPACK_IMPORTED_MODULE_1__[\"default\"](name, options, ball, enabled, inverted));\n });\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokeballs/PokeballFilters.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/DataPokemon.ts": +/*!*********************************************!*\ + !*** ./src/modules/pokemons/DataPokemon.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DataPokemon)\n/* harmony export */ });\nclass DataPokemon {\n constructor(id, name, catchRate, evolutions, type1, type2, attack, hitpoints, levelType, exp, eggCycles, heldItem, gender) {\n this.id = id;\n this.name = name;\n this.catchRate = catchRate;\n this.evolutions = evolutions;\n this.type1 = type1;\n this.type2 = type2;\n this.attack = attack;\n this.hitpoints = hitpoints;\n this.levelType = levelType;\n this.exp = exp;\n this.eggCycles = eggCycles;\n this.heldItem = heldItem;\n this.gender = gender;\n this.shiny = false;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/DataPokemon.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/PokemonHelper.ts": +/*!***********************************************!*\ + !*** ./src/modules/pokemons/PokemonHelper.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"calcNativeRegion\": () => (/* binding */ calcNativeRegion),\n/* harmony export */ \"calcUniquePokemonsByRegion\": () => (/* binding */ calcUniquePokemonsByRegion),\n/* harmony export */ \"displayName\": () => (/* binding */ displayName),\n/* harmony export */ \"getAllShadowPokemon\": () => (/* binding */ getAllShadowPokemon),\n/* harmony export */ \"getImage\": () => (/* binding */ getImage),\n/* harmony export */ \"getMegaStones\": () => (/* binding */ getMegaStones),\n/* harmony export */ \"getPokeballImage\": () => (/* binding */ getPokeballImage),\n/* harmony export */ \"getPokemonById\": () => (/* binding */ getPokemonById),\n/* harmony export */ \"getPokemonByName\": () => (/* binding */ getPokemonByName),\n/* harmony export */ \"hasGigantamaxForm\": () => (/* binding */ hasGigantamaxForm),\n/* harmony export */ \"hasMegaEvolution\": () => (/* binding */ hasMegaEvolution),\n/* harmony export */ \"hasUncaughtGigantamaxForm\": () => (/* binding */ hasUncaughtGigantamaxForm),\n/* harmony export */ \"hasUncaughtMegaEvolution\": () => (/* binding */ hasUncaughtMegaEvolution),\n/* harmony export */ \"incrementPokemonStatistics\": () => (/* binding */ incrementPokemonStatistics),\n/* harmony export */ \"isGigantamaxForm\": () => (/* binding */ isGigantamaxForm),\n/* harmony export */ \"isMegaEvolution\": () => (/* binding */ isMegaEvolution),\n/* harmony export */ \"typeIdToString\": () => (/* binding */ typeIdToString),\n/* harmony export */ \"typeStringToId\": () => (/* binding */ typeStringToId)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _mapProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mapProvider */ \"./src/modules/pokemons/mapProvider.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _DataPokemon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./DataPokemon */ \"./src/modules/pokemons/DataPokemon.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _requirements_MegaEvolveRequirement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../requirements/MegaEvolveRequirement */ \"./src/modules/requirements/MegaEvolveRequirement.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _settings_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../settings/Settings */ \"./src/modules/settings/Settings.ts\");\n\n\n\n\n\n\n\n\n// eslint-disable-next-line import/prefer-default-export\nfunction calcNativeRegion(pokemonName) {\n const pokemon = _mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[pokemonName];\n if (pokemon.nativeRegion !== undefined) {\n return pokemon.nativeRegion;\n }\n const { id } = pokemon;\n const region = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.MaxIDPerRegion.findIndex((maxRegionID) => maxRegionID >= Math.floor(id));\n return region >= 0 ? region : _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region.none;\n}\nfunction calcUniquePokemonsByRegion(region) {\n return new Set(_mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonList.filter((p) => p.id > 0 && calcNativeRegion(p.name) === region).map((p) => Math.floor(p.id))).size;\n}\nfunction getPokemonById(id) {\n return this.getPokemonByName(_mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[id].name);\n}\nfunction getPokemonByName(name) {\n var _a;\n const basePokemon = _mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[name];\n if (!basePokemon) {\n console.warn('Could not find pokemon', name);\n return null;\n }\n const type1 = basePokemon.type[0];\n const type2 = (_a = basePokemon.type[1]) !== null && _a !== void 0 ? _a : _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].None;\n const eggCycles = basePokemon.eggCycles || 20;\n return new _DataPokemon__WEBPACK_IMPORTED_MODULE_3__[\"default\"](basePokemon.id, basePokemon.name, basePokemon.catchRate, basePokemon.evolutions, type1, type2, basePokemon.attack, basePokemon.base.hitpoints, basePokemon.levelType, basePokemon.exp, eggCycles, basePokemon.heldItem, basePokemon.gender);\n}\nfunction typeStringToId(id) {\n return _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"][id];\n}\nfunction typeIdToString(id) {\n return _enums_PokemonType__WEBPACK_IMPORTED_MODULE_2__[\"default\"][id];\n}\nfunction getImage(pokemonId, shiny = undefined, gender = undefined, shadow = undefined) {\n let src = 'assets/images/';\n let showShiny = shiny;\n let showFemale = gender === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattlePokemonGender.Female;\n let showShadow = shadow === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShadowStatus.Shadow;\n const partyPokemon = App.game.party.getPokemon(pokemonId);\n if (partyPokemon) {\n if (shiny === undefined) {\n showShiny = partyPokemon.shiny && !partyPokemon.hideShinyImage() && !_settings_Settings__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getSetting('partyHideShinySprites').observableValue();\n }\n if (gender === undefined) {\n showFemale = partyPokemon.defaultFemaleSprite();\n }\n if (shadow === undefined) {\n showShadow = partyPokemon.shadow === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShadowStatus.Shadow\n || (partyPokemon.shadow === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShadowStatus.Purified && (partyPokemon.showShadowImage || _settings_Settings__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getSetting('partyShowPurifiedShadowSprites').observableValue()));\n }\n }\n if (showShiny) {\n src += 'shiny';\n }\n if (showShadow) {\n src += 'shadow';\n }\n let genderString = '';\n // If Pokémon is female, use the female sprite, otherwise use the male/genderless one\n if (showFemale && this.getPokemonById(pokemonId).gender.visualDifference) {\n genderString = '-f';\n }\n src += `pokemon/${pokemonId}${genderString}.png`;\n return src;\n}\nfunction getPokeballImage(pokemonName) {\n let src = '';\n if (App.game.party.alreadyCaughtPokemon(getPokemonByName(pokemonName).id)) {\n src = 'assets/images/pokeball/Pokeball-';\n if (App.game.party.alreadyCaughtPokemon(getPokemonByName(pokemonName).id, true)) {\n src += 'shiny-';\n }\n src += 'small.png';\n }\n return src;\n}\nfunction displayName(englishName) {\n return App.translation.get(englishName, 'pokemon');\n}\nfunction hasMegaEvolution(pokemonName) {\n var _a;\n return !!((_a = _mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[pokemonName].evolutions) === null || _a === void 0 ? void 0 : _a.some((e) => e.restrictions.some((r) => r instanceof _requirements_MegaEvolveRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"])));\n}\nfunction hasUncaughtMegaEvolution(pokemonName) {\n var _a;\n return !!((_a = _mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[pokemonName].evolutions) === null || _a === void 0 ? void 0 : _a.some((e) => !App.game.party.alreadyCaughtPokemonByName(e.evolvedPokemon) && e.restrictions.some((r) => r instanceof _requirements_MegaEvolveRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"])));\n}\nfunction isMegaEvolution(pokemonName) {\n return PokemonLocations.getPokemonPrevolution(pokemonName).some((e) => e.evolvedPokemon == pokemonName && e.restrictions.some((r) => r instanceof _requirements_MegaEvolveRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));\n}\nfunction getMegaStones(pokemonName) {\n return _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].enumStrings(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.MegaStoneType)\n .filter(s => { var _a; return ((_a = _items_ItemList__WEBPACK_IMPORTED_MODULE_6__.ItemList[s]) === null || _a === void 0 ? void 0 : _a.basePokemon) == pokemonName; })\n .map(s => _items_ItemList__WEBPACK_IMPORTED_MODULE_6__.ItemList[s]);\n}\nfunction hasGigantamaxForm(pokemonName) {\n return _mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[`Gigantamax ${pokemonName}`].id > 0 || _mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[`Eternamax ${pokemonName}`].id > 0;\n}\nfunction hasUncaughtGigantamaxForm(pokemonName) {\n let gmaxForm = _mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[`Gigantamax ${pokemonName}`];\n if (gmaxForm.id <= 0) {\n gmaxForm = _mapProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pokemonMap[`Eternamax ${pokemonName}`];\n }\n return gmaxForm.id > 0 && !App.game.party.alreadyCaughtPokemon(gmaxForm.id);\n}\nfunction isGigantamaxForm(pokemonName) {\n return pokemonName.startsWith('Gigantamax') || pokemonName.startsWith('Eternamax');\n}\nconst getAllShadowPokemon = ko.pureComputed(() => {\n return new Set(Object.values(dungeonList).flatMap(d => d.allShadowPokemon()));\n});\n// To have encounter/caught/defeat/hatch statistics in a single place\nfunction incrementPokemonStatistics(pokemonId, statistic, shiny, gender, shadow) {\n const pokemonStatistics = {\n Captured: App.game.statistics.pokemonCaptured[pokemonId],\n Defeated: App.game.statistics.pokemonDefeated[pokemonId],\n Encountered: App.game.statistics.pokemonEncountered[pokemonId],\n Hatched: App.game.statistics.pokemonHatched[pokemonId],\n MaleCaptured: App.game.statistics.malePokemonCaptured[pokemonId],\n MaleDefeated: App.game.statistics.malePokemonDefeated[pokemonId],\n MaleEncountered: App.game.statistics.malePokemonEncountered[pokemonId],\n MaleHatched: App.game.statistics.malePokemonHatched[pokemonId],\n FemaleCaptured: App.game.statistics.femalePokemonCaptured[pokemonId],\n FemaleDefeated: App.game.statistics.femalePokemonDefeated[pokemonId],\n FemaleEncountered: App.game.statistics.femalePokemonEncountered[pokemonId],\n FemaleHatched: App.game.statistics.femalePokemonHatched[pokemonId],\n ShinyCaptured: App.game.statistics.shinyPokemonCaptured[pokemonId],\n ShinyDefeated: App.game.statistics.shinyPokemonDefeated[pokemonId],\n ShinyEncountered: App.game.statistics.shinyPokemonEncountered[pokemonId],\n ShinyHatched: App.game.statistics.shinyPokemonHatched[pokemonId],\n ShinyMaleCaptured: App.game.statistics.shinyMalePokemonCaptured[pokemonId],\n ShinyMaleDefeated: App.game.statistics.shinyMalePokemonDefeated[pokemonId],\n ShinyMaleEncountered: App.game.statistics.shinyMalePokemonEncountered[pokemonId],\n ShinyMaleHatched: App.game.statistics.shinyMalePokemonHatched[pokemonId],\n ShinyFemaleCaptured: App.game.statistics.shinyFemalePokemonCaptured[pokemonId],\n ShinyFemaleDefeated: App.game.statistics.shinyFemalePokemonDefeated[pokemonId],\n ShinyFemaleEncountered: App.game.statistics.shinyFemalePokemonEncountered[pokemonId],\n ShinyFemaleHatched: App.game.statistics.shinyFemalePokemonHatched[pokemonId],\n ShadowCaptured: App.game.statistics.shadowPokemonCaptured[pokemonId],\n ShadowDefeated: App.game.statistics.shadowPokemonDefeated[pokemonId],\n ShadowMaleCaptured: App.game.statistics.shadowMalePokemonCaptured[pokemonId],\n ShadowMaleDefeated: App.game.statistics.shadowMalePokemonDefeated[pokemonId],\n ShadowFemaleCaptured: App.game.statistics.shadowFemalePokemonCaptured[pokemonId],\n ShadowFemaleDefeated: App.game.statistics.shadowFemalePokemonDefeated[pokemonId],\n };\n const totalStatistics = {\n Captured: App.game.statistics.totalPokemonCaptured,\n Defeated: App.game.statistics.totalPokemonDefeated,\n Encountered: App.game.statistics.totalPokemonEncountered,\n Hatched: App.game.statistics.totalPokemonHatched,\n MaleCaptured: App.game.statistics.totalMalePokemonCaptured,\n MaleDefeated: App.game.statistics.totalMalePokemonDefeated,\n MaleEncountered: App.game.statistics.totalMalePokemonEncountered,\n MaleHatched: App.game.statistics.totalMalePokemonHatched,\n FemaleCaptured: App.game.statistics.totalFemalePokemonCaptured,\n FemaleDefeated: App.game.statistics.totalFemalePokemonDefeated,\n FemaleEncountered: App.game.statistics.totalFemalePokemonEncountered,\n FemaleHatched: App.game.statistics.totalFemalePokemonHatched,\n GenderlessCaptured: App.game.statistics.totalGenderlessPokemonCaptured,\n GenderlessDefeated: App.game.statistics.totalGenderlessPokemonDefeated,\n GenderlessEncountered: App.game.statistics.totalGenderlessPokemonEncountered,\n GenderlessHatched: App.game.statistics.totalGenderlessPokemonHatched,\n ShinyCaptured: App.game.statistics.totalShinyPokemonCaptured,\n ShinyDefeated: App.game.statistics.totalShinyPokemonDefeated,\n ShinyEncountered: App.game.statistics.totalShinyPokemonEncountered,\n ShinyHatched: App.game.statistics.totalShinyPokemonHatched,\n ShinyMaleCaptured: App.game.statistics.totalShinyMalePokemonCaptured,\n ShinyMaleDefeated: App.game.statistics.totalShinyMalePokemonDefeated,\n ShinyMaleEncountered: App.game.statistics.totalShinyMalePokemonEncountered,\n ShinyMaleHatched: App.game.statistics.totalShinyMalePokemonHatched,\n ShinyFemaleCaptured: App.game.statistics.totalShinyFemalePokemonCaptured,\n ShinyFemaleDefeated: App.game.statistics.totalShinyFemalePokemonDefeated,\n ShinyFemaleEncountered: App.game.statistics.totalShinyFemalePokemonEncountered,\n ShinyFemaleHatched: App.game.statistics.totalShinyFemalePokemonHatched,\n ShinyGenderlessCaptured: App.game.statistics.totalShinyGenderlessPokemonCaptured,\n ShinyGenderlessDefeated: App.game.statistics.totalShinyGenderlessPokemonDefeated,\n ShinyGenderlessEncountered: App.game.statistics.totalShinyGenderlessPokemonEncountered,\n ShinyGenderlessHatched: App.game.statistics.totalShinyGenderlessPokemonHatched,\n ShadowCaptured: App.game.statistics.totalShadowPokemonCaptured,\n ShadowDefeated: App.game.statistics.totalShadowPokemonDefeated,\n ShadowMaleCaptured: App.game.statistics.totalShadowMalePokemonCaptured,\n ShadowMaleDefeated: App.game.statistics.totalShadowMalePokemonDefeated,\n ShadowFemaleCaptured: App.game.statistics.totalShadowFemalePokemonCaptured,\n ShadowFemaleDefeated: App.game.statistics.totalShadowFemalePokemonDefeated,\n ShadowGenderlessCaptured: App.game.statistics.totalShadowGenderlessPokemonCaptured,\n ShadowGenderlessDefeated: App.game.statistics.totalShadowGenderlessPokemonDefeated,\n };\n let genderString = '';\n // Gender Statistics\n if (gender === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattlePokemonGender.Male) {\n genderString = 'Male';\n }\n else if (gender === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattlePokemonGender.Female) {\n genderString = 'Female';\n }\n else if (gender === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattlePokemonGender.NoGender) {\n genderString = 'Genderless';\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(pokemonStatistics[statistic]);\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(totalStatistics[statistic]);\n // Gender\n if (gender !== _GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattlePokemonGender.NoGender) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(pokemonStatistics[genderString + statistic]);\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(totalStatistics[genderString + statistic]);\n if (shiny) {\n const shinyString = 'Shiny';\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(pokemonStatistics[shinyString + statistic]);\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(totalStatistics[shinyString + statistic]);\n // Gender\n if (gender !== _GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattlePokemonGender.NoGender) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(pokemonStatistics[shinyString + genderString + statistic]);\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(totalStatistics[shinyString + genderString + statistic]);\n }\n if (shadow === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShadowStatus.Shadow) {\n const shadowString = 'Shadow';\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(pokemonStatistics[shadowString + statistic]);\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(totalStatistics[shadowString + statistic]);\n // Gender\n if (gender !== _GameConstants__WEBPACK_IMPORTED_MODULE_0__.BattlePokemonGender.NoGender) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(pokemonStatistics[shadowString + genderString + statistic]);\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(totalStatistics[shadowString + genderString + statistic]);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/PokemonHelper.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/PokemonList.ts": +/*!*********************************************!*\ + !*** ./src/modules/pokemons/PokemonList.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"pokemonBabyPrevolutionMap\": () => (/* binding */ pokemonBabyPrevolutionMap),\n/* harmony export */ \"pokemonList\": () => (/* binding */ pokemonList),\n/* harmony export */ \"pokemonMap\": () => (/* binding */ pokemonMap)\n/* harmony export */ });\n/* harmony import */ var _evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./evolutions/Methods */ \"./src/modules/pokemons/evolutions/Methods.ts\");\n/* harmony import */ var _enums_BerryType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums/BerryType */ \"./src/modules/enums/BerryType.ts\");\n/* harmony import */ var _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums/ItemType */ \"./src/modules/enums/ItemType.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _evolutions_Base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./evolutions/Base */ \"./src/modules/pokemons/evolutions/Base.ts\");\n/* harmony import */ var _party_LevelType__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../party/LevelType */ \"./src/modules/party/LevelType.ts\");\n/* harmony import */ var _utilities_GenericProxy__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utilities/GenericProxy */ \"./src/modules/utilities/GenericProxy.ts\");\n/* harmony import */ var _utilities_Rand__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utilities/Rand */ \"./src/modules/utilities/Rand.ts\");\n/* harmony import */ var _weather_WeatherType__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../weather/WeatherType */ \"./src/modules/weather/WeatherType.ts\");\n/* harmony import */ var _mapProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./mapProvider */ \"./src/modules/pokemons/mapProvider.ts\");\n/* harmony import */ var _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../dayCycle/DayCyclePart */ \"./src/modules/dayCycle/DayCyclePart.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* eslint-disable no-param-reassign */\n/* eslint-disable quote-props */\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst pokemonBabyPrevolutionMap = {};\n// For regional evolutions, so it evolves in the respective region and not with a random chance\nconst alolaOnly = [_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola];\nconst galarOnly = [_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar];\nconst hisuiOnly = [_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui];\nconst allButAlola = [\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.johto,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hoenn,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.sinnoh,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.unova,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kalos,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n];\nconst allButGalar = [\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.johto,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hoenn,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.sinnoh,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.unova,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kalos,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n];\nconst allButHisui = [\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.johto,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hoenn,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.sinnoh,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.unova,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kalos,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n];\nfunction createPokemonArray(...args) {\n return args;\n}\nconst pokemonList = createPokemonArray({\n 'id': 1,\n 'name': 'Bulbasaur',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bulbasaur', 'Ivysaur', 16)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 49,\n 'specialAttack': 65,\n 'defense': 49,\n 'specialDefense': 65,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 1.01,\n 'name': 'Bulbasaur (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bulbasaur (Clone)', 'Ivysaur (Clone)', 16)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 49,\n 'specialAttack': 65,\n 'defense': 49,\n 'specialDefense': 65,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 1.02,\n 'name': 'Spooky Bulbasaur',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Spooky Bulbasaur', 'Spooky Ivysaur', 16)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 49,\n 'specialAttack': 65,\n 'defense': 49,\n 'specialDefense': 65,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 1.03,\n 'name': 'Bulbasaur (Rose)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bulbasaur (Rose)', 'Ivysaur (Rose)', 16)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 49,\n 'specialAttack': 65,\n 'defense': 49,\n 'specialDefense': 65,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 2,\n 'name': 'Ivysaur',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ivysaur', 'Venusaur', 32),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Ivysaur', 'Gigantamax Venusaur'),\n ],\n 'base': {\n 'hitpoints': 60,\n 'attack': 62,\n 'specialAttack': 80,\n 'defense': 63,\n 'specialDefense': 80,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 2.01,\n 'name': 'Ivysaur (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ivysaur (Clone)', 'Venusaur (Clone)', 32)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 62,\n 'specialAttack': 80,\n 'defense': 63,\n 'specialDefense': 80,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 2.02,\n 'name': 'Spooky Ivysaur',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Spooky Ivysaur', 'Spooky Venusaur', 32)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 62,\n 'specialAttack': 80,\n 'defense': 63,\n 'specialDefense': 80,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 2.03,\n 'name': 'Ivysaur (Rose)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ivysaur (Rose)', 'Venusaur (Rose)', 32)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 62,\n 'specialAttack': 80,\n 'defense': 63,\n 'specialDefense': 80,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 3,\n 'name': 'Venusaur',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 236,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Venusaurite, 'Venusaur', 'Mega Venusaur')],\n 'base': {\n 'hitpoints': 80,\n 'attack': 82,\n 'specialAttack': 100,\n 'defense': 83,\n 'specialDefense': 100,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n 'visualDifference': true,\n },\n}, {\n 'id': 3.01,\n 'name': 'Mega Venusaur',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 281,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 122,\n 'defense': 123,\n 'specialDefense': 120,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 3.02,\n 'name': 'Gigantamax Venusaur',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 236,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 160,\n 'attack': 82,\n 'specialAttack': 100,\n 'defense': 83,\n 'specialDefense': 100,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 3.03,\n 'name': 'Venusaur (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 236,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 82,\n 'specialAttack': 100,\n 'defense': 83,\n 'specialDefense': 100,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n 'visualDifference': true,\n },\n}, {\n 'id': 3.04,\n 'name': 'Spooky Venusaur',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 236,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 82,\n 'specialAttack': 100,\n 'defense': 83,\n 'specialDefense': 100,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 3.05,\n 'name': 'Venusaur (Rose)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 236,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 82,\n 'specialAttack': 100,\n 'defense': 83,\n 'specialDefense': 100,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 4,\n 'name': 'Charmander',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Charmander', 'Charmeleon', 16)],\n 'base': {\n 'hitpoints': 39,\n 'attack': 52,\n 'specialAttack': 60,\n 'defense': 43,\n 'specialDefense': 50,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 4.01,\n 'name': 'Charmander (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Charmander (Clone)', 'Charmeleon (Clone)', 16)],\n 'base': {\n 'hitpoints': 39,\n 'attack': 52,\n 'specialAttack': 60,\n 'defense': 43,\n 'specialDefense': 50,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 5,\n 'name': 'Charmeleon',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Charmeleon', 'Charizard', 36),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Charmeleon', 'Gigantamax Charizard'),\n ],\n 'base': {\n 'hitpoints': 58,\n 'attack': 64,\n 'specialAttack': 80,\n 'defense': 58,\n 'specialDefense': 65,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 5.01,\n 'name': 'Charmeleon (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Charmeleon (Clone)', 'Charizard (Clone)', 36)],\n 'base': {\n 'hitpoints': 58,\n 'attack': 64,\n 'specialAttack': 80,\n 'defense': 58,\n 'specialDefense': 65,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 6,\n 'name': 'Charizard',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 240,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedMegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Charizardite_X, 'Charizard', 'Mega Charizard X'),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedMegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Charizardite_Y, 'Charizard', 'Mega Charizard Y'),\n ],\n 'base': {\n 'hitpoints': 78,\n 'attack': 84,\n 'specialAttack': 109,\n 'defense': 78,\n 'specialDefense': 85,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 6.01,\n 'name': 'Mega Charizard X',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 285,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 130,\n 'specialAttack': 130,\n 'defense': 111,\n 'specialDefense': 85,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 6.02,\n 'name': 'Mega Charizard Y',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 285,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 104,\n 'specialAttack': 154,\n 'defense': 78,\n 'specialDefense': 115,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 6.03,\n 'name': 'Gigantamax Charizard',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 240,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 156,\n 'attack': 84,\n 'specialAttack': 109,\n 'defense': 78,\n 'specialDefense': 85,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 6.04,\n 'name': 'Charizard (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 240,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 78,\n 'attack': 84,\n 'specialAttack': 109,\n 'defense': 78,\n 'specialDefense': 85,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 7,\n 'name': 'Squirtle',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 63,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Squirtle', 'Wartortle', 16)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 48,\n 'specialAttack': 50,\n 'defense': 65,\n 'specialDefense': 64,\n 'speed': 43,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 7.01,\n 'name': 'Squirtle (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 63,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Squirtle (Clone)', 'Wartortle (Clone)', 16)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 48,\n 'specialAttack': 50,\n 'defense': 65,\n 'specialDefense': 64,\n 'speed': 43,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 8,\n 'name': 'Wartortle',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wartortle', 'Blastoise', 36),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Wartortle', 'Gigantamax Blastoise'),\n ],\n 'base': {\n 'hitpoints': 59,\n 'attack': 63,\n 'specialAttack': 65,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 58,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 8.01,\n 'name': 'Wartortle (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wartortle (Clone)', 'Blastoise (Clone)', 36)],\n 'base': {\n 'hitpoints': 59,\n 'attack': 63,\n 'specialAttack': 65,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 58,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 9,\n 'name': 'Blastoise',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Blastoisinite, 'Blastoise', 'Mega Blastoise')],\n 'base': {\n 'hitpoints': 79,\n 'attack': 83,\n 'specialAttack': 85,\n 'defense': 100,\n 'specialDefense': 105,\n 'speed': 78,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 9.01,\n 'name': 'Mega Blastoise',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 284,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 79,\n 'attack': 103,\n 'specialAttack': 135,\n 'defense': 120,\n 'specialDefense': 115,\n 'speed': 78,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 9.02,\n 'name': 'Gigantamax Blastoise',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 158,\n 'attack': 83,\n 'specialAttack': 85,\n 'defense': 100,\n 'specialDefense': 105,\n 'speed': 78,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 9.03,\n 'name': 'Blastoise (Clone)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 79,\n 'attack': 83,\n 'specialAttack': 85,\n 'defense': 100,\n 'specialDefense': 105,\n 'speed': 78,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 10,\n 'name': 'Caterpie',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 39,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Caterpie', 'Metapod', 7)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 30,\n 'specialAttack': 20,\n 'defense': 35,\n 'specialDefense': 20,\n 'speed': 45,\n },\n}, {\n 'id': 10.01,\n 'name': 'Pinkan Caterpie',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 39,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 45,\n 'attack': 30,\n 'specialAttack': 20,\n 'defense': 35,\n 'specialDefense': 20,\n 'speed': 45,\n },\n}, {\n 'id': 11,\n 'name': 'Metapod',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 72,\n 'eggCycles': 15,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Metapod', 'Butterfree', 10),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Metapod', 'Valencian Butterfree'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Metapod', 'Pink Butterfree'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Metapod', 'Ash\\'s Butterfree'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Metapod', 'Gigantamax Butterfree'),\n ],\n 'base': {\n 'hitpoints': 50,\n 'attack': 20,\n 'specialAttack': 25,\n 'defense': 55,\n 'specialDefense': 25,\n 'speed': 30,\n },\n}, {\n 'id': 12,\n 'name': 'Butterfree',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 60,\n 'attack': 45,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 80,\n 'speed': 70,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 12.01,\n 'name': 'Gigantamax Butterfree',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 120,\n 'attack': 45,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 80,\n 'speed': 70,\n },\n}, {\n 'id': 12.02,\n 'name': 'Valencian Butterfree',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 60,\n 'attack': 45,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 80,\n 'speed': 70,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 12.03,\n 'name': 'Pink Butterfree',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 60,\n 'attack': 45,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 80,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 12.04,\n 'name': 'Ash\\'s Butterfree',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'eggCycles': 35,\n 'base': {\n 'hitpoints': 60,\n 'attack': 45,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 80,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 13,\n 'name': 'Weedle',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 39,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Weedle', 'Kakuna', 7)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 35,\n 'specialAttack': 20,\n 'defense': 30,\n 'specialDefense': 20,\n 'speed': 50,\n },\n}, {\n 'id': 13.01,\n 'name': 'Pinkan Weedle',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 39,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 40,\n 'attack': 35,\n 'specialAttack': 20,\n 'defense': 30,\n 'specialDefense': 20,\n 'speed': 50,\n },\n}, {\n 'id': 14,\n 'name': 'Kakuna',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 72,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Kakuna', 'Beedrill', 10)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 25,\n 'specialAttack': 25,\n 'defense': 50,\n 'specialDefense': 25,\n 'speed': 35,\n },\n}, {\n 'id': 15,\n 'name': 'Beedrill',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Beedrillite, 'Beedrill', 'Mega Beedrill')],\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 45,\n 'defense': 40,\n 'specialDefense': 80,\n 'speed': 75,\n },\n}, {\n 'id': 15.01,\n 'name': 'Mega Beedrill',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 223,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 65,\n 'attack': 150,\n 'specialAttack': 15,\n 'defense': 40,\n 'specialDefense': 80,\n 'speed': 145,\n },\n}, {\n 'id': 16,\n 'name': 'Pidgey',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 50,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pidgey', 'Pidgeotto', 18)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 35,\n 'defense': 40,\n 'specialDefense': 35,\n 'speed': 56,\n },\n}, {\n 'id': 16.01,\n 'name': 'Pinkan Pidgey',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 50,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.QuestlineLevelEvolution)('Team Rocket\\'s Pinkan Theme Park', 'Pinkan Pidgey', 'Pinkan Pidgeotto', 18)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 35,\n 'defense': 40,\n 'specialDefense': 35,\n 'speed': 56,\n },\n}, {\n 'id': 17,\n 'name': 'Pidgeotto',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 122,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pidgeotto', 'Pidgeot', 36)],\n 'base': {\n 'hitpoints': 63,\n 'attack': 60,\n 'specialAttack': 50,\n 'defense': 55,\n 'specialDefense': 50,\n 'speed': 71,\n },\n}, {\n 'id': 17.01,\n 'name': 'Pinkan Pidgeotto',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 122,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 63,\n 'attack': 60,\n 'specialAttack': 50,\n 'defense': 55,\n 'specialDefense': 50,\n 'speed': 71,\n },\n}, {\n 'id': 18,\n 'name': 'Pidgeot',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 216,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Pidgeotite, 'Pidgeot', 'Mega Pidgeot')],\n 'base': {\n 'hitpoints': 83,\n 'attack': 80,\n 'specialAttack': 70,\n 'defense': 75,\n 'specialDefense': 70,\n 'speed': 101,\n },\n}, {\n 'id': 18.01,\n 'name': 'Mega Pidgeot',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 261,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 83,\n 'attack': 80,\n 'specialAttack': 135,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 121,\n },\n}, {\n 'id': 19,\n 'name': 'Rattata',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 51,\n 'eggCycles': 15,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Rattata', 'Raticate', 20),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Rattata', 'Valencian Raticate'),\n ],\n 'base': {\n 'hitpoints': 30,\n 'attack': 56,\n 'specialAttack': 25,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 72,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 19.01,\n 'name': 'Alolan Rattata',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 51,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedLevelEvolution)('Alolan Rattata', 'Alolan Raticate', 20)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 56,\n 'specialAttack': 25,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 72,\n },\n}, {\n 'id': 19.02,\n 'name': 'Pinkan Rattata',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 51,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 30,\n 'attack': 56,\n 'specialAttack': 25,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 72,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 20,\n 'name': 'Raticate',\n 'catchRate': 127,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 145,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 55,\n 'attack': 81,\n 'specialAttack': 50,\n 'defense': 60,\n 'specialDefense': 70,\n 'speed': 97,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 20.01,\n 'name': 'Alolan Raticate',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 127,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 145,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 75,\n 'attack': 71,\n 'specialAttack': 40,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 77,\n },\n}, {\n 'id': 20.02,\n 'name': 'Totem Raticate',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 127,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 145,\n 'eggCycles': 23,\n 'base': {\n 'hitpoints': 75,\n 'attack': 71,\n 'specialAttack': 40,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 77,\n },\n}, {\n 'id': 20.03,\n 'name': 'Valencian Raticate',\n 'catchRate': 127,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 145,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 55,\n 'attack': 81,\n 'specialAttack': 50,\n 'defense': 60,\n 'specialDefense': 70,\n 'speed': 97,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 21,\n 'name': 'Spearow',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 52,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Spearow', 'Fearow', 20)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 60,\n 'specialAttack': 31,\n 'defense': 30,\n 'specialDefense': 31,\n 'speed': 70,\n },\n}, {\n 'id': 21.01,\n 'name': 'Red Spearow',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 52,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 40,\n 'attack': 60,\n 'specialAttack': 31,\n 'defense': 30,\n 'specialDefense': 31,\n 'speed': 70,\n },\n}, {\n 'id': 22,\n 'name': 'Fearow',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 155,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 61,\n 'defense': 65,\n 'specialDefense': 61,\n 'speed': 100,\n },\n}, {\n 'id': 23,\n 'name': 'Ekans',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ekans', 'Arbok', 22),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Ekans', 'Pinkan Arbok'),\n ],\n 'base': {\n 'hitpoints': 35,\n 'attack': 60,\n 'specialAttack': 40,\n 'defense': 44,\n 'specialDefense': 54,\n 'speed': 55,\n },\n}, {\n 'id': 24,\n 'name': 'Arbok',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 157,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 95,\n 'specialAttack': 65,\n 'defense': 69,\n 'specialDefense': 79,\n 'speed': 80,\n },\n}, {\n 'id': 24.01,\n 'name': 'Pinkan Arbok',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 157,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 95,\n 'specialAttack': 65,\n 'defense': 69,\n 'specialDefense': 79,\n 'speed': 80,\n },\n}, {\n 'id': 25,\n 'name': 'Pikachu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(allButAlola, 'Pikachu', 'Raichu', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Thunder_stone),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(alolaOnly, 'Pikachu', 'Alolan Raichu', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Thunder_stone),\n ],\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 25.01,\n 'name': 'Pikachu (Original Cap)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.02,\n 'name': 'Pikachu (Hoenn Cap)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.03,\n 'name': 'Pikachu (Sinnoh Cap)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.04,\n 'name': 'Pikachu (Unova Cap)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.05,\n 'name': 'Pikachu (Kalos Cap)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.06,\n 'name': 'Pikachu (Alola Cap)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.07,\n 'name': 'Pikachu (World Cap)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.08,\n 'name': 'Pikachu (Partner Cap)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.09,\n 'name': 'Gigantamax Pikachu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 70,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n}, {\n 'id': 25.10,\n 'name': 'Flying Pikachu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n}, {\n 'id': 25.11,\n 'name': 'Surfing Pikachu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n}, {\n 'id': 25.12,\n 'name': 'Pikachu (Gengar)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.13,\n 'name': 'Let\\'s Go Pikachu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 45,\n 'attack': 80,\n 'specialAttack': 75,\n 'defense': 50,\n 'specialDefense': 60,\n 'speed': 120,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 25.14,\n 'name': 'Pinkan Pikachu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.15,\n 'name': 'Detective Pikachu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.QuestlineStoneEvolution)('Detective Pikachu', 'Detective Pikachu', 'Detective Raichu', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Thunder_stone)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.16,\n 'name': 'Pikachu (Clone)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 25.17,\n 'name': 'Pikachu (Rock Star)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 25.18,\n 'name': 'Pikachu (Belle)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 25.19,\n 'name': 'Pikachu (Pop Star)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 25.20,\n 'name': 'Pikachu (Ph. D.)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 25.21,\n 'name': 'Pikachu (Libre)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 25.22,\n 'name': 'Pikachu (Easter)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 112,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 26,\n 'name': 'Raichu',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 218,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 60,\n 'attack': 90,\n 'specialAttack': 90,\n 'defense': 55,\n 'specialDefense': 80,\n 'speed': 110,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 26.01,\n 'name': 'Alolan Raichu',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 218,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 60,\n 'attack': 85,\n 'specialAttack': 95,\n 'defense': 50,\n 'specialDefense': 85,\n 'speed': 110,\n },\n}, {\n 'id': 26.02,\n 'name': 'Detective Raichu',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 218,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 60,\n 'attack': 90,\n 'specialAttack': 90,\n 'defense': 55,\n 'specialDefense': 80,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 27,\n 'name': 'Sandshrew',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sandshrew', 'Sandslash', 22)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 75,\n 'specialAttack': 20,\n 'defense': 85,\n 'specialDefense': 30,\n 'speed': 40,\n },\n}, {\n 'id': 27.01,\n 'name': 'Alolan Sandshrew',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Alolan Sandshrew', 'Alolan Sandslash', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Ice_stone)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 75,\n 'specialAttack': 10,\n 'defense': 90,\n 'specialDefense': 35,\n 'speed': 40,\n },\n}, {\n 'id': 28,\n 'name': 'Sandslash',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 100,\n 'specialAttack': 45,\n 'defense': 110,\n 'specialDefense': 55,\n 'speed': 65,\n },\n}, {\n 'id': 28.01,\n 'name': 'Alolan Sandslash',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 100,\n 'specialAttack': 25,\n 'defense': 120,\n 'specialDefense': 65,\n 'speed': 65,\n },\n}, {\n 'id': 29,\n 'name': 'Nidoran(F)',\n 'catchRate': 235,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 55,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Nidoran(F)', 'Nidorina', 16)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 47,\n 'specialAttack': 40,\n 'defense': 52,\n 'specialDefense': 40,\n 'speed': 41,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 29.01,\n 'name': 'Pinkan Nidoran(F)',\n 'catchRate': 235,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 55,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 55,\n 'attack': 47,\n 'specialAttack': 40,\n 'defense': 52,\n 'specialDefense': 40,\n 'speed': 41,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 30,\n 'name': 'Nidorina',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 128,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Nidorina', 'Nidoqueen', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Moon_stone)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 62,\n 'specialAttack': 55,\n 'defense': 67,\n 'specialDefense': 55,\n 'speed': 56,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 31,\n 'name': 'Nidoqueen',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 227,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 92,\n 'specialAttack': 75,\n 'defense': 87,\n 'specialDefense': 85,\n 'speed': 76,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 32,\n 'name': 'Nidoran(M)',\n 'catchRate': 235,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 55,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Nidoran(M)', 'Nidorino', 16)],\n 'base': {\n 'hitpoints': 46,\n 'attack': 57,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 50,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 32.01,\n 'name': 'Pinkan Nidoran(M)',\n 'catchRate': 235,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 55,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 46,\n 'attack': 57,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 50,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 33,\n 'name': 'Nidorino',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 128,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Nidorino', 'Nidoking', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Moon_stone),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Nidorino', 'Pinkan Nidoking'),\n ],\n 'base': {\n 'hitpoints': 61,\n 'attack': 72,\n 'specialAttack': 55,\n 'defense': 57,\n 'specialDefense': 55,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 34,\n 'name': 'Nidoking',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 227,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 81,\n 'attack': 102,\n 'specialAttack': 85,\n 'defense': 77,\n 'specialDefense': 75,\n 'speed': 85,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 34.01,\n 'name': 'Pinkan Nidoking',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 227,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 81,\n 'attack': 102,\n 'specialAttack': 85,\n 'defense': 77,\n 'specialDefense': 75,\n 'speed': 85,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 35,\n 'name': 'Clefairy',\n 'catchRate': 150,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 113,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Clefairy', 'Clefable', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Moon_stone)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 45,\n 'specialAttack': 60,\n 'defense': 48,\n 'specialDefense': 65,\n 'speed': 35,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Moon_stone' },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 36,\n 'name': 'Clefable',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 217,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 95,\n 'attack': 70,\n 'specialAttack': 95,\n 'defense': 73,\n 'specialDefense': 90,\n 'speed': 60,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Moon_stone' },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 37,\n 'name': 'Vulpix',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Vulpix', 'Ninetales', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Fire_stone)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 41,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 65,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 37.01,\n 'name': 'Alolan Vulpix',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Alolan Vulpix', 'Alolan Ninetales', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Ice_stone)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 41,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 65,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 38,\n 'name': 'Ninetales',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 177,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 73,\n 'attack': 76,\n 'specialAttack': 81,\n 'defense': 75,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 38.01,\n 'name': 'Alolan Ninetales',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 177,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 73,\n 'attack': 67,\n 'specialAttack': 81,\n 'defense': 75,\n 'specialDefense': 100,\n 'speed': 109,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 39,\n 'name': 'Jigglypuff',\n 'catchRate': 170,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 95,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Jigglypuff', 'Wigglytuff', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Moon_stone)],\n 'base': {\n 'hitpoints': 115,\n 'attack': 45,\n 'specialAttack': 45,\n 'defense': 20,\n 'specialDefense': 25,\n 'speed': 20,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 40,\n 'name': 'Wigglytuff',\n 'catchRate': 50,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 196,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 140,\n 'attack': 70,\n 'specialAttack': 85,\n 'defense': 45,\n 'specialDefense': 50,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 41,\n 'name': 'Zubat',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 49,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Zubat', 'Golbat', 22)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 30,\n 'defense': 35,\n 'specialDefense': 40,\n 'speed': 55,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 42,\n 'name': 'Golbat',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Golbat', 'Crobat', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 70,\n 'specialDefense': 75,\n 'speed': 90,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 43,\n 'name': 'Oddish',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Oddish', 'Gloom', 21)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 50,\n 'specialAttack': 75,\n 'defense': 55,\n 'specialDefense': 65,\n 'speed': 30,\n },\n}, {\n 'id': 43.01,\n 'name': 'Pinkan Oddish',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 45,\n 'attack': 50,\n 'specialAttack': 75,\n 'defense': 55,\n 'specialDefense': 65,\n 'speed': 30,\n },\n}, {\n 'id': 44,\n 'name': 'Gloom',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 138,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Gloom', 'Vileplume', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaf_stone),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Gloom', 'Valencian Vileplume'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Gloom', 'Pinkan Vileplume'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Gloom', 'Bellossom', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Sun_stone),\n ],\n 'base': {\n 'hitpoints': 60,\n 'attack': 65,\n 'specialAttack': 85,\n 'defense': 70,\n 'specialDefense': 75,\n 'speed': 40,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 45,\n 'name': 'Vileplume',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 221,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 110,\n 'defense': 85,\n 'specialDefense': 90,\n 'speed': 50,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 45.01,\n 'name': 'Valencian Vileplume',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 221,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 110,\n 'defense': 85,\n 'specialDefense': 90,\n 'speed': 50,\n },\n}, {\n 'id': 45.02,\n 'name': 'Pinkan Vileplume',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 221,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 110,\n 'defense': 85,\n 'specialDefense': 90,\n 'speed': 50,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 46,\n 'name': 'Paras',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 57,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Paras', 'Parasect', 24)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 70,\n 'specialAttack': 45,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 25,\n },\n}, {\n 'id': 46.01,\n 'name': 'Valencian Paras',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 57,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 35,\n 'attack': 70,\n 'specialAttack': 45,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 25,\n },\n}, {\n 'id': 46.02,\n 'name': 'Pinkan Paras',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 57,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 35,\n 'attack': 70,\n 'specialAttack': 45,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 25,\n },\n}, {\n 'id': 47,\n 'name': 'Parasect',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 142,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 95,\n 'specialAttack': 60,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 30,\n },\n}, {\n 'id': 48,\n 'name': 'Venonat',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Venonat', 'Venomoth', 31)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 55,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 55,\n 'speed': 45,\n },\n}, {\n 'id': 48.01,\n 'name': 'Pinkan Venonat',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 55,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 55,\n 'speed': 45,\n },\n}, {\n 'id': 49,\n 'name': 'Venomoth',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 70,\n 'attack': 65,\n 'specialAttack': 90,\n 'defense': 60,\n 'specialDefense': 75,\n 'speed': 90,\n },\n}, {\n 'id': 50,\n 'name': 'Diglett',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 53,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Diglett', 'Dugtrio', 26),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Diglett', 'Dugtrio (Punk)'),\n ],\n 'base': {\n 'hitpoints': 10,\n 'attack': 55,\n 'specialAttack': 35,\n 'defense': 25,\n 'specialDefense': 45,\n 'speed': 95,\n },\n}, {\n 'id': 50.01,\n 'name': 'Alolan Diglett',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 53,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Alolan Diglett', 'Alolan Dugtrio', 26)],\n 'base': {\n 'hitpoints': 10,\n 'attack': 55,\n 'specialAttack': 35,\n 'defense': 30,\n 'specialDefense': 45,\n 'speed': 90,\n },\n}, {\n 'id': 50.02,\n 'name': 'Pinkan Diglett',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 53,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 10,\n 'attack': 55,\n 'specialAttack': 35,\n 'defense': 25,\n 'specialDefense': 45,\n 'speed': 95,\n },\n}, {\n 'id': 51,\n 'name': 'Dugtrio',\n 'catchRate': 50,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 149,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 35,\n 'attack': 100,\n 'specialAttack': 50,\n 'defense': 50,\n 'specialDefense': 70,\n 'speed': 120,\n },\n}, {\n 'id': 51.01,\n 'name': 'Alolan Dugtrio',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 50,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 149,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 35,\n 'attack': 100,\n 'specialAttack': 50,\n 'defense': 60,\n 'specialDefense': 70,\n 'speed': 110,\n },\n}, {\n 'id': 51.02,\n 'name': 'Dugtrio (Punk)',\n 'catchRate': 50,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 149,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 35,\n 'attack': 100,\n 'specialAttack': 50,\n 'defense': 50,\n 'specialDefense': 70,\n 'speed': 120,\n },\n}, {\n 'id': 52,\n 'name': 'Meowth',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Meowth', 'Persian', 28)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 40,\n 'defense': 35,\n 'specialDefense': 40,\n 'speed': 90,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rare_Candy' },\n}, {\n 'id': 52.01,\n 'name': 'Gigantamax Meowth',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 45,\n 'specialAttack': 40,\n 'defense': 35,\n 'specialDefense': 40,\n 'speed': 90,\n },\n}, {\n 'id': 52.02,\n 'name': 'Alolan Meowth',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Alolan Meowth', 'Alolan Persian', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 35,\n 'specialAttack': 50,\n 'defense': 35,\n 'specialDefense': 40,\n 'speed': 90,\n },\n}, {\n 'id': 52.03,\n 'name': 'Galarian Meowth',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Galarian Meowth', 'Perrserker', 28)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 40,\n 'defense': 55,\n 'specialDefense': 40,\n 'speed': 50,\n },\n}, {\n 'id': 52.04,\n 'name': 'Meowth (Phanpy)',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 40,\n 'defense': 35,\n 'specialDefense': 40,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rare_Candy' },\n}, {\n 'id': 53,\n 'name': 'Persian',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 154,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 70,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 65,\n 'speed': 115,\n },\n}, {\n 'id': 53.01,\n 'name': 'Alolan Persian',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 154,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 75,\n 'defense': 60,\n 'specialDefense': 65,\n 'speed': 115,\n },\n}, {\n 'id': 54,\n 'name': 'Psyduck',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Psyduck', 'Golduck', 33)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 52,\n 'specialAttack': 65,\n 'defense': 48,\n 'specialDefense': 50,\n 'speed': 55,\n },\n}, {\n 'id': 55,\n 'name': 'Golduck',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 82,\n 'specialAttack': 95,\n 'defense': 78,\n 'specialDefense': 80,\n 'speed': 85,\n },\n}, {\n 'id': 56,\n 'name': 'Mankey',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Mankey', 'Primeape', 28)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 80,\n 'specialAttack': 35,\n 'defense': 35,\n 'specialDefense': 45,\n 'speed': 70,\n },\n}, {\n 'id': 56.01,\n 'name': 'Pinkan Mankey',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pinkan Mankey', 'Pinkan Primeape', 28)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 80,\n 'specialAttack': 35,\n 'defense': 35,\n 'specialDefense': 45,\n 'speed': 70,\n },\n}, {\n 'id': 57,\n 'name': 'Primeape',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Primeape', 'Annihilape', 35)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 105,\n 'specialAttack': 60,\n 'defense': 60,\n 'specialDefense': 70,\n 'speed': 95,\n },\n}, {\n 'id': 57.01,\n 'name': 'Pinkan Primeape',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 105,\n 'specialAttack': 60,\n 'defense': 60,\n 'specialDefense': 70,\n 'speed': 95,\n },\n}, {\n 'id': 58,\n 'name': 'Growlithe',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 70,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Growlithe', 'Arcanine', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Fire_stone)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 45,\n 'specialDefense': 50,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 58.01,\n 'name': 'Hisuian Growlithe',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 70,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Hisuian Growlithe', 'Hisuian Arcanine', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Fire_stone)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 75,\n 'specialAttack': 65,\n 'defense': 45,\n 'specialDefense': 50,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 59,\n 'name': 'Arcanine',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 194,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 110,\n 'specialAttack': 100,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 95,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 59.01,\n 'name': 'Hisuian Arcanine',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 194,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 115,\n 'specialAttack': 95,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 59.02,\n 'name': 'Noble Arcanine',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 194,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 115,\n 'specialAttack': 95,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 60,\n 'name': 'Poliwag',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 60,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Poliwag', 'Poliwhirl', 25),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Poliwag', 'Pinkan Poliwhirl'),\n ],\n 'base': {\n 'hitpoints': 40,\n 'attack': 50,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 90,\n },\n}, {\n 'id': 61,\n 'name': 'Poliwhirl',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 135,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Poliwhirl', 'Poliwrath', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Water_stone), (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Poliwhirl', 'Politoed', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Kings_rock)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 65,\n 'specialAttack': 50,\n 'defense': 65,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Kings_rock' },\n}, {\n 'id': 61.01,\n 'name': 'Pinkan Poliwhirl',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 135,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 65,\n 'specialAttack': 50,\n 'defense': 65,\n 'specialDefense': 50,\n 'speed': 90,\n },\n}, {\n 'id': 62,\n 'name': 'Poliwrath',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 230,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 95,\n 'specialAttack': 70,\n 'defense': 95,\n 'specialDefense': 90,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Kings_rock' },\n}, {\n 'id': 63,\n 'name': 'Abra',\n 'catchRate': 200,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Abra', 'Kadabra', 16)],\n 'base': {\n 'hitpoints': 25,\n 'attack': 20,\n 'specialAttack': 105,\n 'defense': 15,\n 'specialDefense': 55,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 64,\n 'name': 'Kadabra',\n 'catchRate': 100,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 140,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Kadabra', 'Alakazam', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 35,\n 'specialAttack': 120,\n 'defense': 30,\n 'specialDefense': 70,\n 'speed': 105,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n 'visualDifference': true,\n },\n}, {\n 'id': 65,\n 'name': 'Alakazam',\n 'catchRate': 50,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 225,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Alakazite, 'Alakazam', 'Mega Alakazam')],\n 'base': {\n 'hitpoints': 55,\n 'attack': 50,\n 'specialAttack': 135,\n 'defense': 45,\n 'specialDefense': 95,\n 'speed': 120,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n 'visualDifference': true,\n },\n}, {\n 'id': 65.01,\n 'name': 'Mega Alakazam',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 270,\n 'catchRate': 50,\n 'base': {\n 'hitpoints': 55,\n 'attack': 50,\n 'specialAttack': 175,\n 'defense': 65,\n 'specialDefense': 105,\n 'speed': 150,\n },\n}, {\n 'id': 66,\n 'name': 'Machop',\n 'catchRate': 180,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 61,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Machop', 'Machoke', 28)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 80,\n 'specialAttack': 35,\n 'defense': 50,\n 'specialDefense': 35,\n 'speed': 35,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 67,\n 'name': 'Machoke',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Machoke', 'Machamp', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Machoke', 'Gigantamax Machamp'),\n ],\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 50,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 68,\n 'name': 'Machamp',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 227,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 130,\n 'specialAttack': 65,\n 'defense': 80,\n 'specialDefense': 85,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 68.01,\n 'name': 'Gigantamax Machamp',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 227,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 160,\n 'attack': 130,\n 'specialAttack': 65,\n 'defense': 80,\n 'specialDefense': 85,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 69,\n 'name': 'Bellsprout',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 60,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bellsprout', 'Weepinbell', 21),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Bellsprout', 'Valencian Weepinbell'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Bellsprout', 'Weepinbell (Fancy)'),\n ],\n 'base': {\n 'hitpoints': 50,\n 'attack': 75,\n 'specialAttack': 70,\n 'defense': 35,\n 'specialDefense': 30,\n 'speed': 40,\n },\n}, {\n 'id': 69.01,\n 'name': 'Pinkan Bellsprout',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 60,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 50,\n 'attack': 75,\n 'specialAttack': 70,\n 'defense': 35,\n 'specialDefense': 30,\n 'speed': 40,\n },\n}, {\n 'id': 70,\n 'name': 'Weepinbell',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 137,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Weepinbell', 'Victreebel', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaf_stone)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 85,\n 'defense': 50,\n 'specialDefense': 45,\n 'speed': 55,\n },\n}, {\n 'id': 70.01,\n 'name': 'Valencian Weepinbell',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 137,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 85,\n 'defense': 50,\n 'specialDefense': 45,\n 'speed': 55,\n },\n}, {\n 'id': 70.02,\n 'name': 'Weepinbell (Fancy)',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 137,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 85,\n 'defense': 50,\n 'specialDefense': 45,\n 'speed': 55,\n },\n}, {\n 'id': 71,\n 'name': 'Victreebel',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 221,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 105,\n 'specialAttack': 100,\n 'defense': 65,\n 'specialDefense': 70,\n 'speed': 70,\n },\n}, {\n 'id': 72,\n 'name': 'Tentacool',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 67,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tentacool', 'Tentacruel', 30)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 50,\n 'defense': 35,\n 'specialDefense': 100,\n 'speed': 70,\n },\n}, {\n 'id': 73,\n 'name': 'Tentacruel',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 180,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 70,\n 'specialAttack': 80,\n 'defense': 65,\n 'specialDefense': 120,\n 'speed': 100,\n },\n}, {\n 'id': 74,\n 'name': 'Geodude',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 60,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Geodude', 'Graveler', 25)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 80,\n 'specialAttack': 30,\n 'defense': 100,\n 'specialDefense': 30,\n 'speed': 20,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Everstone' },\n}, {\n 'id': 74.01,\n 'name': 'Alolan Geodude',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 60,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Alolan Geodude', 'Alolan Graveler', 25)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 80,\n 'specialAttack': 30,\n 'defense': 100,\n 'specialDefense': 30,\n 'speed': 20,\n },\n}, {\n 'id': 74.02,\n 'name': 'Pinkan Geodude',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 60,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 40,\n 'attack': 80,\n 'specialAttack': 30,\n 'defense': 100,\n 'specialDefense': 30,\n 'speed': 20,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Everstone' },\n}, {\n 'id': 75,\n 'name': 'Graveler',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 137,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Graveler', 'Golem', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 95,\n 'specialAttack': 45,\n 'defense': 115,\n 'specialDefense': 45,\n 'speed': 35,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 75.01,\n 'name': 'Alolan Graveler',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 137,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Alolan Graveler', 'Alolan Golem', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 95,\n 'specialAttack': 45,\n 'defense': 115,\n 'specialDefense': 45,\n 'speed': 35,\n },\n}, {\n 'id': 76,\n 'name': 'Golem',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 223,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 55,\n 'defense': 130,\n 'specialDefense': 65,\n 'speed': 45,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 76.01,\n 'name': 'Alolan Golem',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 223,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 55,\n 'defense': 130,\n 'specialDefense': 65,\n 'speed': 45,\n },\n}, {\n 'id': 77,\n 'name': 'Ponyta',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 82,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ponyta', 'Rapidash', 40)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 85,\n 'specialAttack': 65,\n 'defense': 55,\n 'specialDefense': 65,\n 'speed': 90,\n },\n}, {\n 'id': 77.01,\n 'name': 'Galarian Ponyta',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 82,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Galarian Ponyta', 'Galarian Rapidash', 40)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 85,\n 'specialAttack': 65,\n 'defense': 55,\n 'specialDefense': 65,\n 'speed': 90,\n },\n}, {\n 'id': 78,\n 'name': 'Rapidash',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 100,\n 'specialAttack': 80,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 105,\n },\n}, {\n 'id': 78.01,\n 'name': 'Galarian Rapidash',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 100,\n 'specialAttack': 80,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 105,\n },\n}, {\n 'id': 79,\n 'name': 'Slowpoke',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 63,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Slowpoke', 'Slowbro', 37),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Slowpoke', 'Slowking', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Kings_rock),\n ],\n 'base': {\n 'hitpoints': 90,\n 'attack': 65,\n 'specialAttack': 40,\n 'defense': 65,\n 'specialDefense': 40,\n 'speed': 15,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Kings_rock' },\n}, {\n 'id': 79.01,\n 'name': 'Galarian Slowpoke',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 63,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Galarian Slowpoke', 'Galarian Slowbro', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Galarica_cuff),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Galarian Slowpoke', 'Galarian Slowking', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Galarica_wreath),\n ],\n 'base': {\n 'hitpoints': 90,\n 'attack': 65,\n 'specialAttack': 40,\n 'defense': 65,\n 'specialDefense': 40,\n 'speed': 15,\n },\n}, {\n 'id': 80,\n 'name': 'Slowbro',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Slowbronite, 'Slowbro', 'Mega Slowbro')],\n 'base': {\n 'hitpoints': 95,\n 'attack': 75,\n 'specialAttack': 100,\n 'defense': 110,\n 'specialDefense': 80,\n 'speed': 30,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Kings_rock' },\n}, {\n 'id': 80.01,\n 'name': 'Mega Slowbro',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 207,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 95,\n 'attack': 75,\n 'specialAttack': 130,\n 'defense': 180,\n 'specialDefense': 80,\n 'speed': 30,\n },\n}, {\n 'id': 80.02,\n 'name': 'Galarian Slowbro',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 95,\n 'specialDefense': 70,\n 'speed': 30,\n },\n}, {\n 'id': 81,\n 'name': 'Magnemite',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Magnemite', 'Magneton', 30)],\n 'base': {\n 'hitpoints': 25,\n 'attack': 35,\n 'specialAttack': 95,\n 'defense': 70,\n 'specialDefense': 55,\n 'speed': 45,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 82,\n 'name': 'Magneton',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 163,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('MagneticField', 'Magneton', 'Magnezone', 20),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(galarOnly, 'Magneton', 'Magnezone', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Thunder_stone),\n ],\n 'base': {\n 'hitpoints': 50,\n 'attack': 60,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 70,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 83,\n 'name': 'Farfetch\\'d',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 132,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 52,\n 'attack': 90,\n 'specialAttack': 58,\n 'defense': 55,\n 'specialDefense': 62,\n 'speed': 60,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Leek', requirement: new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar) },\n}, {\n 'id': 83.01,\n 'name': 'Galarian Farfetch\\'d',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 132,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Leek', 'Galarian Farfetch\\'d', 'Sirfetch\\'d', 20)],\n 'base': {\n 'hitpoints': 52,\n 'attack': 95,\n 'specialAttack': 58,\n 'defense': 55,\n 'specialDefense': 62,\n 'speed': 55,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Leek' },\n}, {\n 'id': 84,\n 'name': 'Doduo',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 62,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Doduo', 'Dodrio', 31),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Doduo', 'Pinkan Dodrio'),\n ],\n 'base': {\n 'hitpoints': 35,\n 'attack': 85,\n 'specialAttack': 35,\n 'defense': 45,\n 'specialDefense': 35,\n 'speed': 75,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 85,\n 'name': 'Dodrio',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 110,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 110,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 85.01,\n 'name': 'Pinkan Dodrio',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 110,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 110,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 86,\n 'name': 'Seel',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Seel', 'Dewgong', 34)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 45,\n 'specialAttack': 45,\n 'defense': 55,\n 'specialDefense': 70,\n 'speed': 45,\n },\n}, {\n 'id': 87,\n 'name': 'Dewgong',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 80,\n 'specialDefense': 95,\n 'speed': 70,\n },\n}, {\n 'id': 88,\n 'name': 'Grimer',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Grimer', 'Muk', 38)],\n 'base': {\n 'hitpoints': 80,\n 'attack': 80,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 25,\n },\n}, {\n 'id': 88.01,\n 'name': 'Alolan Grimer',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Alolan Grimer', 'Alolan Muk', 38)],\n 'base': {\n 'hitpoints': 80,\n 'attack': 80,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 25,\n },\n}, {\n 'id': 89,\n 'name': 'Muk',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 105,\n 'attack': 105,\n 'specialAttack': 65,\n 'defense': 75,\n 'specialDefense': 100,\n 'speed': 50,\n },\n}, {\n 'id': 89.01,\n 'name': 'Alolan Muk',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 105,\n 'attack': 105,\n 'specialAttack': 65,\n 'defense': 75,\n 'specialDefense': 100,\n 'speed': 50,\n },\n}, {\n 'id': 90,\n 'name': 'Shellder',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 61,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Shellder', 'Cloyster', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Water_stone)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 65,\n 'specialAttack': 45,\n 'defense': 100,\n 'specialDefense': 25,\n 'speed': 40,\n },\n}, {\n 'id': 91,\n 'name': 'Cloyster',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 184,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 50,\n 'attack': 95,\n 'specialAttack': 85,\n 'defense': 180,\n 'specialDefense': 45,\n 'speed': 70,\n },\n}, {\n 'id': 92,\n 'name': 'Gastly',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Gastly', 'Haunter', 25)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 35,\n 'specialAttack': 100,\n 'defense': 30,\n 'specialDefense': 35,\n 'speed': 80,\n },\n}, {\n 'id': 93,\n 'name': 'Haunter',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Haunter', 'Gengar', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Haunter', 'Gigantamax Gengar'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Haunter', 'Gengar (Punk)'),\n ],\n 'base': {\n 'hitpoints': 45,\n 'attack': 50,\n 'specialAttack': 115,\n 'defense': 45,\n 'specialDefense': 55,\n 'speed': 95,\n },\n}, {\n 'id': 94,\n 'name': 'Gengar',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 225,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Gengarite, 'Gengar', 'Mega Gengar')],\n 'base': {\n 'hitpoints': 60,\n 'attack': 65,\n 'specialAttack': 130,\n 'defense': 60,\n 'specialDefense': 75,\n 'speed': 110,\n },\n}, {\n 'id': 94.01,\n 'name': 'Mega Gengar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 207,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 65,\n 'specialAttack': 170,\n 'defense': 80,\n 'specialDefense': 95,\n 'speed': 130,\n },\n}, {\n 'id': 94.02,\n 'name': 'Gigantamax Gengar',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 225,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 120,\n 'attack': 65,\n 'specialAttack': 130,\n 'defense': 60,\n 'specialDefense': 75,\n 'speed': 110,\n },\n}, {\n 'id': 94.03,\n 'name': 'Gengar (Punk)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 225,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 65,\n 'specialAttack': 130,\n 'defense': 60,\n 'specialDefense': 75,\n 'speed': 110,\n },\n}, {\n 'id': 95,\n 'name': 'Onix',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 77,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Onix', 'Steelix', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Metal_coat)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 45,\n 'specialAttack': 30,\n 'defense': 160,\n 'specialDefense': 45,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 95.01,\n 'name': 'Crystal Onix',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 77,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Crystal Onix', 'Crystal Steelix', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Ice_stone)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 45,\n 'specialAttack': 30,\n 'defense': 160,\n 'specialDefense': 45,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Ice Stone' },\n}, {\n 'id': 95.02,\n 'name': 'Onix (Rocker)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 77,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 35,\n 'attack': 45,\n 'specialAttack': 30,\n 'defense': 160,\n 'specialDefense': 45,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 96,\n 'name': 'Drowzee',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Drowzee', 'Hypno', 26)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 48,\n 'specialAttack': 43,\n 'defense': 45,\n 'specialDefense': 90,\n 'speed': 42,\n },\n}, {\n 'id': 97,\n 'name': 'Hypno',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 169,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 85,\n 'attack': 73,\n 'specialAttack': 73,\n 'defense': 70,\n 'specialDefense': 115,\n 'speed': 67,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 98,\n 'name': 'Krabby',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Krabby', 'Kingler', 28),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Krabby', 'Gigantamax Kingler'),\n ],\n 'base': {\n 'hitpoints': 30,\n 'attack': 105,\n 'specialAttack': 25,\n 'defense': 90,\n 'specialDefense': 25,\n 'speed': 50,\n },\n}, {\n 'id': 99,\n 'name': 'Kingler',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 55,\n 'attack': 130,\n 'specialAttack': 50,\n 'defense': 115,\n 'specialDefense': 50,\n 'speed': 75,\n },\n}, {\n 'id': 99.01,\n 'name': 'Gigantamax Kingler',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 110,\n 'attack': 130,\n 'specialAttack': 50,\n 'defense': 115,\n 'specialDefense': 50,\n 'speed': 75,\n },\n}, {\n 'id': 100,\n 'name': 'Voltorb',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Voltorb', 'Electrode', 30)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 30,\n 'specialAttack': 55,\n 'defense': 50,\n 'specialDefense': 55,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 100.01,\n 'name': 'Hisuian Voltorb',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Hisuian Voltorb', 'Hisuian Electrode', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaf_stone)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 30,\n 'specialAttack': 55,\n 'defense': 50,\n 'specialDefense': 55,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 101,\n 'name': 'Electrode',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 80,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 150,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 101.01,\n 'name': 'Hisuian Electrode',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 80,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 150,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 101.02,\n 'name': 'Noble Electrode',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 80,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 150,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 102,\n 'name': 'Exeggcute',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 65,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(allButAlola, 'Exeggcute', 'Exeggutor', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaf_stone),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(alolaOnly, 'Exeggcute', 'Alolan Exeggutor', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaf_stone),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Exeggcute', 'Pinkan Exeggutor'),\n ],\n 'base': {\n 'hitpoints': 60,\n 'attack': 40,\n 'specialAttack': 60,\n 'defense': 80,\n 'specialDefense': 45,\n 'speed': 40,\n },\n}, {\n 'id': 102.01,\n 'name': 'Exeggcute (Single)',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 65,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 40,\n 'specialAttack': 60,\n 'defense': 80,\n 'specialDefense': 45,\n 'speed': 40,\n },\n}, {\n 'id': 103,\n 'name': 'Exeggutor',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 186,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 125,\n 'defense': 85,\n 'specialDefense': 75,\n 'speed': 55,\n },\n}, {\n 'id': 103.01,\n 'name': 'Alolan Exeggutor',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 186,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 105,\n 'specialAttack': 125,\n 'defense': 85,\n 'specialDefense': 75,\n 'speed': 45,\n },\n}, {\n 'id': 103.02,\n 'name': 'Pinkan Exeggutor',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 186,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 125,\n 'defense': 85,\n 'specialDefense': 75,\n 'speed': 55,\n },\n}, {\n 'id': 104,\n 'name': 'Cubone',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionLevelEvolution)(allButAlola, 'Cubone', 'Marowak', 28),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionNightTimedLevelEvolution)(alolaOnly, 'Cubone', 'Alolan Marowak', 28),\n ],\n 'base': {\n 'hitpoints': 50,\n 'attack': 50,\n 'specialAttack': 40,\n 'defense': 95,\n 'specialDefense': 50,\n 'speed': 35,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Rare Bone' },\n}, {\n 'id': 105,\n 'name': 'Marowak',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 149,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 80,\n 'specialAttack': 50,\n 'defense': 110,\n 'specialDefense': 80,\n 'speed': 45,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Rare Bone' },\n}, {\n 'id': 105.01,\n 'name': 'Alolan Marowak',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 149,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 80,\n 'specialAttack': 50,\n 'defense': 110,\n 'specialDefense': 80,\n 'speed': 45,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Thick_Club' },\n}, {\n 'id': 105.02,\n 'name': 'Totem Marowak',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 149,\n 'eggCycles': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 80,\n 'specialAttack': 50,\n 'defense': 110,\n 'specialDefense': 80,\n 'speed': 65,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Thick_Club' },\n}, {\n 'id': 106,\n 'name': 'Hitmonlee',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 50,\n 'attack': 120,\n 'specialAttack': 35,\n 'defense': 53,\n 'specialDefense': 110,\n 'speed': 87,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 107,\n 'name': 'Hitmonchan',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 50,\n 'attack': 105,\n 'specialAttack': 35,\n 'defense': 79,\n 'specialDefense': 110,\n 'speed': 76,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 108,\n 'name': 'Lickitung',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 77,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Lickitung', 'Lickilicky', 33)],\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 55,\n 'specialAttack': 60,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 30,\n },\n}, {\n 'id': 109,\n 'name': 'Koffing',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 68,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionLevelEvolution)(allButGalar, 'Koffing', 'Weezing', 35),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionLevelEvolution)(galarOnly, 'Koffing', 'Galarian Weezing', 35),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Koffing', 'Pinkan Weezing'),\n ],\n 'base': {\n 'hitpoints': 40,\n 'attack': 65,\n 'specialAttack': 60,\n 'defense': 95,\n 'specialDefense': 45,\n 'speed': 35,\n },\n}, {\n 'id': 110,\n 'name': 'Weezing',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 85,\n 'defense': 120,\n 'specialDefense': 70,\n 'speed': 60,\n },\n}, {\n 'id': 110.01,\n 'name': 'Galarian Weezing',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 85,\n 'defense': 120,\n 'specialDefense': 70,\n 'speed': 60,\n },\n}, {\n 'id': 110.02,\n 'name': 'Pinkan Weezing',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 85,\n 'defense': 120,\n 'specialDefense': 70,\n 'speed': 60,\n },\n}, {\n 'id': 111,\n 'name': 'Rhyhorn',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 69,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Rhyhorn', 'Rhydon', 42)],\n 'base': {\n 'hitpoints': 80,\n 'attack': 85,\n 'specialAttack': 30,\n 'defense': 95,\n 'specialDefense': 30,\n 'speed': 25,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 111.01,\n 'name': 'Pinkan Rhyhorn',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 69,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pinkan Rhyhorn', 'Pinkan Rhydon', 42)],\n 'base': {\n 'hitpoints': 80,\n 'attack': 85,\n 'specialAttack': 30,\n 'defense': 95,\n 'specialDefense': 30,\n 'speed': 25,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 112,\n 'name': 'Rhydon',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 170,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Rhydon', 'Rhyperior', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Protector)],\n 'base': {\n 'hitpoints': 105,\n 'attack': 130,\n 'specialAttack': 45,\n 'defense': 120,\n 'specialDefense': 45,\n 'speed': 40,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 112.01,\n 'name': 'Pinkan Rhydon',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 170,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 105,\n 'attack': 130,\n 'specialAttack': 45,\n 'defense': 120,\n 'specialDefense': 45,\n 'speed': 40,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 113,\n 'name': 'Chansey',\n 'catchRate': 30,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 395,\n 'eggCycles': 40,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Chansey', 'Blissey', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'base': {\n 'hitpoints': 250,\n 'attack': 5,\n 'specialAttack': 35,\n 'defense': 5,\n 'specialDefense': 105,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Lucky_Punch' },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 113.01,\n 'name': 'Charity Chansey',\n 'catchRate': 30,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 395,\n 'eggCycles': 40,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Charity Chansey', 'Blessing Blissey', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'base': {\n 'hitpoints': 250,\n 'attack': 5,\n 'specialAttack': 35,\n 'defense': 5,\n 'specialDefense': 105,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Lucky_Punch' },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 114,\n 'name': 'Tangela',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 87,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tangela', 'Tangrowth', 33)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 55,\n 'specialAttack': 100,\n 'defense': 115,\n 'specialDefense': 40,\n 'speed': 60,\n },\n}, {\n 'id': 114.01,\n 'name': 'Tangela (Pom-pom)',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 87,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 55,\n 'specialAttack': 100,\n 'defense': 115,\n 'specialDefense': 40,\n 'speed': 60,\n },\n}, {\n 'id': 115,\n 'name': 'Kangaskhan',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Kangaskhanite, 'Kangaskhan', 'Mega Kangaskhan')],\n 'base': {\n 'hitpoints': 105,\n 'attack': 95,\n 'specialAttack': 40,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 115.01,\n 'name': 'Mega Kangaskhan',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 207,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 105,\n 'attack': 125,\n 'specialAttack': 60,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 115.02,\n 'name': 'Baby Kangaskhan',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 207,\n 'catchRate': 45,\n 'baby': true,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Baby Kangaskhan', 'Kangaskhan')],\n 'base': {\n 'hitpoints': 53,\n 'attack': 63,\n 'specialAttack': 30,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 50,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 116,\n 'name': 'Horsea',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 59,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Horsea', 'Seadra', 32)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 40,\n 'specialAttack': 70,\n 'defense': 70,\n 'specialDefense': 25,\n 'speed': 60,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 117,\n 'name': 'Seadra',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 154,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Seadra', 'Kingdra', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dragon_scale)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 65,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 45,\n 'speed': 85,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 118,\n 'name': 'Goldeen',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Goldeen', 'Seaking', 33)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 67,\n 'specialAttack': 35,\n 'defense': 60,\n 'specialDefense': 50,\n 'speed': 63,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 118.01,\n 'name': 'Goldeen (Diva)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 45,\n 'attack': 67,\n 'specialAttack': 35,\n 'defense': 60,\n 'specialDefense': 50,\n 'speed': 63,\n },\n}, {\n 'id': 119,\n 'name': 'Seaking',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 92,\n 'specialAttack': 65,\n 'defense': 65,\n 'specialDefense': 80,\n 'speed': 68,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 120,\n 'name': 'Staryu',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 68,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Staryu', 'Starmie', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Water_stone)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 45,\n 'specialAttack': 70,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 85,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 121,\n 'name': 'Starmie',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 182,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 75,\n 'specialAttack': 100,\n 'defense': 85,\n 'specialDefense': 85,\n 'speed': 115,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 122,\n 'name': 'Mr. Mime',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 100,\n 'defense': 65,\n 'specialDefense': 120,\n 'speed': 90,\n },\n}, {\n 'id': 122.01,\n 'name': 'Galarian Mr. Mime',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Galarian Mr. Mime', 'Mr. Rime', 42)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 90,\n 'defense': 65,\n 'specialDefense': 90,\n 'speed': 100,\n },\n}, {\n 'id': 123,\n 'name': 'Scyther',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 100,\n 'eggCycles': 25,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Scyther', 'Scizor', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Metal_coat),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Scyther', 'Kleavor', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Black_augurite),\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 110,\n 'specialAttack': 55,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 105,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 123.01,\n 'name': 'Pinkan Scyther',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 100,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 70,\n 'attack': 110,\n 'specialAttack': 55,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 105,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 124,\n 'name': 'Jynx',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 65,\n 'attack': 50,\n 'specialAttack': 115,\n 'defense': 35,\n 'specialDefense': 95,\n 'speed': 95,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 124.01,\n 'name': 'Santa Jynx',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 65,\n 'attack': 50,\n 'specialAttack': 115,\n 'defense': 35,\n 'specialDefense': 95,\n 'speed': 95,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Christmas_present' },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 125,\n 'name': 'Electabuzz',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Electabuzz', 'Electivire', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Electirizer)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 83,\n 'specialAttack': 95,\n 'defense': 57,\n 'specialDefense': 85,\n 'speed': 105,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Electirizer' },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 125.01,\n 'name': 'Pinkan Electabuzz',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 65,\n 'attack': 83,\n 'specialAttack': 95,\n 'defense': 57,\n 'specialDefense': 85,\n 'speed': 105,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 126,\n 'name': 'Magmar',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Magmar', 'Magmortar', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Magmarizer)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 95,\n 'specialAttack': 100,\n 'defense': 57,\n 'specialDefense': 85,\n 'speed': 93,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magmarizer' },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 127,\n 'name': 'Pinsir',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 175,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Pinsirite, 'Pinsir', 'Mega Pinsir')],\n 'base': {\n 'hitpoints': 65,\n 'attack': 125,\n 'specialAttack': 55,\n 'defense': 100,\n 'specialDefense': 70,\n 'speed': 85,\n },\n}, {\n 'id': 127.01,\n 'name': 'Mega Pinsir',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 210,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 65,\n 'attack': 155,\n 'specialAttack': 65,\n 'defense': 120,\n 'specialDefense': 90,\n 'speed': 105,\n },\n}, {\n 'id': 128,\n 'name': 'Tauros',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 100,\n 'specialAttack': 40,\n 'defense': 95,\n 'specialDefense': 70,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 128.01,\n 'name': 'Paldean Tauros (Combat)',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 110,\n 'specialAttack': 30,\n 'defense': 105,\n 'specialDefense': 70,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 128.02,\n 'name': 'Paldean Tauros (Blaze)',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 110,\n 'specialAttack': 30,\n 'defense': 105,\n 'specialDefense': 70,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 128.03,\n 'name': 'Paldean Tauros (Aqua)',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 110,\n 'specialAttack': 30,\n 'defense': 105,\n 'specialDefense': 70,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 129,\n 'name': 'Magikarp',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Magikarp', 'Gyarados', 20)],\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.01,\n 'name': 'Magikarp Skelly',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.02,\n 'name': 'Magikarp Calico (Orange, White)',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.03,\n 'name': 'Magikarp Calico (Orange, White, Black)',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.04,\n 'name': 'Magikarp Calico (White, Orange)',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.05,\n 'name': 'Magikarp Calico (Orange, Gold)',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.06,\n 'name': 'Magikarp Orange Two-Tone',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.07,\n 'name': 'Magikarp Orange Orca',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.08,\n 'name': 'Magikarp Orange Dapples',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.09,\n 'name': 'Magikarp Pink Two-Tone',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.1,\n 'name': 'Magikarp Pink Orca',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.11,\n 'name': 'Magikarp Pink Dapples',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.12,\n 'name': 'Magikarp Grey Bubbles',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.13,\n 'name': 'Magikarp Grey Diamonds',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.14,\n 'name': 'Magikarp Grey Patches',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.15,\n 'name': 'Magikarp Purple Bubbles',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.16,\n 'name': 'Magikarp Purple Diamonds',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.17,\n 'name': 'Magikarp Purple Patches',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.18,\n 'name': 'Magikarp Apricot Tiger',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.19,\n 'name': 'Magikarp Apricot Zebra',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.2,\n 'name': 'Magikarp Apricot Stripes',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.21,\n 'name': 'Magikarp Brown Tiger',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.22,\n 'name': 'Magikarp Brown Zebra',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.23,\n 'name': 'Magikarp Brown Stripes',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.24,\n 'name': 'Magikarp Orange Forehead',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.25,\n 'name': 'Magikarp Orange Mask',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.26,\n 'name': 'Magikarp Black Forehead',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magikarp_Biscuit' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.27,\n 'name': 'Magikarp Black Mask',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.28,\n 'name': 'Magikarp Blue Raindrops',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.29,\n 'name': 'Magikarp Saucy Blue',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.30,\n 'name': 'Magikarp Violet Raindrops',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.31,\n 'name': 'Magikarp Saucy Violet',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 129.32,\n 'name': 'Magikarp (Feebas)',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'eggCycles': 5,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 15,\n 'defense': 55,\n 'specialDefense': 20,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 130,\n 'name': 'Gyarados',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 189,\n 'eggCycles': 5,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Gyaradosite, 'Gyarados', 'Mega Gyarados')],\n 'base': {\n 'hitpoints': 95,\n 'attack': 125,\n 'specialAttack': 60,\n 'defense': 79,\n 'specialDefense': 100,\n 'speed': 81,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 130.01,\n 'name': 'Mega Gyarados',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 5,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 224,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 95,\n 'attack': 155,\n 'specialAttack': 70,\n 'defense': 109,\n 'specialDefense': 130,\n 'speed': 81,\n },\n}, {\n 'id': 131,\n 'name': 'Lapras',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 187,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 130,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 80,\n 'specialDefense': 95,\n 'speed': 60,\n },\n}, {\n 'id': 131.01,\n 'name': 'Gigantamax Lapras',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 187,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 260,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 80,\n 'specialDefense': 95,\n 'speed': 60,\n },\n}, {\n 'id': 132,\n 'name': 'Ditto',\n 'catchRate': 35,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 101,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 48,\n 'attack': 48,\n 'specialAttack': 48,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 132.01,\n 'name': 'Ditto (Magikarp)',\n 'catchRate': 35,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 101,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 48,\n 'attack': 48,\n 'specialAttack': 48,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 133,\n 'name': 'Eevee',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'eggCycles': 35,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Eevee', 'Vaporeon', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Water_stone),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Eevee', 'Jolteon', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Thunder_stone),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Eevee', 'Flareon', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Fire_stone),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedStoneEvolution)('Eevee', 'Espeon', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedStoneEvolution)('Eevee', 'Umbreon', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('MossRock', 'Eevee', 'Leafeon', 20),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('IceRock', 'Eevee', 'Glaceon', 20),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Eevee', 'Sylveon', 29),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(galarOnly, 'Eevee', 'Leafeon', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaf_stone),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(galarOnly, 'Eevee', 'Glaceon', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Ice_stone),\n ],\n 'base': {\n 'hitpoints': 55,\n 'attack': 55,\n 'specialAttack': 45,\n 'defense': 50,\n 'specialDefense': 65,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n 'visualDifference': true,\n },\n}, {\n 'id': 133.01,\n 'name': 'Gigantamax Eevee',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'eggCycles': 35,\n 'base': {\n 'hitpoints': 110,\n 'attack': 55,\n 'specialAttack': 45,\n 'defense': 50,\n 'specialDefense': 65,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 133.02,\n 'name': 'Let\\'s Go Eevee',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'eggCycles': 35,\n 'base': {\n 'hitpoints': 65,\n 'attack': 75,\n 'specialAttack': 65,\n 'defense': 70,\n 'specialDefense': 85,\n 'speed': 75,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 134,\n 'name': 'Vaporeon',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'eggCycles': 35,\n 'base': {\n 'hitpoints': 130,\n 'attack': 65,\n 'specialAttack': 110,\n 'defense': 60,\n 'specialDefense': 95,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 135,\n 'name': 'Jolteon',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'eggCycles': 35,\n 'base': {\n 'hitpoints': 65,\n 'attack': 65,\n 'specialAttack': 110,\n 'defense': 60,\n 'specialDefense': 95,\n 'speed': 130,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 136,\n 'name': 'Flareon',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'eggCycles': 35,\n 'base': {\n 'hitpoints': 65,\n 'attack': 130,\n 'specialAttack': 95,\n 'defense': 60,\n 'specialDefense': 110,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 137,\n 'name': 'Porygon',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 79,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Porygon', 'Porygon2', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Upgrade)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 85,\n 'defense': 70,\n 'specialDefense': 75,\n 'speed': 40,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 138,\n 'name': 'Omanyte',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 71,\n 'eggCycles': 30,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Omanyte', 'Omastar', 40)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 40,\n 'specialAttack': 90,\n 'defense': 100,\n 'specialDefense': 55,\n 'speed': 35,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 139,\n 'name': 'Omastar',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'eggCycles': 30,\n 'base': {\n 'hitpoints': 70,\n 'attack': 60,\n 'specialAttack': 115,\n 'defense': 125,\n 'specialDefense': 70,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 140,\n 'name': 'Kabuto',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 71,\n 'eggCycles': 30,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Kabuto', 'Kabutops', 40)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 80,\n 'specialAttack': 55,\n 'defense': 90,\n 'specialDefense': 45,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 141,\n 'name': 'Kabutops',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'eggCycles': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 115,\n 'specialAttack': 65,\n 'defense': 105,\n 'specialDefense': 70,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 142,\n 'name': 'Aerodactyl',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 180,\n 'eggCycles': 35,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Aerodactylite, 'Aerodactyl', 'Mega Aerodactyl')],\n 'base': {\n 'hitpoints': 80,\n 'attack': 105,\n 'specialAttack': 60,\n 'defense': 65,\n 'specialDefense': 75,\n 'speed': 130,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 142.01,\n 'name': 'Mega Aerodactyl',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 215,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 135,\n 'specialAttack': 70,\n 'defense': 85,\n 'specialDefense': 95,\n 'speed': 150,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 143,\n 'name': 'Snorlax',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 189,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 160,\n 'attack': 110,\n 'specialAttack': 65,\n 'defense': 65,\n 'specialDefense': 110,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 143.01,\n 'name': 'Gigantamax Snorlax',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 189,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 320,\n 'attack': 110,\n 'specialAttack': 65,\n 'defense': 65,\n 'specialDefense': 110,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 143.02,\n 'name': 'Santa Snorlax',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 189,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 160,\n 'attack': 110,\n 'specialAttack': 65,\n 'defense': 65,\n 'specialDefense': 110,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 143.03,\n 'name': 'Snorlax (Snowman)',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 189,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 160,\n 'attack': 110,\n 'specialAttack': 65,\n 'defense': 65,\n 'specialDefense': 110,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 144,\n 'name': 'Articuno',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 90,\n 'attack': 85,\n 'specialAttack': 95,\n 'defense': 100,\n 'specialDefense': 125,\n 'speed': 85,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 144.01,\n 'name': 'Galarian Articuno',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 90,\n 'attack': 85,\n 'specialAttack': 125,\n 'defense': 85,\n 'specialDefense': 100,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 145,\n 'name': 'Zapdos',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 90,\n 'attack': 90,\n 'specialAttack': 125,\n 'defense': 85,\n 'specialDefense': 90,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 145.01,\n 'name': 'Galarian Zapdos',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 90,\n 'attack': 125,\n 'specialAttack': 85,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 146,\n 'name': 'Moltres',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 90,\n 'attack': 100,\n 'specialAttack': 125,\n 'defense': 90,\n 'specialDefense': 85,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 146.01,\n 'name': 'Galarian Moltres',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 90,\n 'attack': 85,\n 'specialAttack': 100,\n 'defense': 90,\n 'specialDefense': 125,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 147,\n 'name': 'Dratini',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'eggCycles': 40,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dratini', 'Dragonair', 30)],\n 'base': {\n 'hitpoints': 41,\n 'attack': 64,\n 'specialAttack': 50,\n 'defense': 45,\n 'specialDefense': 50,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 148,\n 'name': 'Dragonair',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 147,\n 'eggCycles': 40,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dragonair', 'Dragonite', 55)],\n 'base': {\n 'hitpoints': 61,\n 'attack': 84,\n 'specialAttack': 70,\n 'defense': 65,\n 'specialDefense': 70,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 149,\n 'name': 'Dragonite',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 91,\n 'attack': 134,\n 'specialAttack': 100,\n 'defense': 95,\n 'specialDefense': 100,\n 'speed': 80,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 150,\n 'name': 'Mewtwo',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'eggCycles': 120,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedMegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Mewtwonite_X, 'Mewtwo', 'Mega Mewtwo X'),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedMegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Mewtwonite_Y, 'Mewtwo', 'Mega Mewtwo Y'),\n ],\n 'base': {\n 'hitpoints': 106,\n 'attack': 110,\n 'specialAttack': 154,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 130,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 150.01,\n 'name': 'Mega Mewtwo X',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 106,\n 'attack': 190,\n 'specialAttack': 154,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 130,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 150.02,\n 'name': 'Mega Mewtwo Y',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 106,\n 'attack': 150,\n 'specialAttack': 194,\n 'defense': 70,\n 'specialDefense': 120,\n 'speed': 140,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 150.03,\n 'name': 'Armored Mewtwo',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'eggCycles': 120,\n 'base': {\n 'hitpoints': 106,\n 'attack': 110,\n 'specialAttack': 154,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 130,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 151,\n 'name': 'Mew',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 270,\n 'eggCycles': 120,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].berry, id: _enums_BerryType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Lum },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 152,\n 'name': 'Chikorita',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Chikorita', 'Bayleef', 16)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 49,\n 'specialAttack': 49,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 153,\n 'name': 'Bayleef',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bayleef', 'Meganium', 32)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 62,\n 'specialAttack': 63,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 154,\n 'name': 'Meganium',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 236,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 82,\n 'specialAttack': 83,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n 'visualDifference': true,\n },\n}, {\n 'id': 155,\n 'name': 'Cyndaquil',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cyndaquil', 'Quilava', 14)],\n 'base': {\n 'hitpoints': 39,\n 'attack': 52,\n 'specialAttack': 60,\n 'defense': 43,\n 'specialDefense': 50,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 156,\n 'name': 'Quilava',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Quilava', 'Typhlosion', 36),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Quilava', 'Hisuian Typhlosion', 36),\n ],\n 'base': {\n 'hitpoints': 58,\n 'attack': 64,\n 'specialAttack': 80,\n 'defense': 58,\n 'specialDefense': 65,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 157,\n 'name': 'Typhlosion',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 240,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 78,\n 'attack': 84,\n 'specialAttack': 109,\n 'defense': 78,\n 'specialDefense': 85,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 157.01,\n 'name': 'Hisuian Typhlosion',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 240,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 73,\n 'attack': 84,\n 'specialAttack': 119,\n 'defense': 78,\n 'specialDefense': 85,\n 'speed': 95,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 158,\n 'name': 'Totodile',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 63,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Totodile', 'Croconaw', 18)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 44,\n 'defense': 64,\n 'specialDefense': 48,\n 'speed': 43,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 159,\n 'name': 'Croconaw',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Croconaw', 'Feraligatr', 30)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 80,\n 'specialAttack': 59,\n 'defense': 80,\n 'specialDefense': 63,\n 'speed': 58,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 160,\n 'name': 'Feraligatr',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 85,\n 'attack': 105,\n 'specialAttack': 79,\n 'defense': 100,\n 'specialDefense': 83,\n 'speed': 78,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 161,\n 'name': 'Sentret',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 43,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sentret', 'Furret', 15)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 46,\n 'specialAttack': 35,\n 'defense': 34,\n 'specialDefense': 45,\n 'speed': 20,\n },\n}, {\n 'id': 162,\n 'name': 'Furret',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 145,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 85,\n 'attack': 76,\n 'specialAttack': 45,\n 'defense': 64,\n 'specialDefense': 55,\n 'speed': 90,\n },\n}, {\n 'id': 163,\n 'name': 'Hoothoot',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 52,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Hoothoot', 'Noctowl', 20)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 30,\n 'specialAttack': 36,\n 'defense': 30,\n 'specialDefense': 56,\n 'speed': 50,\n },\n}, {\n 'id': 164,\n 'name': 'Noctowl',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 100,\n 'attack': 50,\n 'specialAttack': 86,\n 'defense': 50,\n 'specialDefense': 96,\n 'speed': 70,\n },\n}, {\n 'id': 165,\n 'name': 'Ledyba',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 53,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ledyba', 'Ledian', 18)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 20,\n 'specialAttack': 40,\n 'defense': 30,\n 'specialDefense': 80,\n 'speed': 55,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 166,\n 'name': 'Ledian',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 137,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 55,\n 'attack': 35,\n 'specialAttack': 55,\n 'defense': 50,\n 'specialDefense': 110,\n 'speed': 85,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 167,\n 'name': 'Spinarak',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 50,\n 'eggCycles': 15,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Spinarak', 'Ariados', 22)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 60,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 30,\n },\n}, {\n 'id': 168,\n 'name': 'Ariados',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 140,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 70,\n 'attack': 90,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 40,\n },\n}, {\n 'id': 169,\n 'name': 'Crobat',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 241,\n 'eggCycles': 15,\n 'base': {\n 'hitpoints': 85,\n 'attack': 90,\n 'specialAttack': 70,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 130,\n },\n}, {\n 'id': 170,\n 'name': 'Chinchou',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 66,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Chinchou', 'Lanturn', 27)],\n 'base': {\n 'hitpoints': 75,\n 'attack': 38,\n 'specialAttack': 56,\n 'defense': 38,\n 'specialDefense': 56,\n 'speed': 67,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_scale' },\n}, {\n 'id': 171,\n 'name': 'Lanturn',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 161,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 125,\n 'attack': 58,\n 'specialAttack': 76,\n 'defense': 58,\n 'specialDefense': 76,\n 'speed': 67,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_scale' },\n}, {\n 'id': 172,\n 'name': 'Pichu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 41,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Pichu', 'Pikachu', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 20,\n 'attack': 40,\n 'specialAttack': 35,\n 'defense': 15,\n 'specialDefense': 35,\n 'speed': 60,\n },\n}, {\n 'id': 172.01,\n 'name': 'Spiky-eared Pichu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 41,\n 'eggCycles': 8,\n 'base': {\n 'hitpoints': 20,\n 'attack': 40,\n 'specialAttack': 35,\n 'defense': 15,\n 'specialDefense': 35,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 173,\n 'name': 'Cleffa',\n 'catchRate': 150,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 44,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Cleffa', 'Clefairy', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 50,\n 'attack': 25,\n 'specialAttack': 45,\n 'defense': 28,\n 'specialDefense': 55,\n 'speed': 15,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Moon_stone' },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 174,\n 'name': 'Igglybuff',\n 'catchRate': 170,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 42,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Igglybuff', 'Jigglypuff', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 90,\n 'attack': 30,\n 'specialAttack': 40,\n 'defense': 15,\n 'specialDefense': 20,\n 'speed': 15,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 175,\n 'name': 'Togepi',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 49,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Togepi', 'Togetic', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 35,\n 'attack': 20,\n 'specialAttack': 40,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 20,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 175.01,\n 'name': 'Spooky Togepi',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 49,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Spooky Togepi', 'Spooky Togetic', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 35,\n 'attack': 20,\n 'specialAttack': 40,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 20,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 175.02,\n 'name': 'Togepi (Flowering Crown)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 49,\n 'eggCycles': 8,\n 'base': {\n 'hitpoints': 35,\n 'attack': 20,\n 'specialAttack': 40,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 20,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 176,\n 'name': 'Togetic',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 142,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Togetic', 'Togekiss', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Shiny_stone)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 40,\n 'specialAttack': 80,\n 'defense': 85,\n 'specialDefense': 105,\n 'speed': 40,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 176.01,\n 'name': 'Spooky Togetic',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 142,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Spooky Togetic', 'Spooky Togekiss', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dusk_stone)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 40,\n 'specialAttack': 80,\n 'defense': 85,\n 'specialDefense': 105,\n 'speed': 40,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 177,\n 'name': 'Natu',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Natu', 'Xatu', 25)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 50,\n 'specialAttack': 70,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 70,\n },\n}, {\n 'id': 178,\n 'name': 'Xatu',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 75,\n 'specialAttack': 95,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 95,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 179,\n 'name': 'Mareep',\n 'catchRate': 235,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 56,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Mareep', 'Flaaffy', 15)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 40,\n 'specialAttack': 65,\n 'defense': 40,\n 'specialDefense': 45,\n 'speed': 35,\n },\n}, {\n 'id': 180,\n 'name': 'Flaaffy',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 128,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Flaaffy', 'Ampharos', 30)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 55,\n 'specialAttack': 80,\n 'defense': 55,\n 'specialDefense': 60,\n 'speed': 45,\n },\n}, {\n 'id': 181,\n 'name': 'Ampharos',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 230,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Ampharosite, 'Ampharos', 'Mega Ampharos')],\n 'base': {\n 'hitpoints': 90,\n 'attack': 75,\n 'specialAttack': 115,\n 'defense': 85,\n 'specialDefense': 90,\n 'speed': 55,\n },\n}, {\n 'id': 181.01,\n 'name': 'Mega Ampharos',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 90,\n 'attack': 95,\n 'specialAttack': 165,\n 'defense': 105,\n 'specialDefense': 110,\n 'speed': 45,\n },\n}, {\n 'id': 182,\n 'name': 'Bellossom',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 221,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 90,\n 'defense': 95,\n 'specialDefense': 100,\n 'speed': 50,\n },\n}, {\n 'id': 183,\n 'name': 'Marill',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 88,\n 'eggCycles': 10,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Marill', 'Azumarill', 18)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 20,\n 'specialAttack': 20,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 40,\n },\n}, {\n 'id': 184,\n 'name': 'Azumarill',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 189,\n 'eggCycles': 10,\n 'base': {\n 'hitpoints': 100,\n 'attack': 50,\n 'specialAttack': 60,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 50,\n },\n}, {\n 'id': 185,\n 'name': 'Sudowoodo',\n 'catchRate': 65,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 144,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 70,\n 'attack': 100,\n 'specialAttack': 30,\n 'defense': 115,\n 'specialDefense': 65,\n 'speed': 30,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 185.01,\n 'name': 'Sudowoodo (Golden)',\n 'catchRate': 65,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 144,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 70,\n 'attack': 100,\n 'specialAttack': 30,\n 'defense': 115,\n 'specialDefense': 65,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 186,\n 'name': 'Politoed',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 225,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 75,\n 'specialAttack': 90,\n 'defense': 75,\n 'specialDefense': 100,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Kings_rock' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 187,\n 'name': 'Hoppip',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 50,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Hoppip', 'Skiploom', 18)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 35,\n 'specialAttack': 35,\n 'defense': 40,\n 'specialDefense': 55,\n 'speed': 50,\n },\n}, {\n 'id': 187.01,\n 'name': 'Hoppip (Chimecho)',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 50,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 35,\n 'attack': 35,\n 'specialAttack': 35,\n 'defense': 40,\n 'specialDefense': 55,\n 'speed': 50,\n },\n}, {\n 'id': 188,\n 'name': 'Skiploom',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 119,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Skiploom', 'Jumpluff', 27)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 45,\n 'specialAttack': 45,\n 'defense': 50,\n 'specialDefense': 65,\n 'speed': 80,\n },\n}, {\n 'id': 189,\n 'name': 'Jumpluff',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 207,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 55,\n 'specialAttack': 55,\n 'defense': 70,\n 'specialDefense': 95,\n 'speed': 110,\n },\n}, {\n 'id': 190,\n 'name': 'Aipom',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Aipom', 'Ambipom', 32)],\n 'exp': 72,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 55,\n 'attack': 70,\n 'specialAttack': 40,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 85,\n },\n 'gender': {\n 'visualDifference': true,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rare_Candy' },\n}, {\n 'id': 191,\n 'name': 'Sunkern',\n 'catchRate': 235,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 36,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Sunkern', 'Sunflora', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Sun_stone)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 30,\n 'specialAttack': 30,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 30,\n },\n}, {\n 'id': 192,\n 'name': 'Sunflora',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 149,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 75,\n 'specialAttack': 105,\n 'defense': 55,\n 'specialDefense': 85,\n 'speed': 30,\n },\n}, {\n 'id': 193,\n 'name': 'Yanma',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 78,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Yanma', 'Yanmega', 33)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 65,\n 'specialAttack': 75,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 95,\n },\n}, {\n 'id': 194,\n 'name': 'Wooper',\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 42,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wooper', 'Quagsire', 20)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 45,\n 'specialAttack': 25,\n 'defense': 45,\n 'specialDefense': 25,\n 'speed': 15,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 194.01,\n 'name': 'Paldean Wooper',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'catchRate': 255,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 42,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Paldean Wooper', 'Clodsire', 20)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 45,\n 'specialAttack': 25,\n 'defense': 45,\n 'specialDefense': 25,\n 'speed': 15,\n },\n}, {\n 'id': 195,\n 'name': 'Quagsire',\n 'catchRate': 90,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 151,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 85,\n 'specialAttack': 65,\n 'defense': 85,\n 'specialDefense': 65,\n 'speed': 35,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 196,\n 'name': 'Espeon',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'eggCycles': 35,\n 'base': {\n 'hitpoints': 65,\n 'attack': 65,\n 'specialAttack': 130,\n 'defense': 60,\n 'specialDefense': 95,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 197,\n 'name': 'Umbreon',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'eggCycles': 35,\n 'base': {\n 'hitpoints': 95,\n 'attack': 65,\n 'specialAttack': 60,\n 'defense': 110,\n 'specialDefense': 130,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 198,\n 'name': 'Murkrow',\n 'catchRate': 30,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 81,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Murkrow', 'Honchkrow', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dusk_stone)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 42,\n 'specialDefense': 42,\n 'speed': 91,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 199,\n 'name': 'Slowking',\n 'catchRate': 70,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 75,\n 'specialAttack': 100,\n 'defense': 80,\n 'specialDefense': 110,\n 'speed': 30,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Kings_rock' },\n}, {\n 'id': 199.01,\n 'name': 'Galarian Slowking',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 70,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 65,\n 'specialAttack': 110,\n 'defense': 80,\n 'specialDefense': 110,\n 'speed': 30,\n },\n}, {\n 'id': 200,\n 'name': 'Misdreavus',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 87,\n 'eggCycles': 25,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Misdreavus', 'Mismagius', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dusk_stone),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Misdreavus', 'Mismagius (Illusion)'),\n ],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 85,\n 'defense': 60,\n 'specialDefense': 85,\n 'speed': 85,\n },\n}, {\n 'id': 201,\n 'name': 'Unown (A)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.01,\n 'name': 'Unown (B)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.02,\n 'name': 'Unown (C)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.03,\n 'name': 'Unown (D)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.04,\n 'name': 'Unown (E)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.05,\n 'name': 'Unown (F)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.06,\n 'name': 'Unown (G)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.07,\n 'name': 'Unown (H)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.08,\n 'name': 'Unown (I)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.09,\n 'name': 'Unown (J)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.10,\n 'name': 'Unown (K)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.11,\n 'name': 'Unown (L)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.12,\n 'name': 'Unown (M)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.13,\n 'name': 'Unown (N)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.14,\n 'name': 'Unown (O)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.15,\n 'name': 'Unown (P)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.16,\n 'name': 'Unown (Q)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.17,\n 'name': 'Unown (R)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.18,\n 'name': 'Unown (S)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.19,\n 'name': 'Unown (T)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.20,\n 'name': 'Unown (U)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.21,\n 'name': 'Unown (V)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.22,\n 'name': 'Unown (W)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.23,\n 'name': 'Unown (X)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.24,\n 'name': 'Unown (Y)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.25,\n 'name': 'Unown (Z)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.26,\n 'name': 'Unown (!)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 201.27,\n 'name': 'Unown (?)',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 118,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 48,\n 'attack': 72,\n 'specialAttack': 72,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 48,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 202,\n 'name': 'Wobbuffet',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 142,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 190,\n 'attack': 33,\n 'specialAttack': 33,\n 'defense': 58,\n 'specialDefense': 58,\n 'speed': 33,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 203,\n 'name': 'Girafarig',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Girafarig', 'Farigiraf', 32)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 80,\n 'specialAttack': 90,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 85,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 204,\n 'name': 'Pineco',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pineco', 'Forretress', 31)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 35,\n 'defense': 90,\n 'specialDefense': 35,\n 'speed': 15,\n },\n}, {\n 'id': 205,\n 'name': 'Forretress',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 163,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 90,\n 'specialAttack': 60,\n 'defense': 140,\n 'specialDefense': 60,\n 'speed': 40,\n },\n}, {\n 'id': 206,\n 'name': 'Dunsparce',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 145,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dunsparce', 'Dudunsparce (Two-Segment)', 32)],\n 'base': {\n 'hitpoints': 100,\n 'attack': 70,\n 'specialAttack': 65,\n 'defense': 70,\n 'specialDefense': 65,\n 'speed': 45,\n },\n}, {\n 'id': 207,\n 'name': 'Gligar',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 86,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedStoneEvolution)('Gligar', 'Gliscor', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Razor_fang)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 75,\n 'specialAttack': 35,\n 'defense': 105,\n 'specialDefense': 65,\n 'speed': 85,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 208,\n 'name': 'Steelix',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 179,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Steelixite, 'Steelix', 'Mega Steelix')],\n 'base': {\n 'hitpoints': 75,\n 'attack': 85,\n 'specialAttack': 55,\n 'defense': 200,\n 'specialDefense': 65,\n 'speed': 30,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 208.01,\n 'name': 'Mega Steelix',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 351,\n 'catchRate': 25,\n 'base': {\n 'hitpoints': 75,\n 'attack': 125,\n 'specialAttack': 55,\n 'defense': 230,\n 'specialDefense': 95,\n 'speed': 30,\n },\n}, {\n 'id': 208.02,\n 'name': 'Crystal Steelix',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 179,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 75,\n 'attack': 85,\n 'specialAttack': 55,\n 'defense': 200,\n 'specialDefense': 65,\n 'speed': 30,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 209,\n 'name': 'Snubbull',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 60,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Snubbull', 'Granbull', 23)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 80,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 40,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 210,\n 'name': 'Granbull',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 158,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 75,\n 'specialDefense': 60,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 211,\n 'name': 'Qwilfish',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 88,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 95,\n 'specialAttack': 55,\n 'defense': 85,\n 'specialDefense': 55,\n 'speed': 85,\n },\n}, {\n 'id': 211.01,\n 'name': 'Hisuian Qwilfish',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 88,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Strong_Scroll', 'Hisuian Qwilfish', 'Overqwil', 25)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 95,\n 'specialAttack': 55,\n 'defense': 85,\n 'specialDefense': 55,\n 'speed': 85,\n },\n}, {\n 'id': 212,\n 'name': 'Scizor',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Scizorite, 'Scizor', 'Mega Scizor')],\n 'base': {\n 'hitpoints': 70,\n 'attack': 130,\n 'specialAttack': 55,\n 'defense': 100,\n 'specialDefense': 80,\n 'speed': 65,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 212.01,\n 'name': 'Mega Scizor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 351,\n 'catchRate': 25,\n 'base': {\n 'hitpoints': 70,\n 'attack': 150,\n 'specialAttack': 65,\n 'defense': 140,\n 'specialDefense': 100,\n 'speed': 75,\n },\n}, {\n 'id': 213,\n 'name': 'Shuckle',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 177,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 10,\n 'defense': 230,\n 'specialDefense': 230,\n 'speed': 5,\n },\n}, {\n 'id': 213.01,\n 'name': 'Shuckle (Corked)',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 177,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 20,\n 'attack': 10,\n 'specialAttack': 10,\n 'defense': 230,\n 'specialDefense': 230,\n 'speed': 5,\n },\n}, {\n 'id': 214,\n 'name': 'Heracross',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 175,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Heracronite, 'Heracross', 'Mega Heracross')],\n 'base': {\n 'hitpoints': 80,\n 'attack': 125,\n 'specialAttack': 40,\n 'defense': 75,\n 'specialDefense': 95,\n 'speed': 85,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 214.01,\n 'name': 'Mega Heracross',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 185,\n 'specialAttack': 40,\n 'defense': 115,\n 'specialDefense': 105,\n 'speed': 75,\n },\n}, {\n 'id': 215,\n 'name': 'Sneasel',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 86,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedStoneEvolution)('Sneasel', 'Weavile', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Razor_claw)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 95,\n 'specialAttack': 35,\n 'defense': 55,\n 'specialDefense': 75,\n 'speed': 115,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 215.01,\n 'name': 'Hisuian Sneasel',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 86,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedStoneEvolution)('Hisuian Sneasel', 'Sneasler', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Razor_claw)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 95,\n 'specialAttack': 35,\n 'defense': 55,\n 'specialDefense': 75,\n 'speed': 115,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 216,\n 'name': 'Teddiursa',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Teddiursa', 'Ursaring', 30)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 80,\n 'specialAttack': 50,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 40,\n },\n}, {\n 'id': 217,\n 'name': 'Ursaring',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedStoneEvolution)('Ursaring', 'Ursaluna', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Peat_block),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Ursaring', 'Bloodmoon Ursaluna'),\n ],\n 'base': {\n 'hitpoints': 90,\n 'attack': 130,\n 'specialAttack': 75,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 55,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 218,\n 'name': 'Slugma',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 50,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Slugma', 'Magcargo', 38)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 70,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 20,\n },\n}, {\n 'id': 219,\n 'name': 'Magcargo',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 151,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 90,\n 'defense': 120,\n 'specialDefense': 80,\n 'speed': 30,\n },\n}, {\n 'id': 220,\n 'name': 'Swinub',\n 'catchRate': 225,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 50,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Swinub', 'Piloswine', 33)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 50,\n 'specialAttack': 30,\n 'defense': 40,\n 'specialDefense': 30,\n 'speed': 50,\n },\n}, {\n 'id': 221,\n 'name': 'Piloswine',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 158,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Piloswine', 'Mamoswine', 53)],\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 60,\n 'defense': 80,\n 'specialDefense': 60,\n 'speed': 50,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 222,\n 'name': 'Corsola',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 144,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 65,\n 'attack': 55,\n 'specialAttack': 65,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 35,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 222.01,\n 'name': 'Galarian Corsola',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 144,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Galarian Corsola', 'Cursola', 38)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 55,\n 'specialAttack': 65,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 223,\n 'name': 'Remoraid',\n 'catchRate': 190,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Remoraid', 'Octillery', 25)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 65,\n 'specialAttack': 65,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 65,\n },\n}, {\n 'id': 224,\n 'name': 'Octillery',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 105,\n 'specialAttack': 105,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 45,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 225,\n 'name': 'Delibird',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 116,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 45,\n 'attack': 55,\n 'specialAttack': 65,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 75,\n },\n}, {\n 'id': 226,\n 'name': 'Mantine',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 170,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 85,\n 'attack': 40,\n 'specialAttack': 80,\n 'defense': 70,\n 'specialDefense': 140,\n 'speed': 70,\n },\n}, {\n 'id': 227,\n 'name': 'Skarmory',\n 'catchRate': 25,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 163,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 65,\n 'attack': 80,\n 'specialAttack': 40,\n 'defense': 140,\n 'specialDefense': 70,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n}, {\n 'id': 228,\n 'name': 'Houndour',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 66,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Houndour', 'Houndoom', 24)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 60,\n 'specialAttack': 80,\n 'defense': 30,\n 'specialDefense': 50,\n 'speed': 65,\n },\n}, {\n 'id': 229,\n 'name': 'Houndoom',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 175,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Houndoominite, 'Houndoom', 'Mega Houndoom')],\n 'base': {\n 'hitpoints': 75,\n 'attack': 90,\n 'specialAttack': 110,\n 'defense': 50,\n 'specialDefense': 80,\n 'speed': 95,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 229.01,\n 'name': 'Mega Houndoom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 90,\n 'specialAttack': 140,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 115,\n },\n}, {\n 'id': 230,\n 'name': 'Kingdra',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 243,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 75,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 85,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 231,\n 'name': 'Phanpy',\n 'catchRate': 120,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Phanpy', 'Donphan', 25)],\n 'base': {\n 'hitpoints': 90,\n 'attack': 60,\n 'specialAttack': 40,\n 'defense': 60,\n 'specialDefense': 40,\n 'speed': 40,\n },\n}, {\n 'id': 232,\n 'name': 'Donphan',\n 'catchRate': 60,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 90,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 120,\n 'specialDefense': 60,\n 'speed': 50,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 233,\n 'name': 'Porygon2',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 180,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Porygon2', 'Porygon-Z', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dubious_disc)],\n 'base': {\n 'hitpoints': 85,\n 'attack': 80,\n 'specialAttack': 105,\n 'defense': 90,\n 'specialDefense': 95,\n 'speed': 60,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Upgrade' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 234,\n 'name': 'Stantler',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 163,\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Agile_Scroll', 'Stantler', 'Wyrdeer', 31)],\n 'base': {\n 'hitpoints': 73,\n 'attack': 95,\n 'specialAttack': 85,\n 'defense': 62,\n 'specialDefense': 65,\n 'speed': 85,\n },\n}, {\n 'id': 234.01,\n 'name': 'Reindeer Stantler',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 163,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 73,\n 'attack': 95,\n 'specialAttack': 85,\n 'defense': 62,\n 'specialDefense': 65,\n 'speed': 85,\n },\n}, {\n 'id': 235,\n 'name': 'Smeargle',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 88,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 55,\n 'attack': 20,\n 'specialAttack': 20,\n 'defense': 35,\n 'specialDefense': 45,\n 'speed': 75,\n },\n}, {\n 'id': 236,\n 'name': 'Tyrogue',\n 'catchRate': 75,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 42,\n 'eggCycles': 25,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tyrogue', 'Hitmonlee', 20),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tyrogue', 'Hitmonchan', 20),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tyrogue', 'Hitmontop', 20),\n ],\n 'baby': true,\n 'base': {\n 'hitpoints': 35,\n 'attack': 35,\n 'specialAttack': 35,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 35,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 237,\n 'name': 'Hitmontop',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 50,\n 'attack': 95,\n 'specialAttack': 35,\n 'defense': 95,\n 'specialDefense': 110,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 238,\n 'name': 'Smoochum',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Smoochum', 'Jynx', 30)],\n 'baby': true,\n 'base': {\n 'hitpoints': 45,\n 'attack': 30,\n 'specialAttack': 85,\n 'defense': 15,\n 'specialDefense': 65,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 239,\n 'name': 'Elekid',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 72,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Elekid', 'Electabuzz', 30)],\n 'baby': true,\n 'base': {\n 'hitpoints': 45,\n 'attack': 63,\n 'specialAttack': 65,\n 'defense': 37,\n 'specialDefense': 55,\n 'speed': 95,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Electirizer' },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 240,\n 'name': 'Magby',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 73,\n 'eggCycles': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Magby', 'Magmar', 30)],\n 'baby': true,\n 'base': {\n 'hitpoints': 45,\n 'attack': 75,\n 'specialAttack': 70,\n 'defense': 37,\n 'specialDefense': 55,\n 'speed': 83,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magmarizer' },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 241,\n 'name': 'Miltank',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 172,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 95,\n 'attack': 80,\n 'specialAttack': 40,\n 'defense': 105,\n 'specialDefense': 70,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 242,\n 'name': 'Blissey',\n 'catchRate': 30,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 608,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 255,\n 'attack': 10,\n 'specialAttack': 75,\n 'defense': 10,\n 'specialDefense': 135,\n 'speed': 55,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Oval Stone' },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 242.01,\n 'name': 'Blessing Blissey',\n 'catchRate': 30,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 608,\n 'eggCycles': 40,\n 'base': {\n 'hitpoints': 255,\n 'attack': 10,\n 'specialAttack': 75,\n 'defense': 10,\n 'specialDefense': 135,\n 'speed': 55,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Oval Stone' },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 243,\n 'name': 'Raikou',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 90,\n 'attack': 85,\n 'specialAttack': 115,\n 'defense': 75,\n 'specialDefense': 100,\n 'speed': 115,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 244,\n 'name': 'Entei',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 115,\n 'attack': 115,\n 'specialAttack': 90,\n 'defense': 85,\n 'specialDefense': 75,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 245,\n 'name': 'Suicune',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'eggCycles': 80,\n 'base': {\n 'hitpoints': 100,\n 'attack': 75,\n 'specialAttack': 90,\n 'defense': 115,\n 'specialDefense': 115,\n 'speed': 85,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 246,\n 'name': 'Larvitar',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'eggCycles': 40,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Larvitar', 'Pupitar', 30)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 64,\n 'specialAttack': 45,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 41,\n },\n}, {\n 'id': 247,\n 'name': 'Pupitar',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 144,\n 'eggCycles': 40,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pupitar', 'Tyranitar', 55)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 84,\n 'specialAttack': 65,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 51,\n },\n}, {\n 'id': 248,\n 'name': 'Tyranitar',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'eggCycles': 40,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Tyranitarite, 'Tyranitar', 'Mega Tyranitar')],\n 'base': {\n 'hitpoints': 100,\n 'attack': 134,\n 'specialAttack': 95,\n 'defense': 110,\n 'specialDefense': 100,\n 'speed': 61,\n },\n}, {\n 'id': 248.01,\n 'name': 'Mega Tyranitar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 100,\n 'attack': 164,\n 'specialAttack': 95,\n 'defense': 150,\n 'specialDefense': 120,\n 'speed': 71,\n },\n}, {\n 'id': 249,\n 'name': 'Lugia',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'eggCycles': 120,\n 'base': {\n 'hitpoints': 106,\n 'attack': 90,\n 'specialAttack': 90,\n 'defense': 130,\n 'specialDefense': 154,\n 'speed': 110,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 249.01,\n 'name': 'XD001',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'eggCycles': 120,\n 'base': {\n 'hitpoints': 106,\n 'attack': 90,\n 'specialAttack': 90,\n 'defense': 130,\n 'specialDefense': 154,\n 'speed': 110,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 250,\n 'name': 'Ho-Oh',\n 'catchRate': 3,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'eggCycles': 120,\n 'base': {\n 'hitpoints': 106,\n 'attack': 130,\n 'specialAttack': 110,\n 'defense': 90,\n 'specialDefense': 154,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 251,\n 'name': 'Celebi',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 270,\n 'eggCycles': 120,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].berry, id: _enums_BerryType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Lum },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 251.01,\n 'name': 'Flowering Celebi',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 270,\n 'eggCycles': 120,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].berry, id: _enums_BerryType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Lum },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 251.02,\n 'name': 'Grinch Celebi',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 270,\n 'eggCycles': 120,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].berry, id: _enums_BerryType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Lum },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 252,\n 'name': 'Treecko',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Treecko', 'Grovyle', 16)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 65,\n 'defense': 35,\n 'specialDefense': 55,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 253,\n 'name': 'Grovyle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Grovyle', 'Sceptile', 36)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 85,\n 'defense': 45,\n 'specialDefense': 65,\n 'speed': 95,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 254,\n 'name': 'Sceptile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Sceptilite, 'Sceptile', 'Mega Sceptile')],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 105,\n 'defense': 65,\n 'specialDefense': 85,\n 'speed': 120,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 254.01,\n 'name': 'Mega Sceptile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 110,\n 'specialAttack': 145,\n 'defense': 75,\n 'specialDefense': 85,\n 'speed': 145,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 255,\n 'name': 'Torchic',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Torchic', 'Combusken', 16)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 60,\n 'specialAttack': 70,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 255.01,\n 'name': 'Torchic (Egg)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 45,\n 'attack': 60,\n 'specialAttack': 70,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 256,\n 'name': 'Combusken',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Combusken', 'Blaziken', 36)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n 'visualDifference': true,\n },\n}, {\n 'id': 257,\n 'name': 'Blaziken',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Blazikenite, 'Blaziken', 'Mega Blaziken')],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 110,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n 'visualDifference': true,\n },\n}, {\n 'id': 257.01,\n 'name': 'Mega Blaziken',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 160,\n 'specialAttack': 130,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 258,\n 'name': 'Mudkip',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Mudkip', 'Marshtomp', 16)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 70,\n 'specialAttack': 50,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 40,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 259,\n 'name': 'Marshtomp',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Marshtomp', 'Swampert', 36)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 50,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 260,\n 'name': 'Swampert',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 241,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Swampertite, 'Swampert', 'Mega Swampert')],\n 'base': {\n 'hitpoints': 100,\n 'attack': 110,\n 'specialAttack': 85,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 260.01,\n 'name': 'Mega Swampert',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 100,\n 'attack': 150,\n 'specialAttack': 95,\n 'defense': 110,\n 'specialDefense': 110,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 261,\n 'name': 'Poochyena',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Poochyena', 'Mightyena', 18)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 30,\n 'defense': 35,\n 'specialDefense': 30,\n 'speed': 35,\n },\n}, {\n 'id': 262,\n 'name': 'Mightyena',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 147,\n 'catchRate': 127,\n 'base': {\n 'hitpoints': 70,\n 'attack': 90,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 70,\n },\n}, {\n 'id': 263,\n 'name': 'Zigzagoon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Zigzagoon', 'Linoone', 20)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 30,\n 'specialAttack': 30,\n 'defense': 41,\n 'specialDefense': 41,\n 'speed': 60,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Revive' },\n}, {\n 'id': 263.01,\n 'name': 'Galarian Zigzagoon',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Galarian Zigzagoon', 'Galarian Linoone', 20)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 30,\n 'specialAttack': 30,\n 'defense': 41,\n 'specialDefense': 41,\n 'speed': 60,\n },\n}, {\n 'id': 264,\n 'name': 'Linoone',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 147,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 78,\n 'attack': 70,\n 'specialAttack': 50,\n 'defense': 61,\n 'specialDefense': 61,\n 'speed': 100,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Max Revive' },\n}, {\n 'id': 264.01,\n 'name': 'Galarian Linoone',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 147,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedLevelEvolution)('Galarian Linoone', 'Obstagoon', 35)],\n 'base': {\n 'hitpoints': 78,\n 'attack': 70,\n 'specialAttack': 50,\n 'defense': 61,\n 'specialDefense': 61,\n 'speed': 100,\n },\n}, {\n 'id': 265,\n 'name': 'Wurmple',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wurmple', 'Silcoon', 7),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wurmple', 'Cascoon', 7),\n ],\n 'base': {\n 'hitpoints': 45,\n 'attack': 45,\n 'specialAttack': 20,\n 'defense': 35,\n 'specialDefense': 30,\n 'speed': 20,\n },\n}, {\n 'id': 266,\n 'name': 'Silcoon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 72,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Silcoon', 'Beautifly', 10)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 35,\n 'specialAttack': 25,\n 'defense': 55,\n 'specialDefense': 25,\n 'speed': 15,\n },\n}, {\n 'id': 267,\n 'name': 'Beautifly',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 70,\n 'specialAttack': 100,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 65,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 268,\n 'name': 'Cascoon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 72,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cascoon', 'Dustox', 10)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 35,\n 'specialAttack': 25,\n 'defense': 55,\n 'specialDefense': 25,\n 'speed': 15,\n },\n}, {\n 'id': 269,\n 'name': 'Dustox',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 50,\n 'defense': 70,\n 'specialDefense': 90,\n 'speed': 65,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 270,\n 'name': 'Lotad',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 44,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Lotad', 'Lombre', 14)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 30,\n 'specialAttack': 40,\n 'defense': 30,\n 'specialDefense': 50,\n 'speed': 30,\n },\n}, {\n 'id': 271,\n 'name': 'Lombre',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 119,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Lombre', 'Ludicolo', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Water_stone)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 60,\n 'defense': 50,\n 'specialDefense': 70,\n 'speed': 50,\n },\n}, {\n 'id': 272,\n 'name': 'Ludicolo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 216,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 70,\n 'specialAttack': 90,\n 'defense': 70,\n 'specialDefense': 100,\n 'speed': 70,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 273,\n 'name': 'Seedot',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 44,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Seedot', 'Nuzleaf', 14)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 30,\n 'defense': 50,\n 'specialDefense': 30,\n 'speed': 30,\n },\n}, {\n 'id': 274,\n 'name': 'Nuzleaf',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 119,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Nuzleaf', 'Shiftry', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaf_stone)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 70,\n 'specialAttack': 60,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 60,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 275,\n 'name': 'Shiftry',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 216,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 90,\n 'attack': 100,\n 'specialAttack': 90,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 276,\n 'name': 'Taillow',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 54,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Taillow', 'Swellow', 22)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 55,\n 'specialAttack': 30,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 85,\n },\n}, {\n 'id': 277,\n 'name': 'Swellow',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 159,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 85,\n 'specialAttack': 75,\n 'defense': 60,\n 'specialDefense': 50,\n 'speed': 125,\n },\n}, {\n 'id': 278,\n 'name': 'Wingull',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 54,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wingull', 'Pelipper', 25)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 30,\n 'specialAttack': 55,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 85,\n },\n}, {\n 'id': 279,\n 'name': 'Pelipper',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 154,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 95,\n 'defense': 100,\n 'specialDefense': 70,\n 'speed': 65,\n },\n}, {\n 'id': 280,\n 'name': 'Ralts',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'catchRate': 235,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ralts', 'Kirlia', 20)],\n 'base': {\n 'hitpoints': 28,\n 'attack': 25,\n 'specialAttack': 45,\n 'defense': 25,\n 'specialDefense': 35,\n 'speed': 40,\n },\n}, {\n 'id': 281,\n 'name': 'Kirlia',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 97,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Kirlia', 'Gardevoir', 30),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Kirlia', 'Gallade', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dawn_stone),\n ],\n 'base': {\n 'hitpoints': 38,\n 'attack': 35,\n 'specialAttack': 65,\n 'defense': 35,\n 'specialDefense': 55,\n 'speed': 50,\n },\n}, {\n 'id': 282,\n 'name': 'Gardevoir',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 233,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Gardevoirite, 'Gardevoir', 'Mega Gardevoir')],\n 'base': {\n 'hitpoints': 68,\n 'attack': 65,\n 'specialAttack': 125,\n 'defense': 65,\n 'specialDefense': 115,\n 'speed': 80,\n },\n}, {\n 'id': 282.01,\n 'name': 'Mega Gardevoir',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 68,\n 'attack': 85,\n 'specialAttack': 165,\n 'defense': 65,\n 'specialDefense': 135,\n 'speed': 100,\n },\n}, {\n 'id': 283,\n 'name': 'Surskit',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 54,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Surskit', 'Masquerain', 22)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 30,\n 'specialAttack': 50,\n 'defense': 32,\n 'specialDefense': 52,\n 'speed': 65,\n },\n}, {\n 'id': 284,\n 'name': 'Masquerain',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 60,\n 'specialAttack': 100,\n 'defense': 62,\n 'specialDefense': 82,\n 'speed': 80,\n },\n}, {\n 'id': 285,\n 'name': 'Shroomish',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 59,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Shroomish', 'Breloom', 23)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 35,\n },\n}, {\n 'id': 286,\n 'name': 'Breloom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 161,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 60,\n 'attack': 130,\n 'specialAttack': 60,\n 'defense': 80,\n 'specialDefense': 60,\n 'speed': 70,\n },\n}, {\n 'id': 287,\n 'name': 'Slakoth',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Slakoth', 'Vigoroth', 18)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 35,\n 'defense': 60,\n 'specialDefense': 35,\n 'speed': 30,\n },\n}, {\n 'id': 288,\n 'name': 'Vigoroth',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 154,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Vigoroth', 'Slaking', 36)],\n 'base': {\n 'hitpoints': 80,\n 'attack': 80,\n 'specialAttack': 55,\n 'defense': 80,\n 'specialDefense': 55,\n 'speed': 90,\n },\n}, {\n 'id': 289,\n 'name': 'Slaking',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 252,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 150,\n 'attack': 160,\n 'specialAttack': 95,\n 'defense': 100,\n 'specialDefense': 65,\n 'speed': 100,\n },\n}, {\n 'id': 290,\n 'name': 'Nincada',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 53,\n 'catchRate': 255,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Nincada', 'Ninjask', 20),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Nincada', 'Shedinja', 20),\n ],\n 'base': {\n 'hitpoints': 31,\n 'attack': 45,\n 'specialAttack': 30,\n 'defense': 90,\n 'specialDefense': 30,\n 'speed': 40,\n },\n}, {\n 'id': 291,\n 'name': 'Ninjask',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 160,\n 'catchRate': 120,\n 'base': {\n 'hitpoints': 61,\n 'attack': 90,\n 'specialAttack': 50,\n 'defense': 45,\n 'specialDefense': 50,\n 'speed': 160,\n },\n}, {\n 'id': 292,\n 'name': 'Shedinja',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 83,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 1,\n 'attack': 90,\n 'specialAttack': 30,\n 'defense': 45,\n 'specialDefense': 30,\n 'speed': 40,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 293,\n 'name': 'Whismur',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 48,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Whismur', 'Loudred', 20)],\n 'base': {\n 'hitpoints': 64,\n 'attack': 51,\n 'specialAttack': 51,\n 'defense': 23,\n 'specialDefense': 23,\n 'speed': 28,\n },\n}, {\n 'id': 294,\n 'name': 'Loudred',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 126,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Loudred', 'Exploud', 40)],\n 'base': {\n 'hitpoints': 84,\n 'attack': 71,\n 'specialAttack': 71,\n 'defense': 43,\n 'specialDefense': 43,\n 'speed': 48,\n },\n}, {\n 'id': 295,\n 'name': 'Exploud',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 221,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 104,\n 'attack': 91,\n 'specialAttack': 91,\n 'defense': 63,\n 'specialDefense': 73,\n 'speed': 68,\n },\n}, {\n 'id': 296,\n 'name': 'Makuhita',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 47,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Makuhita', 'Hariyama', 24)],\n 'base': {\n 'hitpoints': 72,\n 'attack': 60,\n 'specialAttack': 20,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 25,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 297,\n 'name': 'Hariyama',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 166,\n 'catchRate': 200,\n 'base': {\n 'hitpoints': 144,\n 'attack': 120,\n 'specialAttack': 40,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Kings_rock' },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 298,\n 'name': 'Azurill',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 38,\n 'catchRate': 150,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Azurill', 'Marill', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 50,\n 'attack': 20,\n 'specialAttack': 20,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 20,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 299,\n 'name': 'Nosepass',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 75,\n 'catchRate': 255,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('MagneticField', 'Nosepass', 'Probopass', 20),\n ],\n 'base': {\n 'hitpoints': 30,\n 'attack': 45,\n 'specialAttack': 45,\n 'defense': 135,\n 'specialDefense': 90,\n 'speed': 30,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 300,\n 'name': 'Skitty',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 52,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Skitty', 'Delcatty', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Moon_stone)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 45,\n 'specialAttack': 35,\n 'defense': 45,\n 'specialDefense': 35,\n 'speed': 50,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 301,\n 'name': 'Delcatty',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 140,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 70,\n 'attack': 65,\n 'specialAttack': 55,\n 'defense': 65,\n 'specialDefense': 55,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 302,\n 'name': 'Sableye',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 133,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Sablenite, 'Sableye', 'Mega Sableye')],\n 'base': {\n 'hitpoints': 50,\n 'attack': 75,\n 'specialAttack': 65,\n 'defense': 75,\n 'specialDefense': 65,\n 'speed': 50,\n },\n}, {\n 'id': 302.01,\n 'name': 'Mega Sableye',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 125,\n 'specialDefense': 115,\n 'speed': 20,\n },\n}, {\n 'id': 303,\n 'name': 'Mawile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 133,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Mawilite, 'Mawile', 'Mega Mawile')],\n 'base': {\n 'hitpoints': 50,\n 'attack': 85,\n 'specialAttack': 55,\n 'defense': 85,\n 'specialDefense': 55,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Iron Ball' },\n}, {\n 'id': 303.01,\n 'name': 'Mega Mawile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 105,\n 'specialAttack': 55,\n 'defense': 125,\n 'specialDefense': 95,\n 'speed': 50,\n },\n}, {\n 'id': 304,\n 'name': 'Aron',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 66,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Aron', 'Lairon', 32)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 70,\n 'specialAttack': 40,\n 'defense': 100,\n 'specialDefense': 40,\n 'speed': 30,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 305,\n 'name': 'Lairon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 151,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Lairon', 'Aggron', 42)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 90,\n 'specialAttack': 50,\n 'defense': 140,\n 'specialDefense': 50,\n 'speed': 40,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 306,\n 'name': 'Aggron',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 239,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Aggronite, 'Aggron', 'Mega Aggron')],\n 'base': {\n 'hitpoints': 70,\n 'attack': 110,\n 'specialAttack': 60,\n 'defense': 180,\n 'specialDefense': 60,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 306.01,\n 'name': 'Mega Aggron',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 140,\n 'specialAttack': 60,\n 'defense': 230,\n 'specialDefense': 80,\n 'speed': 50,\n },\n}, {\n 'id': 307,\n 'name': 'Meditite',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Meditite', 'Medicham', 37)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 60,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 308,\n 'name': 'Medicham',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 144,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Medichamite, 'Medicham', 'Mega Medicham')],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 60,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 308.01,\n 'name': 'Mega Medicham',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 351,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 80,\n 'defense': 85,\n 'specialDefense': 85,\n 'speed': 100,\n },\n}, {\n 'id': 309,\n 'name': 'Electrike',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 59,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Electrike', 'Manectric', 26)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 65,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 65,\n },\n}, {\n 'id': 310,\n 'name': 'Manectric',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 166,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Manectite, 'Manectric', 'Mega Manectric')],\n 'base': {\n 'hitpoints': 70,\n 'attack': 75,\n 'specialAttack': 105,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 105,\n },\n}, {\n 'id': 310.01,\n 'name': 'Mega Manectric',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 75,\n 'specialAttack': 135,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 135,\n },\n}, {\n 'id': 311,\n 'name': 'Plusle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 142,\n 'catchRate': 200,\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 85,\n 'defense': 40,\n 'specialDefense': 75,\n 'speed': 95,\n },\n}, {\n 'id': 312,\n 'name': 'Minun',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 142,\n 'catchRate': 200,\n 'base': {\n 'hitpoints': 60,\n 'attack': 40,\n 'specialAttack': 75,\n 'defense': 50,\n 'specialDefense': 85,\n 'speed': 95,\n },\n}, {\n 'id': 313,\n 'name': 'Volbeat',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 151,\n 'catchRate': 150,\n 'base': {\n 'hitpoints': 65,\n 'attack': 73,\n 'specialAttack': 47,\n 'defense': 75,\n 'specialDefense': 85,\n 'speed': 85,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 314,\n 'name': 'Illumise',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 151,\n 'catchRate': 150,\n 'base': {\n 'hitpoints': 65,\n 'attack': 47,\n 'specialAttack': 73,\n 'defense': 75,\n 'specialDefense': 85,\n 'speed': 85,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 315,\n 'name': 'Roselia',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 140,\n 'catchRate': 150,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Roselia', 'Roserade', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Shiny_stone)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 60,\n 'specialAttack': 100,\n 'defense': 45,\n 'specialDefense': 80,\n 'speed': 65,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 316,\n 'name': 'Gulpin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 60,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Gulpin', 'Swalot', 26)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 43,\n 'specialAttack': 43,\n 'defense': 53,\n 'specialDefense': 53,\n 'speed': 40,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 317,\n 'name': 'Swalot',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 163,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 100,\n 'attack': 73,\n 'specialAttack': 73,\n 'defense': 83,\n 'specialDefense': 83,\n 'speed': 55,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 318,\n 'name': 'Carvanha',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 61,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Carvanha', 'Sharpedo', 30)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 90,\n 'specialAttack': 65,\n 'defense': 20,\n 'specialDefense': 20,\n 'speed': 65,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_tooth' },\n}, {\n 'id': 319,\n 'name': 'Sharpedo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 161,\n 'catchRate': 60,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Sharpedonite, 'Sharpedo', 'Mega Sharpedo')],\n 'base': {\n 'hitpoints': 70,\n 'attack': 120,\n 'specialAttack': 95,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 95,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_tooth' },\n}, {\n 'id': 319.01,\n 'name': 'Mega Sharpedo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 70,\n 'attack': 140,\n 'specialAttack': 110,\n 'defense': 70,\n 'specialDefense': 65,\n 'speed': 105,\n },\n}, {\n 'id': 320,\n 'name': 'Wailmer',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 80,\n 'catchRate': 125,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wailmer', 'Wailord', 40)],\n 'base': {\n 'hitpoints': 130,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 60,\n },\n}, {\n 'id': 321,\n 'name': 'Wailord',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 175,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 170,\n 'attack': 90,\n 'specialAttack': 90,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 60,\n },\n}, {\n 'id': 322,\n 'name': 'Numel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Numel', 'Camerupt', 33)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 65,\n 'defense': 40,\n 'specialDefense': 45,\n 'speed': 35,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 323,\n 'name': 'Camerupt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'catchRate': 150,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Cameruptite, 'Camerupt', 'Mega Camerupt')],\n 'base': {\n 'hitpoints': 70,\n 'attack': 100,\n 'specialAttack': 105,\n 'defense': 70,\n 'specialDefense': 75,\n 'speed': 40,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 323.01,\n 'name': 'Mega Camerupt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 351,\n 'catchRate': 150,\n 'base': {\n 'hitpoints': 70,\n 'attack': 120,\n 'specialAttack': 145,\n 'defense': 100,\n 'specialDefense': 105,\n 'speed': 20,\n },\n}, {\n 'id': 324,\n 'name': 'Torkoal',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 140,\n 'specialDefense': 70,\n 'speed': 20,\n },\n}, {\n 'id': 325,\n 'name': 'Spoink',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 66,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Spoink', 'Grumpig', 32)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 25,\n 'specialAttack': 70,\n 'defense': 35,\n 'specialDefense': 80,\n 'speed': 60,\n },\n}, {\n 'id': 326,\n 'name': 'Grumpig',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 165,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 80,\n 'attack': 45,\n 'specialAttack': 90,\n 'defense': 65,\n 'specialDefense': 110,\n 'speed': 80,\n },\n}, {\n 'id': 327,\n 'name': 'Spinda',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 126,\n 'catchRate': 255,\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 60,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 60,\n },\n}, {\n 'id': 328,\n 'name': 'Trapinch',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 58,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Trapinch', 'Vibrava', 35)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 100,\n 'specialAttack': 45,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 10,\n },\n}, {\n 'id': 329,\n 'name': 'Vibrava',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 119,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Vibrava', 'Flygon', 45)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 70,\n 'specialAttack': 50,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 70,\n },\n}, {\n 'id': 330,\n 'name': 'Flygon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 234,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 80,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 100,\n },\n}, {\n 'id': 331,\n 'name': 'Cacnea',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 67,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cacnea', 'Cacturne', 32)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 35,\n },\n}, {\n 'id': 332,\n 'name': 'Cacturne',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 166,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 70,\n 'attack': 115,\n 'specialAttack': 115,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 55,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 333,\n 'name': 'Swablu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 62,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Swablu', 'Altaria', 35)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 60,\n 'specialDefense': 75,\n 'speed': 50,\n },\n}, {\n 'id': 334,\n 'name': 'Altaria',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 172,\n 'catchRate': 45,\n // 'evolutions': [MegaEvolution(MegaStoneType.Altarianite, 'Altaria', 'Mega Altaria')],\n 'base': {\n 'hitpoints': 75,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 90,\n 'specialDefense': 105,\n 'speed': 80,\n },\n}, {\n 'id': 334.01,\n 'name': 'Mega Altaria',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 110,\n 'specialAttack': 110,\n 'defense': 110,\n 'specialDefense': 105,\n 'speed': 80,\n },\n}, {\n 'id': 335,\n 'name': 'Zangoose',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 160,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 73,\n 'attack': 115,\n 'specialAttack': 60,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 90,\n },\n}, {\n 'id': 336,\n 'name': 'Seviper',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 160,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 73,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 65,\n },\n}, {\n 'id': 337,\n 'name': 'Lunatone',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 161,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 90,\n 'attack': 55,\n 'specialAttack': 95,\n 'defense': 65,\n 'specialDefense': 85,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Moon_stone' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 338,\n 'name': 'Solrock',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 161,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 90,\n 'attack': 95,\n 'specialAttack': 55,\n 'defense': 85,\n 'specialDefense': 65,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Sun_stone' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 339,\n 'name': 'Barboach',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Barboach', 'Whiscash', 30)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 48,\n 'specialAttack': 46,\n 'defense': 43,\n 'specialDefense': 41,\n 'speed': 60,\n },\n}, {\n 'id': 340,\n 'name': 'Whiscash',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 164,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 110,\n 'attack': 78,\n 'specialAttack': 76,\n 'defense': 73,\n 'specialDefense': 71,\n 'speed': 60,\n },\n}, {\n 'id': 341,\n 'name': 'Corphish',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 62,\n 'catchRate': 205,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Corphish', 'Crawdaunt', 30)],\n 'base': {\n 'hitpoints': 43,\n 'attack': 80,\n 'specialAttack': 50,\n 'defense': 65,\n 'specialDefense': 35,\n 'speed': 35,\n },\n}, {\n 'id': 342,\n 'name': 'Crawdaunt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 164,\n 'catchRate': 155,\n 'base': {\n 'hitpoints': 63,\n 'attack': 120,\n 'specialAttack': 90,\n 'defense': 85,\n 'specialDefense': 55,\n 'speed': 55,\n },\n}, {\n 'id': 343,\n 'name': 'Baltoy',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Baltoy', 'Claydol', 36)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 55,\n 'specialDefense': 70,\n 'speed': 55,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 344,\n 'name': 'Claydol',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 60,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 105,\n 'specialDefense': 120,\n 'speed': 75,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 345,\n 'name': 'Lileep',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 71,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Lileep', 'Cradily', 40)],\n 'base': {\n 'hitpoints': 66,\n 'attack': 41,\n 'specialAttack': 61,\n 'defense': 77,\n 'specialDefense': 87,\n 'speed': 23,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 346,\n 'name': 'Cradily',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 173,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 86,\n 'attack': 81,\n 'specialAttack': 81,\n 'defense': 97,\n 'specialDefense': 107,\n 'speed': 43,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 347,\n 'name': 'Anorith',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 71,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Anorith', 'Armaldo', 40)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 95,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 75,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 348,\n 'name': 'Armaldo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 173,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 125,\n 'specialAttack': 70,\n 'defense': 100,\n 'specialDefense': 80,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 349,\n 'name': 'Feebas',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 40,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Feebas', 'Milotic', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Prism_scale)],\n 'base': {\n 'hitpoints': 20,\n 'attack': 15,\n 'specialAttack': 10,\n 'defense': 20,\n 'specialDefense': 55,\n 'speed': 80,\n },\n}, {\n 'id': 350,\n 'name': 'Milotic',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 189,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 95,\n 'attack': 60,\n 'specialAttack': 100,\n 'defense': 79,\n 'specialDefense': 125,\n 'speed': 81,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 351,\n 'name': 'Castform',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 147,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 70,\n },\n}, {\n 'id': 351.01,\n 'name': 'Castform (Sunny)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 147,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 70,\n },\n}, {\n 'id': 351.02,\n 'name': 'Castform (Rainy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 147,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 70,\n },\n}, {\n 'id': 351.03,\n 'name': 'Castform (Snowy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 147,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 70,\n },\n}, {\n 'id': 352,\n 'name': 'Kecleon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 200,\n 'base': {\n 'hitpoints': 60,\n 'attack': 90,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 120,\n 'speed': 40,\n },\n}, {\n 'id': 353,\n 'name': 'Shuppet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 59,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Shuppet', 'Banette', 37)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 75,\n 'specialAttack': 63,\n 'defense': 35,\n 'specialDefense': 33,\n 'speed': 45,\n },\n}, {\n 'id': 354,\n 'name': 'Banette',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 159,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Banettite, 'Banette', 'Mega Banette')],\n 'base': {\n 'hitpoints': 64,\n 'attack': 115,\n 'specialAttack': 83,\n 'defense': 65,\n 'specialDefense': 63,\n 'speed': 65,\n },\n}, {\n 'id': 354.01,\n 'name': 'Mega Banette',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 64,\n 'attack': 165,\n 'specialAttack': 93,\n 'defense': 75,\n 'specialDefense': 83,\n 'speed': 75,\n },\n}, {\n 'id': 355,\n 'name': 'Duskull',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 59,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Duskull', 'Dusclops', 37)],\n 'base': {\n 'hitpoints': 20,\n 'attack': 40,\n 'specialAttack': 30,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 25,\n },\n}, {\n 'id': 356,\n 'name': 'Dusclops',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 159,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Dusclops', 'Dusknoir', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Reaper_cloth)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 70,\n 'specialAttack': 60,\n 'defense': 130,\n 'specialDefense': 130,\n 'speed': 25,\n },\n}, {\n 'id': 357,\n 'name': 'Tropius',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 161,\n 'catchRate': 200,\n 'base': {\n 'hitpoints': 99,\n 'attack': 68,\n 'specialAttack': 72,\n 'defense': 83,\n 'specialDefense': 87,\n 'speed': 51,\n },\n}, {\n 'id': 358,\n 'name': 'Chimecho',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 159,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 50,\n 'specialAttack': 95,\n 'defense': 80,\n 'specialDefense': 90,\n 'speed': 65,\n },\n}, {\n 'id': 359,\n 'name': 'Absol',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 163,\n 'catchRate': 30,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Absolite, 'Absol', 'Mega Absol')],\n 'base': {\n 'hitpoints': 65,\n 'attack': 130,\n 'specialAttack': 75,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 75,\n },\n}, {\n 'id': 359.01,\n 'name': 'Mega Absol',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 351,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 65,\n 'attack': 150,\n 'specialAttack': 115,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 115,\n },\n}, {\n 'id': 360,\n 'name': 'Wynaut',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 52,\n 'catchRate': 125,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wynaut', 'Wobbuffet', 15)],\n 'baby': true,\n 'base': {\n 'hitpoints': 95,\n 'attack': 23,\n 'specialAttack': 23,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 23,\n },\n}, {\n 'id': 361,\n 'name': 'Snorunt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'catchRate': 190,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Snorunt', 'Glalie', 42),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Snorunt', 'Froslass', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dawn_stone),\n ],\n 'base': {\n 'hitpoints': 50,\n 'attack': 50,\n 'specialAttack': 50,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 50,\n },\n}, {\n 'id': 362,\n 'name': 'Glalie',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Glalitite, 'Glalie', 'Mega Glalie')],\n 'base': {\n 'hitpoints': 80,\n 'attack': 80,\n 'specialAttack': 80,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 80,\n },\n}, {\n 'id': 362.01,\n 'name': 'Mega Glalie',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 351,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 100,\n },\n}, {\n 'id': 363,\n 'name': 'Spheal',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 58,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Spheal', 'Sealeo', 32)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 40,\n 'specialAttack': 55,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 25,\n },\n}, {\n 'id': 364,\n 'name': 'Sealeo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 144,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sealeo', 'Walrein', 44)],\n 'base': {\n 'hitpoints': 90,\n 'attack': 60,\n 'specialAttack': 75,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 45,\n },\n}, {\n 'id': 365,\n 'name': 'Walrein',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 110,\n 'attack': 80,\n 'specialAttack': 95,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 65,\n },\n}, {\n 'id': 366,\n 'name': 'Clamperl',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 69,\n 'catchRate': 255,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Clamperl', 'Huntail', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Deepsea_tooth),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Clamperl', 'Gorebyss', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Deepsea_scale),\n ],\n 'base': {\n 'hitpoints': 35,\n 'attack': 64,\n 'specialAttack': 74,\n 'defense': 85,\n 'specialDefense': 55,\n 'speed': 32,\n },\n}, {\n 'id': 367,\n 'name': 'Huntail',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 170,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 55,\n 'attack': 104,\n 'specialAttack': 94,\n 'defense': 105,\n 'specialDefense': 75,\n 'speed': 52,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_tooth' },\n}, {\n 'id': 368,\n 'name': 'Gorebyss',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 170,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 55,\n 'attack': 84,\n 'specialAttack': 114,\n 'defense': 105,\n 'specialDefense': 75,\n 'speed': 52,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_scale' },\n}, {\n 'id': 369,\n 'name': 'Relicanth',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 170,\n 'catchRate': 25,\n 'base': {\n 'hitpoints': 100,\n 'attack': 90,\n 'specialAttack': 45,\n 'defense': 130,\n 'specialDefense': 65,\n 'speed': 55,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_scale' },\n 'gender': {\n 'femaleRatio': 0.125,\n 'visualDifference': true,\n },\n}, {\n 'id': 370,\n 'name': 'Luvdisc',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 116,\n 'catchRate': 225,\n 'base': {\n 'hitpoints': 43,\n 'attack': 30,\n 'specialAttack': 40,\n 'defense': 55,\n 'specialDefense': 65,\n 'speed': 97,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Heart Scale' },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 371,\n 'name': 'Bagon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bagon', 'Shelgon', 30)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 75,\n 'specialAttack': 40,\n 'defense': 60,\n 'specialDefense': 30,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 372,\n 'name': 'Shelgon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Shelgon', 'Salamence', 50)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 95,\n 'specialAttack': 60,\n 'defense': 100,\n 'specialDefense': 50,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 373,\n 'name': 'Salamence',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Salamencite, 'Salamence', 'Mega Salamence')],\n 'base': {\n 'hitpoints': 95,\n 'attack': 135,\n 'specialAttack': 110,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 100,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Dragon_scale' },\n}, {\n 'id': 373.01,\n 'name': 'Mega Salamence',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 95,\n 'attack': 145,\n 'specialAttack': 120,\n 'defense': 130,\n 'specialDefense': 90,\n 'speed': 120,\n },\n}, {\n 'id': 374,\n 'name': 'Beldum',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Beldum', 'Metang', 20)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 55,\n 'specialAttack': 35,\n 'defense': 80,\n 'specialDefense': 60,\n 'speed': 30,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 375,\n 'name': 'Metang',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 147,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Metang', 'Metagross', 45)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 75,\n 'specialAttack': 55,\n 'defense': 100,\n 'specialDefense': 80,\n 'speed': 50,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 376,\n 'name': 'Metagross',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Metagrossite, 'Metagross', 'Mega Metagross')],\n 'base': {\n 'hitpoints': 80,\n 'attack': 135,\n 'specialAttack': 95,\n 'defense': 130,\n 'specialDefense': 90,\n 'speed': 70,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 376.01,\n 'name': 'Mega Metagross',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 145,\n 'specialAttack': 105,\n 'defense': 150,\n 'specialDefense': 110,\n 'speed': 110,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 377,\n 'name': 'Regirock',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 50,\n 'defense': 200,\n 'specialDefense': 100,\n 'speed': 50,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 378,\n 'name': 'Regice',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 50,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 200,\n 'speed': 50,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 379,\n 'name': 'Registeel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 75,\n 'specialAttack': 75,\n 'defense': 150,\n 'specialDefense': 150,\n 'speed': 50,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 380,\n 'name': 'Latias',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Latiasite, 'Latias', 'Mega Latias')],\n 'base': {\n 'hitpoints': 80,\n 'attack': 80,\n 'specialAttack': 110,\n 'defense': 90,\n 'specialDefense': 130,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Soul_Dew' },\n}, {\n 'id': 380.01,\n 'name': 'Mega Latias',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 140,\n 'defense': 120,\n 'specialDefense': 150,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 381,\n 'name': 'Latios',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Latiosite, 'Latios', 'Mega Latios')],\n 'base': {\n 'hitpoints': 80,\n 'attack': 90,\n 'specialAttack': 130,\n 'defense': 80,\n 'specialDefense': 110,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Soul_Dew' },\n}, {\n 'id': 381.01,\n 'name': 'Mega Latios',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 130,\n 'specialAttack': 160,\n 'defense': 100,\n 'specialDefense': 120,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 382,\n 'name': 'Kyogre',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 302,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Blue_Orb, 'Kyogre', 'Primal Kyogre')],\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 150,\n 'defense': 90,\n 'specialDefense': 140,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 382.01,\n 'name': 'Primal Kyogre',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 347,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 150,\n 'specialAttack': 180,\n 'defense': 90,\n 'specialDefense': 160,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 383,\n 'name': 'Groudon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 302,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Red_Orb, 'Groudon', 'Primal Groudon')],\n 'base': {\n 'hitpoints': 100,\n 'attack': 150,\n 'specialAttack': 100,\n 'defense': 140,\n 'specialDefense': 90,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 383.01,\n 'name': 'Primal Groudon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 347,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 180,\n 'specialAttack': 150,\n 'defense': 160,\n 'specialDefense': 90,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 383.02,\n 'name': 'Meta Groudon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 302,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 150,\n 'specialAttack': 100,\n 'defense': 140,\n 'specialDefense': 90,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 384,\n 'name': 'Rayquaza',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Meteorite, 'Rayquaza', 'Mega Rayquaza')],\n 'base': {\n 'hitpoints': 105,\n 'attack': 150,\n 'specialAttack': 150,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 384.01,\n 'name': 'Mega Rayquaza',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 351,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 105,\n 'attack': 180,\n 'specialAttack': 180,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 115,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 385,\n 'name': 'Jirachi',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Star Piece' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 386,\n 'name': 'Deoxys',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 50,\n 'attack': 150,\n 'specialAttack': 150,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 150,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 386.01,\n 'name': 'Deoxys (Attack)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 50,\n 'attack': 180,\n 'specialAttack': 180,\n 'defense': 20,\n 'specialDefense': 20,\n 'speed': 150,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 386.02,\n 'name': 'Deoxys (Defense)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 50,\n 'attack': 70,\n 'specialAttack': 70,\n 'defense': 160,\n 'specialDefense': 160,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 386.03,\n 'name': 'Deoxys (Speed)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 50,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 180,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 387,\n 'name': 'Turtwig',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'catchRate': 45,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Turtwig', 'Grotle', 18),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Turtwig', 'Grotle (Acorn)'),\n ],\n 'base': {\n 'hitpoints': 55,\n 'attack': 68,\n 'specialAttack': 45,\n 'defense': 64,\n 'specialDefense': 55,\n 'speed': 31,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 388,\n 'name': 'Grotle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Grotle', 'Torterra', 32)],\n 'base': {\n 'hitpoints': 75,\n 'attack': 89,\n 'specialAttack': 55,\n 'defense': 85,\n 'specialDefense': 65,\n 'speed': 36,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 388.01,\n 'name': 'Grotle (Acorn)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 89,\n 'specialAttack': 55,\n 'defense': 85,\n 'specialDefense': 65,\n 'speed': 36,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 389,\n 'name': 'Torterra',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 236,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 95,\n 'attack': 109,\n 'specialAttack': 75,\n 'defense': 105,\n 'specialDefense': 85,\n 'speed': 56,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 390,\n 'name': 'Chimchar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Chimchar', 'Monferno', 14)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 58,\n 'specialAttack': 58,\n 'defense': 44,\n 'specialDefense': 44,\n 'speed': 61,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 391,\n 'name': 'Monferno',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Monferno', 'Infernape', 36)],\n 'base': {\n 'hitpoints': 64,\n 'attack': 78,\n 'specialAttack': 78,\n 'defense': 52,\n 'specialDefense': 52,\n 'speed': 81,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 392,\n 'name': 'Infernape',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 240,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 76,\n 'attack': 104,\n 'specialAttack': 104,\n 'defense': 71,\n 'specialDefense': 71,\n 'speed': 108,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 393,\n 'name': 'Piplup',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 63,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Piplup', 'Prinplup', 16)],\n 'base': {\n 'hitpoints': 53,\n 'attack': 51,\n 'specialAttack': 61,\n 'defense': 53,\n 'specialDefense': 56,\n 'speed': 40,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 394,\n 'name': 'Prinplup',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Prinplup', 'Empoleon', 36)],\n 'base': {\n 'hitpoints': 64,\n 'attack': 66,\n 'specialAttack': 81,\n 'defense': 68,\n 'specialDefense': 76,\n 'speed': 50,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 395,\n 'name': 'Empoleon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 84,\n 'attack': 86,\n 'specialAttack': 111,\n 'defense': 88,\n 'specialDefense': 101,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 396,\n 'name': 'Starly',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 49,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Starly', 'Staravia', 14)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 55,\n 'specialAttack': 30,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 60,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 397,\n 'name': 'Staravia',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 119,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Staravia', 'Staraptor', 34)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 75,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 40,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 398,\n 'name': 'Staraptor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 218,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 85,\n 'attack': 120,\n 'specialAttack': 50,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 100,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 399,\n 'name': 'Bidoof',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 50,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bidoof', 'Bibarel', 15)],\n 'base': {\n 'hitpoints': 59,\n 'attack': 45,\n 'specialAttack': 35,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 31,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 400,\n 'name': 'Bibarel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 144,\n 'catchRate': 127,\n 'base': {\n 'hitpoints': 79,\n 'attack': 85,\n 'specialAttack': 55,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 71,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 401,\n 'name': 'Kricketot',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 39,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Kricketot', 'Kricketune', 10)],\n 'base': {\n 'hitpoints': 37,\n 'attack': 25,\n 'specialAttack': 25,\n 'defense': 41,\n 'specialDefense': 41,\n 'speed': 25,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 402,\n 'name': 'Kricketune',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 134,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 77,\n 'attack': 85,\n 'specialAttack': 55,\n 'defense': 51,\n 'specialDefense': 51,\n 'speed': 65,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 403,\n 'name': 'Shinx',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 53,\n 'catchRate': 235,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Shinx', 'Luxio', 15)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 65,\n 'specialAttack': 40,\n 'defense': 34,\n 'specialDefense': 34,\n 'speed': 45,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 404,\n 'name': 'Luxio',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 127,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Luxio', 'Luxray', 30)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 85,\n 'specialAttack': 60,\n 'defense': 49,\n 'specialDefense': 49,\n 'speed': 60,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 405,\n 'name': 'Luxray',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 235,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 95,\n 'defense': 79,\n 'specialDefense': 79,\n 'speed': 70,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 406,\n 'name': 'Budew',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedStoneEvolution)('Budew', 'Roselia', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 40,\n 'attack': 30,\n 'specialAttack': 50,\n 'defense': 35,\n 'specialDefense': 70,\n 'speed': 55,\n },\n}, {\n 'id': 407,\n 'name': 'Roserade',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 232,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 60,\n 'attack': 70,\n 'specialAttack': 125,\n 'defense': 65,\n 'specialDefense': 105,\n 'speed': 90,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 408,\n 'name': 'Cranidos',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 70,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cranidos', 'Rampardos', 30)],\n 'base': {\n 'hitpoints': 67,\n 'attack': 125,\n 'specialAttack': 30,\n 'defense': 40,\n 'specialDefense': 30,\n 'speed': 58,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 409,\n 'name': 'Rampardos',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 173,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 97,\n 'attack': 165,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 50,\n 'speed': 58,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 410,\n 'name': 'Shieldon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 70,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Shieldon', 'Bastiodon', 30)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 42,\n 'specialAttack': 42,\n 'defense': 118,\n 'specialDefense': 88,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 411,\n 'name': 'Bastiodon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 173,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 52,\n 'specialAttack': 47,\n 'defense': 168,\n 'specialDefense': 138,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 412,\n 'name': 'Burmy (Plant)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 45,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Burmy (Plant)', 'Wormadam (Plant)', 20),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Burmy (Plant)', 'Mothim', 20),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('SandyCloak', 'Burmy (Plant)', 'Burmy (Sand)', 1, true),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('TrashCloak', 'Burmy (Plant)', 'Burmy (Trash)', 1, true),\n ],\n 'base': {\n 'hitpoints': 40,\n 'attack': 29,\n 'specialAttack': 29,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 36,\n },\n}, {\n 'id': 412.01,\n 'name': 'Burmy (Sand)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 45,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Burmy (Sand)', 'Wormadam (Sand)', 20),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Burmy (Sand)', 'Mothim', 20),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('PlantCloak', 'Burmy (Sand)', 'Burmy (Plant)', 1, true),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('TrashCloak', 'Burmy (Sand)', 'Burmy (Trash)', 1, true),\n ],\n 'base': {\n 'hitpoints': 40,\n 'attack': 29,\n 'specialAttack': 29,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 36,\n },\n}, {\n 'id': 412.02,\n 'name': 'Burmy (Trash)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 45,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Burmy (Trash)', 'Wormadam (Trash)', 20),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Burmy (Trash)', 'Mothim', 20),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('PlantCloak', 'Burmy (Trash)', 'Burmy (Plant)', 1, true),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('SandyCloak', 'Burmy (Trash)', 'Burmy (Sand)', 1, true),\n ],\n 'base': {\n 'hitpoints': 40,\n 'attack': 29,\n 'specialAttack': 29,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 36,\n },\n}, {\n 'id': 412.03,\n 'name': 'Burmy (No Coat)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 45,\n 'catchRate': 120,\n 'base': {\n 'hitpoints': 40,\n 'attack': 29,\n 'specialAttack': 29,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 36,\n },\n}, {\n 'id': 413,\n 'name': 'Wormadam (Plant)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 148,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 59,\n 'specialAttack': 79,\n 'defense': 85,\n 'specialDefense': 105,\n 'speed': 36,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 413.01,\n 'name': 'Wormadam (Sand)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 148,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 79,\n 'specialAttack': 59,\n 'defense': 105,\n 'specialDefense': 85,\n 'speed': 36,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 413.02,\n 'name': 'Wormadam (Trash)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 148,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 69,\n 'specialAttack': 69,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 36,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 414,\n 'name': 'Mothim',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 148,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 94,\n 'specialAttack': 94,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 66,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 415,\n 'name': 'Combee',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 49,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Combee', 'Vespiquen', 21)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 30,\n 'specialAttack': 30,\n 'defense': 42,\n 'specialDefense': 42,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n 'visualDifference': true,\n },\n}, {\n 'id': 416,\n 'name': 'Vespiquen',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 166,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 80,\n 'specialAttack': 80,\n 'defense': 102,\n 'specialDefense': 102,\n 'speed': 40,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 417,\n 'name': 'Pachirisu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 142,\n 'catchRate': 200,\n 'base': {\n 'hitpoints': 60,\n 'attack': 45,\n 'specialAttack': 45,\n 'defense': 70,\n 'specialDefense': 90,\n 'speed': 95,\n },\n 'gender': {\n 'visualDifference': true,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rare_Candy' },\n}, {\n 'id': 418,\n 'name': 'Buizel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Buizel', 'Floatzel', 26)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 65,\n 'specialAttack': 60,\n 'defense': 35,\n 'specialDefense': 30,\n 'speed': 85,\n },\n}, {\n 'id': 419,\n 'name': 'Floatzel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 85,\n 'attack': 105,\n 'specialAttack': 85,\n 'defense': 55,\n 'specialDefense': 50,\n 'speed': 115,\n },\n}, {\n 'id': 420,\n 'name': 'Cherubi',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 55,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cherubi', 'Cherrim (Overcast)', 25), (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Cherubi', 'Cherrim (Sunshine)')],\n 'base': {\n 'hitpoints': 45,\n 'attack': 35,\n 'specialAttack': 62,\n 'defense': 45,\n 'specialDefense': 53,\n 'speed': 35,\n },\n}, {\n 'id': 421,\n 'name': 'Cherrim (Overcast)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'catchRate': 75,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.WeatherRestrictedLevelEvolution)([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Harsh_Sunlight], 'Cherrim (Overcast)', 'Cherrim (Sunshine)', 1, true)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 60,\n 'specialAttack': 87,\n 'defense': 70,\n 'specialDefense': 78,\n 'speed': 85,\n },\n}, {\n 'id': 421.01,\n 'name': 'Cherrim (Sunshine)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 60,\n 'specialAttack': 87,\n 'defense': 70,\n 'specialDefense': 78,\n 'speed': 85,\n },\n}, {\n 'id': 422,\n 'name': 'Shellos (West)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Shellos (West)', 'Gastrodon (West)', 30)],\n 'base': {\n 'hitpoints': 76,\n 'attack': 48,\n 'specialAttack': 57,\n 'defense': 48,\n 'specialDefense': 62,\n 'speed': 34,\n },\n}, {\n 'id': 422.01,\n 'name': 'Shellos (East)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Shellos (East)', 'Gastrodon (East)', 30)],\n 'base': {\n 'hitpoints': 76,\n 'attack': 48,\n 'specialAttack': 57,\n 'defense': 48,\n 'specialDefense': 62,\n 'speed': 34,\n },\n}, {\n 'id': 423,\n 'name': 'Gastrodon (West)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 111,\n 'attack': 83,\n 'specialAttack': 92,\n 'defense': 68,\n 'specialDefense': 82,\n 'speed': 39,\n },\n}, {\n 'id': 423.01,\n 'name': 'Gastrodon (East)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 111,\n 'attack': 83,\n 'specialAttack': 92,\n 'defense': 68,\n 'specialDefense': 82,\n 'speed': 39,\n },\n}, {\n 'id': 424,\n 'name': 'Ambipom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 169,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 100,\n 'specialAttack': 60,\n 'defense': 66,\n 'specialDefense': 66,\n 'speed': 115,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 425,\n 'name': 'Drifloon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 70,\n 'catchRate': 125,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Drifloon', 'Drifblim', 28)],\n 'base': {\n 'hitpoints': 90,\n 'attack': 50,\n 'specialAttack': 60,\n 'defense': 34,\n 'specialDefense': 44,\n 'speed': 70,\n },\n}, {\n 'id': 426,\n 'name': 'Drifblim',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fluctuating,\n 'exp': 174,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 150,\n 'attack': 80,\n 'specialAttack': 90,\n 'defense': 44,\n 'specialDefense': 54,\n 'speed': 80,\n },\n}, {\n 'id': 427,\n 'name': 'Buneary',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 70,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Buneary', 'Lopunny', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 66,\n 'specialAttack': 44,\n 'defense': 44,\n 'specialDefense': 56,\n 'speed': 85,\n },\n}, {\n 'id': 428,\n 'name': 'Lopunny',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 60,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Lopunnite, 'Lopunny', 'Mega Lopunny')],\n 'base': {\n 'hitpoints': 65,\n 'attack': 76,\n 'specialAttack': 54,\n 'defense': 84,\n 'specialDefense': 96,\n 'speed': 105,\n },\n}, {\n 'id': 428.01,\n 'name': 'Mega Lopunny',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 347,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 65,\n 'attack': 136,\n 'specialAttack': 54,\n 'defense': 94,\n 'specialDefense': 96,\n 'speed': 135,\n },\n}, {\n 'id': 429,\n 'name': 'Mismagius',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 173,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 105,\n 'defense': 60,\n 'specialDefense': 105,\n 'speed': 105,\n },\n}, {\n 'id': 429.01,\n 'name': 'Mismagius (Illusion)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 173,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 105,\n 'defense': 60,\n 'specialDefense': 105,\n 'speed': 105,\n },\n}, {\n 'id': 430,\n 'name': 'Honchkrow',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 177,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 100,\n 'attack': 125,\n 'specialAttack': 105,\n 'defense': 52,\n 'specialDefense': 52,\n 'speed': 71,\n },\n}, {\n 'id': 431,\n 'name': 'Glameow',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 62,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Glameow', 'Purugly', 38)],\n 'base': {\n 'hitpoints': 49,\n 'attack': 55,\n 'specialAttack': 42,\n 'defense': 42,\n 'specialDefense': 37,\n 'speed': 85,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 432,\n 'name': 'Purugly',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 158,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 71,\n 'attack': 82,\n 'specialAttack': 64,\n 'defense': 64,\n 'specialDefense': 59,\n 'speed': 112,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 433,\n 'name': 'Chingling',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 57,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedStoneEvolution)('Chingling', 'Chimecho', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 45,\n 'attack': 30,\n 'specialAttack': 65,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 45,\n },\n}, {\n 'id': 434,\n 'name': 'Stunky',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Stunky', 'Skuntank', 34)],\n 'base': {\n 'hitpoints': 63,\n 'attack': 63,\n 'specialAttack': 41,\n 'defense': 47,\n 'specialDefense': 41,\n 'speed': 74,\n },\n}, {\n 'id': 435,\n 'name': 'Skuntank',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 103,\n 'attack': 93,\n 'specialAttack': 71,\n 'defense': 67,\n 'specialDefense': 61,\n 'speed': 84,\n },\n}, {\n 'id': 436,\n 'name': 'Bronzor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bronzor', 'Bronzong', 33)],\n 'base': {\n 'hitpoints': 57,\n 'attack': 24,\n 'specialAttack': 24,\n 'defense': 86,\n 'specialDefense': 86,\n 'speed': 23,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 437,\n 'name': 'Bronzong',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 67,\n 'attack': 89,\n 'specialAttack': 79,\n 'defense': 116,\n 'specialDefense': 116,\n 'speed': 33,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 438,\n 'name': 'Bonsly',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'catchRate': 255,\n 'evolutions': [\n // Evolves when leveled up while knowing Mimic\n // Learns mimic at level 16\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bonsly', 'Sudowoodo', 32),\n ],\n 'baby': true,\n 'base': {\n 'hitpoints': 50,\n 'attack': 80,\n 'specialAttack': 10,\n 'defense': 95,\n 'specialDefense': 45,\n 'speed': 10,\n },\n}, {\n 'id': 439,\n 'name': 'Mime Jr.',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 62,\n 'catchRate': 145,\n 'evolutions': [\n // Evolves when leveled up while knowing Mimic\n // Learns mimic at level 32\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionLevelEvolution)(allButGalar, 'Mime Jr.', 'Mr. Mime', 32),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionLevelEvolution)(galarOnly, 'Mime Jr.', 'Galarian Mr. Mime', 32),\n ],\n 'baby': true,\n 'base': {\n 'hitpoints': 20,\n 'attack': 25,\n 'specialAttack': 70,\n 'defense': 45,\n 'specialDefense': 90,\n 'speed': 60,\n },\n}, {\n 'id': 440,\n 'name': 'Happiny',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 110,\n 'catchRate': 130,\n 'evolutions': [\n // TODO: Evolves while holding an Oval Stone during the Day time\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Happiny', 'Chansey'),\n ],\n 'baby': true,\n 'base': {\n 'hitpoints': 100,\n 'attack': 5,\n 'specialAttack': 15,\n 'defense': 5,\n 'specialDefense': 65,\n 'speed': 30,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Oval Stone' },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 440.01,\n 'name': 'Handout Happiny',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 110,\n 'catchRate': 130,\n 'evolutions': [\n // TODO: Evolves while holding an Oval Stone during the Day time\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Handout Happiny', 'Charity Chansey'),\n ],\n 'baby': true,\n 'base': {\n 'hitpoints': 100,\n 'attack': 5,\n 'specialAttack': 15,\n 'defense': 5,\n 'specialDefense': 65,\n 'speed': 30,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Oval Stone' },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 441,\n 'name': 'Chatot',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 144,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 76,\n 'attack': 65,\n 'specialAttack': 92,\n 'defense': 45,\n 'specialDefense': 42,\n 'speed': 91,\n },\n}, {\n 'id': 442,\n 'name': 'Spiritomb',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 100,\n 'base': {\n 'hitpoints': 50,\n 'attack': 92,\n 'specialAttack': 92,\n 'defense': 108,\n 'specialDefense': 108,\n 'speed': 35,\n },\n}, {\n 'id': 443,\n 'name': 'Gible',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Gible', 'Gabite', 24)],\n 'base': {\n 'hitpoints': 58,\n 'attack': 70,\n 'specialAttack': 40,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 42,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 444,\n 'name': 'Gabite',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 144,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Gabite', 'Garchomp', 48)],\n 'base': {\n 'hitpoints': 68,\n 'attack': 90,\n 'specialAttack': 50,\n 'defense': 65,\n 'specialDefense': 55,\n 'speed': 82,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 445,\n 'name': 'Garchomp',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Garchompite, 'Garchomp', 'Mega Garchomp')],\n 'base': {\n 'hitpoints': 108,\n 'attack': 130,\n 'specialAttack': 80,\n 'defense': 95,\n 'specialDefense': 85,\n 'speed': 102,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 445.01,\n 'name': 'Mega Garchomp',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 347,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 108,\n 'attack': 170,\n 'specialAttack': 120,\n 'defense': 115,\n 'specialDefense': 95,\n 'speed': 92,\n },\n}, {\n 'id': 446,\n 'name': 'Munchlax',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 78,\n 'catchRate': 50,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Munchlax', 'Snorlax', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Munchlax', 'Gigantamax Snorlax'),\n ],\n 'baby': true,\n 'base': {\n 'hitpoints': 135,\n 'attack': 85,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 85,\n 'speed': 5,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 446.01,\n 'name': 'Elf Munchlax',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 32,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 78,\n 'catchRate': 50,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Elf Munchlax', 'Santa Snorlax', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell, true)],\n 'base': {\n 'hitpoints': 135,\n 'attack': 85,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 85,\n 'speed': 5,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 447,\n 'name': 'Riolu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 57,\n 'catchRate': 75,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedStoneEvolution)('Riolu', 'Lucario', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'baby': true,\n 'base': {\n 'hitpoints': 40,\n 'attack': 70,\n 'specialAttack': 35,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 448,\n 'name': 'Lucario',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 184,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Lucarionite, 'Lucario', 'Mega Lucario')],\n 'base': {\n 'hitpoints': 70,\n 'attack': 110,\n 'specialAttack': 115,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 448.01,\n 'name': 'Mega Lucario',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 347,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 145,\n 'specialAttack': 140,\n 'defense': 88,\n 'specialDefense': 70,\n 'speed': 112,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 449,\n 'name': 'Hippopotas',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 66,\n 'catchRate': 140,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Hippopotas', 'Hippowdon', 34)],\n 'base': {\n 'hitpoints': 68,\n 'attack': 72,\n 'specialAttack': 38,\n 'defense': 78,\n 'specialDefense': 42,\n 'speed': 32,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 450,\n 'name': 'Hippowdon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 184,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 108,\n 'attack': 112,\n 'specialAttack': 68,\n 'defense': 118,\n 'specialDefense': 72,\n 'speed': 47,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 451,\n 'name': 'Skorupi',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 66,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Skorupi', 'Drapion', 40)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 50,\n 'specialAttack': 30,\n 'defense': 90,\n 'specialDefense': 55,\n 'speed': 65,\n },\n}, {\n 'id': 452,\n 'name': 'Drapion',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 175,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 90,\n 'specialAttack': 60,\n 'defense': 110,\n 'specialDefense': 75,\n 'speed': 95,\n },\n}, {\n 'id': 453,\n 'name': 'Croagunk',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'catchRate': 140,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Croagunk', 'Toxicroak', 37)],\n 'base': {\n 'hitpoints': 48,\n 'attack': 61,\n 'specialAttack': 61,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 50,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 454,\n 'name': 'Toxicroak',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 83,\n 'attack': 106,\n 'specialAttack': 86,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 85,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 455,\n 'name': 'Carnivine',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 159,\n 'catchRate': 200,\n 'base': {\n 'hitpoints': 74,\n 'attack': 100,\n 'specialAttack': 90,\n 'defense': 72,\n 'specialDefense': 72,\n 'speed': 46,\n },\n}, {\n 'id': 456,\n 'name': 'Finneon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 66,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Finneon', 'Lumineon', 31)],\n 'base': {\n 'hitpoints': 49,\n 'attack': 49,\n 'specialAttack': 49,\n 'defense': 56,\n 'specialDefense': 61,\n 'speed': 66,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 457,\n 'name': 'Lumineon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 161,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 69,\n 'attack': 69,\n 'specialAttack': 69,\n 'defense': 76,\n 'specialDefense': 86,\n 'speed': 91,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 458,\n 'name': 'Mantyke',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 69,\n 'catchRate': 25,\n 'evolutions': [\n // TODO: Evolves when leveled up with a Remoraid in the party\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Mantyke', 'Mantine'),\n ],\n 'baby': true,\n 'base': {\n 'hitpoints': 45,\n 'attack': 20,\n 'specialAttack': 60,\n 'defense': 50,\n 'specialDefense': 120,\n 'speed': 50,\n },\n}, {\n 'id': 459,\n 'name': 'Snover',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 67,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Snover', 'Abomasnow', 40)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 62,\n 'specialAttack': 62,\n 'defense': 50,\n 'specialDefense': 60,\n 'speed': 40,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 459.01,\n 'name': 'Snover (Berry)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 67,\n 'catchRate': 120,\n 'base': {\n 'hitpoints': 60,\n 'attack': 62,\n 'specialAttack': 62,\n 'defense': 50,\n 'specialDefense': 60,\n 'speed': 40,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].berry, id: _enums_BerryType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Snover },\n}, {\n 'id': 460,\n 'name': 'Abomasnow',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 173,\n 'catchRate': 60,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Abomasite, 'Abomasnow', 'Mega Abomasnow')],\n 'base': {\n 'hitpoints': 90,\n 'attack': 92,\n 'specialAttack': 92,\n 'defense': 75,\n 'specialDefense': 85,\n 'speed': 60,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 460.01,\n 'name': 'Mega Abomasnow',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 347,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 90,\n 'attack': 132,\n 'specialAttack': 132,\n 'defense': 105,\n 'specialDefense': 105,\n 'speed': 30,\n },\n}, {\n 'id': 461,\n 'name': 'Weavile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 179,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 70,\n 'attack': 120,\n 'specialAttack': 45,\n 'defense': 65,\n 'specialDefense': 85,\n 'speed': 125,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 462,\n 'name': 'Magnezone',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 241,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 70,\n 'attack': 70,\n 'specialAttack': 130,\n 'defense': 115,\n 'specialDefense': 90,\n 'speed': 60,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Metal_coat' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 463,\n 'name': 'Lickilicky',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 180,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 110,\n 'attack': 85,\n 'specialAttack': 80,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 50,\n },\n}, {\n 'id': 464,\n 'name': 'Rhyperior',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 241,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 115,\n 'attack': 140,\n 'specialAttack': 55,\n 'defense': 130,\n 'specialDefense': 55,\n 'speed': 40,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 465,\n 'name': 'Tangrowth',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 187,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 110,\n 'defense': 125,\n 'specialDefense': 50,\n 'speed': 50,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 466,\n 'name': 'Electivire',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 243,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 75,\n 'attack': 123,\n 'specialAttack': 95,\n 'defense': 67,\n 'specialDefense': 85,\n 'speed': 95,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Electirizer' },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 467,\n 'name': 'Magmortar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 243,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 75,\n 'attack': 95,\n 'specialAttack': 125,\n 'defense': 67,\n 'specialDefense': 95,\n 'speed': 83,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Magmarizer' },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 468,\n 'name': 'Togekiss',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 245,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 85,\n 'attack': 50,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 115,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 468.01,\n 'name': 'Spooky Togekiss',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 245,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 85,\n 'attack': 50,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 115,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 469,\n 'name': 'Yanmega',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 180,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 86,\n 'attack': 76,\n 'specialAttack': 116,\n 'defense': 86,\n 'specialDefense': 56,\n 'speed': 95,\n },\n}, {\n 'id': 470,\n 'name': 'Leafeon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 65,\n 'attack': 110,\n 'specialAttack': 60,\n 'defense': 130,\n 'specialDefense': 65,\n 'speed': 95,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 471,\n 'name': 'Glaceon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 130,\n 'defense': 110,\n 'specialDefense': 95,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 472,\n 'name': 'Gliscor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 179,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 75,\n 'attack': 95,\n 'specialAttack': 45,\n 'defense': 125,\n 'specialDefense': 75,\n 'speed': 95,\n },\n}, {\n 'id': 473,\n 'name': 'Mamoswine',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 239,\n 'catchRate': 50,\n 'base': {\n 'hitpoints': 110,\n 'attack': 130,\n 'specialAttack': 70,\n 'defense': 80,\n 'specialDefense': 60,\n 'speed': 80,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 474,\n 'name': 'Porygon-Z',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 241,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 85,\n 'attack': 80,\n 'specialAttack': 135,\n 'defense': 70,\n 'specialDefense': 75,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 475,\n 'name': 'Gallade',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 233,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Galladite, 'Gallade', 'Mega Gallade')],\n 'base': {\n 'hitpoints': 68,\n 'attack': 125,\n 'specialAttack': 65,\n 'defense': 65,\n 'specialDefense': 115,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 475.01,\n 'name': 'Mega Gallade',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 347,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 68,\n 'attack': 165,\n 'specialAttack': 65,\n 'defense': 95,\n 'specialDefense': 115,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 476,\n 'name': 'Probopass',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 60,\n 'attack': 55,\n 'specialAttack': 75,\n 'defense': 145,\n 'specialDefense': 150,\n 'speed': 40,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Hard Stone' },\n}, {\n 'id': 477,\n 'name': 'Dusknoir',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 236,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 45,\n 'attack': 100,\n 'specialAttack': 65,\n 'defense': 135,\n 'specialDefense': 135,\n 'speed': 45,\n },\n}, {\n 'id': 478,\n 'name': 'Froslass',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 80,\n 'specialAttack': 80,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 479,\n 'name': 'Rotom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 50,\n 'specialAttack': 95,\n 'defense': 77,\n 'specialDefense': 77,\n 'speed': 91,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 479.01,\n 'name': 'Rotom (Heat)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 105,\n 'defense': 107,\n 'specialDefense': 107,\n 'speed': 86,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 479.02,\n 'name': 'Rotom (Wash)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 105,\n 'defense': 107,\n 'specialDefense': 107,\n 'speed': 86,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 479.03,\n 'name': 'Rotom (Frost)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 105,\n 'defense': 107,\n 'specialDefense': 107,\n 'speed': 86,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 479.04,\n 'name': 'Rotom (Fan)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 105,\n 'defense': 107,\n 'specialDefense': 107,\n 'speed': 86,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 479.05,\n 'name': 'Rotom (Mow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 105,\n 'defense': 107,\n 'specialDefense': 107,\n 'speed': 86,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 479.06,\n 'name': 'Rotom (Discord)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 105,\n 'defense': 107,\n 'specialDefense': 107,\n 'speed': 86,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 480,\n 'name': 'Uxie',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 75,\n 'attack': 75,\n 'specialAttack': 75,\n 'defense': 130,\n 'specialDefense': 130,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 481,\n 'name': 'Mesprit',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 105,\n 'specialAttack': 105,\n 'defense': 105,\n 'specialDefense': 105,\n 'speed': 80,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 482,\n 'name': 'Azelf',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 75,\n 'attack': 125,\n 'specialAttack': 125,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 115,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 483,\n 'name': 'Dialga',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 3,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Adamant_Orb' },\n 'base': {\n 'hitpoints': 100,\n 'attack': 120,\n 'specialAttack': 150,\n 'defense': 120,\n 'specialDefense': 100,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 483.01,\n 'name': 'Dialga (Origin)',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 3,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Adamant_Orb' },\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 150,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 90,\n },\n}, {\n 'id': 484,\n 'name': 'Palkia',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 3,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Lustrous_Orb' },\n 'base': {\n 'hitpoints': 90,\n 'attack': 120,\n 'specialAttack': 150,\n 'defense': 100,\n 'specialDefense': 120,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 484.01,\n 'name': 'Palkia (Origin)',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 3,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Lustrous_Orb' },\n 'base': {\n 'hitpoints': 90,\n 'attack': 100,\n 'specialAttack': 150,\n 'defense': 100,\n 'specialDefense': 120,\n 'speed': 120,\n },\n}, {\n 'id': 485,\n 'name': 'Heatran',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 91,\n 'attack': 90,\n 'specialAttack': 130,\n 'defense': 106,\n 'specialDefense': 106,\n 'speed': 77,\n },\n}, {\n 'id': 486,\n 'name': 'Regigigas',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 302,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 110,\n 'attack': 160,\n 'specialAttack': 80,\n 'defense': 110,\n 'specialDefense': 110,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 487,\n 'name': 'Giratina (Altered)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Griseous_Orb', 'Giratina (Altered)', 'Giratina (Origin)', 70)],\n 'base': {\n 'hitpoints': 150,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Griseous_Orb' },\n}, {\n 'id': 487.01,\n 'name': 'Giratina (Origin)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 150,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Griseous_Orb' },\n}, {\n 'id': 488,\n 'name': 'Cresselia',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 70,\n 'specialAttack': 75,\n 'defense': 110,\n 'specialDefense': 120,\n 'speed': 85,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 489,\n 'name': 'Phione',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 216,\n // evolution needed for baby form to be obtainable\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Phione', 'Manaphy')],\n 'baby': true,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 80,\n 'attack': 80,\n 'specialAttack': 80,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 80,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 490,\n 'name': 'Manaphy',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 491,\n 'name': 'Darkrai',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 70,\n 'attack': 90,\n 'specialAttack': 135,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 125,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 492,\n 'name': 'Shaymin (Land)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 270,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].berry, id: _enums_BerryType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Lum },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 492.01,\n 'name': 'Shaymin (Sky)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 270,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 100,\n 'attack': 103,\n 'specialAttack': 120,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 127,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].berry, id: _enums_BerryType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Lum },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493,\n 'name': 'Arceus (Normal)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.01,\n 'name': 'Arceus (Fire)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.02,\n 'name': 'Arceus (Water)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.03,\n 'name': 'Arceus (Electric)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.04,\n 'name': 'Arceus (Grass)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.05,\n 'name': 'Arceus (Ice)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.06,\n 'name': 'Arceus (Fighting)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.07,\n 'name': 'Arceus (Poison)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.08,\n 'name': 'Arceus (Ground)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.09,\n 'name': 'Arceus (Flying)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.10,\n 'name': 'Arceus (Psychic)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.11,\n 'name': 'Arceus (Bug)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.12,\n 'name': 'Arceus (Rock)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.13,\n 'name': 'Arceus (Ghost)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.14,\n 'name': 'Arceus (Dragon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.15,\n 'name': 'Arceus (Dark)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.16,\n 'name': 'Arceus (Steel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 493.17,\n 'name': 'Arceus (Fairy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 324,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 120,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 120,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 494,\n 'name': 'Victini',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 100,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 495,\n 'name': 'Snivy',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Snivy', 'Servine', 17)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 45,\n 'specialAttack': 45,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 63,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 496,\n 'name': 'Servine',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 145,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Servine', 'Serperior', 36)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 60,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 83,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 497,\n 'name': 'Serperior',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 238,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 75,\n 'specialAttack': 75,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 113,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 498,\n 'name': 'Tepig',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tepig', 'Pignite', 17)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 63,\n 'specialAttack': 45,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 499,\n 'name': 'Pignite',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 146,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pignite', 'Emboar', 36)],\n 'base': {\n 'hitpoints': 90,\n 'attack': 93,\n 'specialAttack': 70,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 500,\n 'name': 'Emboar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 238,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 110,\n 'attack': 123,\n 'specialAttack': 100,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 501,\n 'name': 'Oshawott',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Oshawott', 'Dewott', 17)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 55,\n 'specialAttack': 63,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 502,\n 'name': 'Dewott',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 145,\n 'catchRate': 45,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dewott', 'Samurott', 36),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dewott', 'Hisuian Samurott', 36),\n ],\n 'base': {\n 'hitpoints': 75,\n 'attack': 75,\n 'specialAttack': 83,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 503,\n 'name': 'Samurott',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 238,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 95,\n 'attack': 100,\n 'specialAttack': 108,\n 'defense': 85,\n 'specialDefense': 70,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 503.01,\n 'name': 'Hisuian Samurott',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 238,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 90,\n 'attack': 108,\n 'specialAttack': 100,\n 'defense': 80,\n 'specialDefense': 65,\n 'speed': 85,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 504,\n 'name': 'Patrat',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 51,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Patrat', 'Watchog', 20)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 55,\n 'specialAttack': 35,\n 'defense': 39,\n 'specialDefense': 39,\n 'speed': 42,\n },\n}, {\n 'id': 505,\n 'name': 'Watchog',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 147,\n 'catchRate': 255,\n 'base': {\n 'hitpoints': 60,\n 'attack': 85,\n 'specialAttack': 60,\n 'defense': 69,\n 'specialDefense': 69,\n 'speed': 77,\n },\n}, {\n 'id': 506,\n 'name': 'Lillipup',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 55,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Lillipup', 'Herdier', 16)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 60,\n 'specialAttack': 25,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 55,\n },\n}, {\n 'id': 507,\n 'name': 'Herdier',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 130,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Herdier', 'Stoutland', 32)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 80,\n 'specialAttack': 35,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 60,\n },\n}, {\n 'id': 508,\n 'name': 'Stoutland',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 225,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 85,\n 'attack': 110,\n 'specialAttack': 45,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 80,\n },\n}, {\n 'id': 509,\n 'name': 'Purrloin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Purrloin', 'Liepard', 20)],\n 'base': {\n 'hitpoints': 41,\n 'attack': 50,\n 'specialAttack': 50,\n 'defense': 37,\n 'specialDefense': 37,\n 'speed': 66,\n },\n}, {\n 'id': 510,\n 'name': 'Liepard',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 156,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 64,\n 'attack': 88,\n 'specialAttack': 88,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 106,\n },\n}, {\n 'id': 511,\n 'name': 'Pansage',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 63,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Pansage', 'Simisage', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaf_stone)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 53,\n 'specialAttack': 53,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 64,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 512,\n 'name': 'Simisage',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 174,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 75,\n 'attack': 98,\n 'specialAttack': 98,\n 'defense': 63,\n 'specialDefense': 63,\n 'speed': 101,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 513,\n 'name': 'Pansear',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 63,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Pansear', 'Simisear', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Fire_stone)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 53,\n 'specialAttack': 53,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 64,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 514,\n 'name': 'Simisear',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 174,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 75,\n 'attack': 98,\n 'specialAttack': 98,\n 'defense': 63,\n 'specialDefense': 63,\n 'speed': 101,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 515,\n 'name': 'Panpour',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 63,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Panpour', 'Simipour', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Water_stone)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 53,\n 'specialAttack': 53,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 64,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 516,\n 'name': 'Simipour',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 174,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 75,\n 'attack': 98,\n 'specialAttack': 98,\n 'defense': 63,\n 'specialDefense': 63,\n 'speed': 101,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 517,\n 'name': 'Munna',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 58,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Munna', 'Musharna', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Moon_stone)],\n 'base': {\n 'hitpoints': 76,\n 'attack': 25,\n 'specialAttack': 67,\n 'defense': 45,\n 'specialDefense': 55,\n 'speed': 24,\n },\n}, {\n 'id': 518,\n 'name': 'Musharna',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 170,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 116,\n 'attack': 55,\n 'specialAttack': 107,\n 'defense': 85,\n 'specialDefense': 95,\n 'speed': 29,\n },\n}, {\n 'id': 519,\n 'name': 'Pidove',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 53,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pidove', 'Tranquill', 21)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 55,\n 'specialAttack': 36,\n 'defense': 50,\n 'specialDefense': 30,\n 'speed': 43,\n },\n}, {\n 'id': 520,\n 'name': 'Tranquill',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 125,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tranquill', 'Unfezant', 32)],\n 'base': {\n 'hitpoints': 62,\n 'attack': 77,\n 'specialAttack': 50,\n 'defense': 62,\n 'specialDefense': 42,\n 'speed': 65,\n },\n}, {\n 'id': 521,\n 'name': 'Unfezant',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 220,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 115,\n 'specialAttack': 65,\n 'defense': 80,\n 'specialDefense': 55,\n 'speed': 93,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 522,\n 'name': 'Blitzle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 59,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Blitzle', 'Zebstrika', 27)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 60,\n 'specialAttack': 50,\n 'defense': 32,\n 'specialDefense': 32,\n 'speed': 76,\n },\n}, {\n 'id': 523,\n 'name': 'Zebstrika',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 174,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 75,\n 'attack': 100,\n 'specialAttack': 80,\n 'defense': 63,\n 'specialDefense': 63,\n 'speed': 116,\n },\n}, {\n 'id': 524,\n 'name': 'Roggenrola',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Roggenrola', 'Boldore', 25)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 75,\n 'specialAttack': 25,\n 'defense': 85,\n 'specialDefense': 25,\n 'speed': 15,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Everstone' },\n}, {\n 'id': 525,\n 'name': 'Boldore',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 137,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Boldore', 'Gigalith', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 105,\n 'specialAttack': 50,\n 'defense': 105,\n 'specialDefense': 40,\n 'speed': 20,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Everstone' },\n}, {\n 'id': 526,\n 'name': 'Gigalith',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 232,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 85,\n 'attack': 135,\n 'specialAttack': 60,\n 'defense': 130,\n 'specialDefense': 80,\n 'speed': 25,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Everstone' },\n}, {\n 'id': 527,\n 'name': 'Woobat',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Woobat', 'Swoobat', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 45,\n 'specialAttack': 55,\n 'defense': 43,\n 'specialDefense': 43,\n 'speed': 72,\n },\n}, {\n 'id': 528,\n 'name': 'Swoobat',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 149,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 67,\n 'attack': 57,\n 'specialAttack': 77,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 114,\n },\n}, {\n 'id': 529,\n 'name': 'Drilbur',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Drilbur', 'Excadrill', 31)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 85,\n 'specialAttack': 30,\n 'defense': 40,\n 'specialDefense': 45,\n 'speed': 68,\n },\n}, {\n 'id': 530,\n 'name': 'Excadrill',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 110,\n 'attack': 135,\n 'specialAttack': 50,\n 'defense': 60,\n 'specialDefense': 65,\n 'speed': 88,\n },\n}, {\n 'id': 531,\n 'name': 'Audino',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 390,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Audinite, 'Audino', 'Mega Audino')],\n 'base': {\n 'hitpoints': 103,\n 'attack': 60,\n 'specialAttack': 60,\n 'defense': 86,\n 'specialDefense': 86,\n 'speed': 50,\n },\n}, {\n 'id': 531.01,\n 'name': 'Mega Audino',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 390,\n 'catchRate': 255,\n 'base': {\n 'hitpoints': 103,\n 'attack': 60,\n 'specialAttack': 80,\n 'defense': 126,\n 'specialDefense': 126,\n 'speed': 50,\n },\n}, {\n 'id': 532,\n 'name': 'Timburr',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 61,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Timburr', 'Gurdurr', 25)],\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 25,\n 'defense': 55,\n 'specialDefense': 35,\n 'speed': 35,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 533,\n 'name': 'Gurdurr',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Gurdurr', 'Conkeldurr', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 85,\n 'attack': 105,\n 'specialAttack': 40,\n 'defense': 85,\n 'specialDefense': 50,\n 'speed': 40,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 534,\n 'name': 'Conkeldurr',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 227,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 105,\n 'attack': 140,\n 'specialAttack': 55,\n 'defense': 95,\n 'specialDefense': 65,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.25,\n },\n}, {\n 'id': 535,\n 'name': 'Tympole',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 59,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tympole', 'Palpitoad', 25)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 50,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 64,\n },\n}, {\n 'id': 536,\n 'name': 'Palpitoad',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 134,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Palpitoad', 'Seismitoad', 36)],\n 'base': {\n 'hitpoints': 75,\n 'attack': 65,\n 'specialAttack': 65,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 69,\n },\n}, {\n 'id': 537,\n 'name': 'Seismitoad',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 229,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 105,\n 'attack': 95,\n 'specialAttack': 85,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 74,\n },\n}, {\n 'id': 538,\n 'name': 'Throh',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 163,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 120,\n 'attack': 100,\n 'specialAttack': 30,\n 'defense': 85,\n 'specialDefense': 85,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 539,\n 'name': 'Sawk',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 163,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 125,\n 'specialAttack': 30,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 85,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 540,\n 'name': 'Sewaddle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sewaddle', 'Swadloon', 20)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 53,\n 'specialAttack': 40,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 42,\n },\n}, {\n 'id': 541,\n 'name': 'Swadloon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 133,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Swadloon', 'Leavanny', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 63,\n 'specialAttack': 50,\n 'defense': 90,\n 'specialDefense': 80,\n 'speed': 42,\n },\n}, {\n 'id': 542,\n 'name': 'Leavanny',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 225,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 103,\n 'specialAttack': 70,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 92,\n },\n}, {\n 'id': 543,\n 'name': 'Venipede',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 52,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Venipede', 'Whirlipede', 22)],\n 'base': {\n 'hitpoints': 30,\n 'attack': 45,\n 'specialAttack': 30,\n 'defense': 59,\n 'specialDefense': 39,\n 'speed': 57,\n },\n}, {\n 'id': 544,\n 'name': 'Whirlipede',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 126,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Whirlipede', 'Scolipede', 30)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 55,\n 'specialAttack': 40,\n 'defense': 99,\n 'specialDefense': 79,\n 'speed': 47,\n },\n}, {\n 'id': 545,\n 'name': 'Scolipede',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 218,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 55,\n 'defense': 89,\n 'specialDefense': 69,\n 'speed': 112,\n },\n}, {\n 'id': 546,\n 'name': 'Cottonee',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Cottonee', 'Whimsicott', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Sun_stone)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 27,\n 'specialAttack': 37,\n 'defense': 60,\n 'specialDefense': 50,\n 'speed': 66,\n },\n}, {\n 'id': 547,\n 'name': 'Whimsicott',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 60,\n 'attack': 67,\n 'specialAttack': 77,\n 'defense': 85,\n 'specialDefense': 75,\n 'speed': 116,\n },\n}, {\n 'id': 548,\n 'name': 'Petilil',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 190,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(allButHisui, 'Petilil', 'Lilligant', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Sun_stone),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(hisuiOnly, 'Petilil', 'Hisuian Lilligant', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Sun_stone),\n ],\n 'base': {\n 'hitpoints': 45,\n 'attack': 35,\n 'specialAttack': 70,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 30,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 549,\n 'name': 'Lilligant',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 549.01,\n 'name': 'Hisuian Lilligant',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 105,\n 'specialAttack': 50,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 105,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 549.02,\n 'name': 'Noble Lilligant',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 105,\n 'specialAttack': 50,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 105,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 550,\n 'name': 'Basculin (Red-Striped)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'catchRate': 25,\n 'base': {\n 'hitpoints': 70,\n 'attack': 92,\n 'specialAttack': 80,\n 'defense': 65,\n 'specialDefense': 55,\n 'speed': 98,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_tooth' },\n}, {\n 'id': 550.01,\n 'name': 'Basculin (Blue-Striped)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'catchRate': 25,\n 'base': {\n 'hitpoints': 70,\n 'attack': 92,\n 'specialAttack': 80,\n 'defense': 65,\n 'specialDefense': 55,\n 'speed': 98,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Deepsea_scale' },\n}, {\n 'id': 550.02,\n 'name': 'Basculin (White-Striped)',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'catchRate': 25,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Basculin (White-Striped)', 'Basculegion (Male)', 45),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Basculin (White-Striped)', 'Basculegion (Female)', 45),\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 92,\n 'specialAttack': 80,\n 'defense': 65,\n 'specialDefense': 55,\n 'speed': 98,\n },\n}, {\n 'id': 551,\n 'name': 'Sandile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 58,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sandile', 'Krokorok', 29)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 72,\n 'specialAttack': 35,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 65,\n },\n}, {\n 'id': 552,\n 'name': 'Krokorok',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 123,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Krokorok', 'Krookodile', 40)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 82,\n 'specialAttack': 45,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 74,\n },\n}, {\n 'id': 553,\n 'name': 'Krookodile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 234,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 95,\n 'attack': 117,\n 'specialAttack': 65,\n 'defense': 80,\n 'specialDefense': 70,\n 'speed': 92,\n },\n}, {\n 'id': 554,\n 'name': 'Darumaka',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 63,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Darumaka', 'Darmanitan', 35),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Darumaka', 'Darmanitan (Zen)'),\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 90,\n 'specialAttack': 15,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 50,\n },\n}, {\n 'id': 554.01,\n 'name': 'Galarian Darumaka',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 63,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Galarian Darumaka', 'Galarian Darmanitan', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Ice_stone),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Galarian Darumaka', 'Galarian Darmanitan (Zen)'),\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 90,\n 'specialAttack': 15,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 50,\n },\n}, {\n 'id': 555,\n 'name': 'Darmanitan',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 189,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 105,\n 'attack': 140,\n 'specialAttack': 30,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 95,\n },\n}, {\n 'id': 555.01,\n 'name': 'Darmanitan (Zen)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 189,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 105,\n 'attack': 30,\n 'specialAttack': 140,\n 'defense': 105,\n 'specialDefense': 105,\n 'speed': 55,\n },\n}, {\n 'id': 555.02,\n 'name': 'Galarian Darmanitan',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 189,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 105,\n 'attack': 140,\n 'specialAttack': 30,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 95,\n },\n}, {\n 'id': 555.03,\n 'name': 'Galarian Darmanitan (Zen)',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 189,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 105,\n 'attack': 160,\n 'specialAttack': 30,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 135,\n },\n}, {\n 'id': 556,\n 'name': 'Maractus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'catchRate': 255,\n 'base': {\n 'hitpoints': 75,\n 'attack': 86,\n 'specialAttack': 106,\n 'defense': 67,\n 'specialDefense': 67,\n 'speed': 60,\n },\n}, {\n 'id': 557,\n 'name': 'Dwebble',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dwebble', 'Crustle', 34)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 35,\n 'defense': 85,\n 'specialDefense': 35,\n 'speed': 55,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Rare Bone' },\n}, {\n 'id': 558,\n 'name': 'Crustle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 105,\n 'specialAttack': 65,\n 'defense': 125,\n 'specialDefense': 75,\n 'speed': 45,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Rare Bone' },\n}, {\n 'id': 559,\n 'name': 'Scraggy',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 70,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Scraggy', 'Scrafty', 39)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 75,\n 'specialAttack': 35,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 48,\n },\n}, {\n 'id': 560,\n 'name': 'Scrafty',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 171,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 45,\n 'defense': 115,\n 'specialDefense': 115,\n 'speed': 58,\n },\n}, {\n 'id': 561,\n 'name': 'Sigilyph',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 72,\n 'attack': 58,\n 'specialAttack': 103,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 97,\n },\n}, {\n 'id': 562,\n 'name': 'Yamask',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Yamask', 'Cofagrigus', 34)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 30,\n 'specialAttack': 55,\n 'defense': 85,\n 'specialDefense': 65,\n 'speed': 30,\n },\n}, {\n 'id': 562.01,\n 'name': 'Galarian Yamask',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DungeonRestrictedLevelEvolution)('Dusty Bowl', 'Galarian Yamask', 'Runerigus', 34)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 55,\n 'specialAttack': 30,\n 'defense': 85,\n 'specialDefense': 65,\n 'speed': 30,\n },\n}, {\n 'id': 563,\n 'name': 'Cofagrigus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 169,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 58,\n 'attack': 50,\n 'specialAttack': 95,\n 'defense': 145,\n 'specialDefense': 105,\n 'speed': 30,\n },\n}, {\n 'id': 564,\n 'name': 'Tirtouga',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 71,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tirtouga', 'Carracosta', 37)],\n 'base': {\n 'hitpoints': 54,\n 'attack': 78,\n 'specialAttack': 53,\n 'defense': 103,\n 'specialDefense': 45,\n 'speed': 22,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 565,\n 'name': 'Carracosta',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 74,\n 'attack': 108,\n 'specialAttack': 83,\n 'defense': 133,\n 'specialDefense': 65,\n 'speed': 32,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 566,\n 'name': 'Archen',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 71,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Archen', 'Archeops', 37)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 112,\n 'specialAttack': 74,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 567,\n 'name': 'Archeops',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 177,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 140,\n 'specialAttack': 112,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 568,\n 'name': 'Trubbish',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'catchRate': 190,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Trubbish', 'Garbodor', 36),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Trubbish', 'Gigantamax Garbodor'),\n ],\n 'base': {\n 'hitpoints': 50,\n 'attack': 50,\n 'specialAttack': 40,\n 'defense': 62,\n 'specialDefense': 62,\n 'speed': 65,\n },\n}, {\n 'id': 569,\n 'name': 'Garbodor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 80,\n 'attack': 95,\n 'specialAttack': 60,\n 'defense': 82,\n 'specialDefense': 82,\n 'speed': 75,\n },\n}, {\n 'id': 569.01,\n 'name': 'Gigantamax Garbodor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 160,\n 'attack': 95,\n 'specialAttack': 60,\n 'defense': 82,\n 'specialDefense': 82,\n 'speed': 75,\n },\n}, {\n 'id': 570,\n 'name': 'Zorua',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 66,\n 'catchRate': 75,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Zorua', 'Zoroark', 30)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 65,\n 'specialAttack': 80,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 570.01,\n 'name': 'Hisuian Zorua',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 66,\n 'catchRate': 75,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Hisuian Zorua', 'Hisuian Zoroark', 30)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 60,\n 'specialAttack': 85,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 571,\n 'name': 'Zoroark',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 179,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 105,\n 'specialAttack': 120,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 105,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 571.01,\n 'name': 'Hisuian Zoroark',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 179,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 55,\n 'attack': 100,\n 'specialAttack': 125,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 110,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 572,\n 'name': 'Minccino',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 60,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Minccino', 'Cinccino', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Shiny_stone)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 50,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 75,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 573,\n 'name': 'Cinccino',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 165,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 75,\n 'attack': 95,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 115,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 574,\n 'name': 'Gothita',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 58,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Gothita', 'Gothorita', 32)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 30,\n 'specialAttack': 55,\n 'defense': 50,\n 'specialDefense': 65,\n 'speed': 45,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 575,\n 'name': 'Gothorita',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 137,\n 'catchRate': 100,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Gothorita', 'Gothitelle', 41)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 45,\n 'specialAttack': 75,\n 'defense': 70,\n 'specialDefense': 85,\n 'speed': 55,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 576,\n 'name': 'Gothitelle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 221,\n 'catchRate': 50,\n 'base': {\n 'hitpoints': 70,\n 'attack': 55,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 110,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 577,\n 'name': 'Solosis',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 58,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Solosis', 'Duosion', 32)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 30,\n 'specialAttack': 105,\n 'defense': 40,\n 'specialDefense': 50,\n 'speed': 20,\n },\n}, {\n 'id': 578,\n 'name': 'Duosion',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 130,\n 'catchRate': 100,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Duosion', 'Reuniclus', 41)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 40,\n 'specialAttack': 125,\n 'defense': 50,\n 'specialDefense': 60,\n 'speed': 30,\n },\n}, {\n 'id': 579,\n 'name': 'Reuniclus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 221,\n 'catchRate': 50,\n 'base': {\n 'hitpoints': 110,\n 'attack': 65,\n 'specialAttack': 125,\n 'defense': 75,\n 'specialDefense': 85,\n 'speed': 30,\n },\n}, {\n 'id': 580,\n 'name': 'Ducklett',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ducklett', 'Swanna', 35)],\n 'base': {\n 'hitpoints': 62,\n 'attack': 44,\n 'specialAttack': 44,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 55,\n },\n}, {\n 'id': 581,\n 'name': 'Swanna',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 87,\n 'specialAttack': 87,\n 'defense': 63,\n 'specialDefense': 63,\n 'speed': 98,\n },\n}, {\n 'id': 582,\n 'name': 'Vanillite',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 61,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Vanillite', 'Vanillish', 35)],\n 'base': {\n 'hitpoints': 36,\n 'attack': 50,\n 'specialAttack': 65,\n 'defense': 50,\n 'specialDefense': 60,\n 'speed': 44,\n },\n}, {\n 'id': 583,\n 'name': 'Vanillish',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 138,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Vanillish', 'Vanilluxe', 47)],\n 'base': {\n 'hitpoints': 51,\n 'attack': 65,\n 'specialAttack': 80,\n 'defense': 65,\n 'specialDefense': 75,\n 'speed': 59,\n },\n}, {\n 'id': 584,\n 'name': 'Vanilluxe',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 241,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 71,\n 'attack': 95,\n 'specialAttack': 110,\n 'defense': 85,\n 'specialDefense': 95,\n 'speed': 79,\n },\n}, {\n 'id': 585,\n 'name': 'Deerling (Spring)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Deerling (Spring)', 'Sawsbuck (Spring)', 34)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 75,\n },\n}, {\n 'id': 585.01,\n 'name': 'Deerling (Summer)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Deerling (Summer)', 'Sawsbuck (Summer)', 34)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 75,\n },\n}, {\n 'id': 585.02,\n 'name': 'Deerling (Autumn)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Deerling (Autumn)', 'Sawsbuck (Autumn)', 34)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 75,\n },\n}, {\n 'id': 585.03,\n 'name': 'Deerling (Winter)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Deerling (Winter)', 'Sawsbuck (Winter)', 34)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 75,\n },\n}, {\n 'id': 586,\n 'name': 'Sawsbuck (Spring)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 95,\n },\n}, {\n 'id': 586.01,\n 'name': 'Sawsbuck (Summer)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 95,\n },\n}, {\n 'id': 586.02,\n 'name': 'Sawsbuck (Autumn)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 95,\n },\n}, {\n 'id': 586.03,\n 'name': 'Sawsbuck (Winter)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 60,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 95,\n },\n}, {\n 'id': 587,\n 'name': 'Emolga',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 150,\n 'catchRate': 200,\n 'base': {\n 'hitpoints': 55,\n 'attack': 75,\n 'specialAttack': 75,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 103,\n },\n}, {\n 'id': 588,\n 'name': 'Karrablast',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 63,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Karrablast', 'Escavalier', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 75,\n 'specialAttack': 40,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 60,\n },\n}, {\n 'id': 589,\n 'name': 'Escavalier',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 135,\n 'specialAttack': 60,\n 'defense': 105,\n 'specialDefense': 105,\n 'speed': 20,\n },\n}, {\n 'id': 590,\n 'name': 'Foongus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 59,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Foongus', 'Amoonguss', 39)],\n 'base': {\n 'hitpoints': 69,\n 'attack': 55,\n 'specialAttack': 55,\n 'defense': 45,\n 'specialDefense': 55,\n 'speed': 15,\n },\n}, {\n 'id': 591,\n 'name': 'Amoonguss',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 162,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 114,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 30,\n },\n}, {\n 'id': 592,\n 'name': 'Frillish',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Frillish', 'Jellicent', 40)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 40,\n 'specialAttack': 65,\n 'defense': 50,\n 'specialDefense': 85,\n 'speed': 40,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 593,\n 'name': 'Jellicent',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 100,\n 'attack': 60,\n 'specialAttack': 85,\n 'defense': 70,\n 'specialDefense': 105,\n 'speed': 60,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 594,\n 'name': 'Alomomola',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 165,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 165,\n 'attack': 75,\n 'specialAttack': 40,\n 'defense': 80,\n 'specialDefense': 45,\n 'speed': 65,\n },\n}, {\n 'id': 595,\n 'name': 'Joltik',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Joltik', 'Galvantula', 36)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 47,\n 'specialAttack': 57,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 65,\n },\n}, {\n 'id': 596,\n 'name': 'Galvantula',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 77,\n 'specialAttack': 97,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 108,\n },\n}, {\n 'id': 597,\n 'name': 'Ferroseed',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Ferroseed', 'Ferrothorn', 40)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 50,\n 'specialAttack': 24,\n 'defense': 91,\n 'specialDefense': 86,\n 'speed': 10,\n },\n}, {\n 'id': 598,\n 'name': 'Ferrothorn',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 171,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 74,\n 'attack': 94,\n 'specialAttack': 54,\n 'defense': 131,\n 'specialDefense': 116,\n 'speed': 20,\n },\n}, {\n 'id': 599,\n 'name': 'Klink',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 60,\n 'catchRate': 130,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Klink', 'Klang', 38)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 55,\n 'specialAttack': 45,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 30,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 600,\n 'name': 'Klang',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 60,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Klang', 'Klinklang', 49)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 80,\n 'specialAttack': 70,\n 'defense': 95,\n 'specialDefense': 85,\n 'speed': 50,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 601,\n 'name': 'Klinklang',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 234,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 70,\n 'defense': 115,\n 'specialDefense': 85,\n 'speed': 90,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 602,\n 'name': 'Tynamo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 55,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tynamo', 'Eelektrik', 39)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 55,\n 'specialAttack': 45,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 60,\n },\n}, {\n 'id': 603,\n 'name': 'Eelektrik',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 142,\n 'catchRate': 60,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Eelektrik', 'Eelektross', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Thunder_stone)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 85,\n 'specialAttack': 75,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 40,\n },\n}, {\n 'id': 604,\n 'name': 'Eelektross',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 232,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 85,\n 'attack': 115,\n 'specialAttack': 105,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 50,\n },\n}, {\n 'id': 605,\n 'name': 'Elgyem',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Elgyem', 'Beheeyem', 42)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 55,\n 'specialAttack': 85,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 30,\n },\n}, {\n 'id': 606,\n 'name': 'Beheeyem',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 75,\n 'attack': 75,\n 'specialAttack': 125,\n 'defense': 75,\n 'specialDefense': 95,\n 'speed': 40,\n },\n}, {\n 'id': 607,\n 'name': 'Litwick',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 55,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Litwick', 'Lampent', 41)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 30,\n 'specialAttack': 65,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 20,\n },\n}, {\n 'id': 608,\n 'name': 'Lampent',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 130,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Lampent', 'Chandelure', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dusk_stone)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 40,\n 'specialAttack': 95,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 55,\n },\n}, {\n 'id': 609,\n 'name': 'Chandelure',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 234,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 55,\n 'specialAttack': 145,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 80,\n },\n}, {\n 'id': 610,\n 'name': 'Axew',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 64,\n 'catchRate': 75,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Axew', 'Fraxure', 38)],\n 'base': {\n 'hitpoints': 46,\n 'attack': 87,\n 'specialAttack': 30,\n 'defense': 60,\n 'specialDefense': 40,\n 'speed': 57,\n },\n}, {\n 'id': 611,\n 'name': 'Fraxure',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 144,\n 'catchRate': 60,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Fraxure', 'Haxorus', 48)],\n 'base': {\n 'hitpoints': 66,\n 'attack': 117,\n 'specialAttack': 40,\n 'defense': 70,\n 'specialDefense': 50,\n 'speed': 67,\n },\n}, {\n 'id': 612,\n 'name': 'Haxorus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 243,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 76,\n 'attack': 147,\n 'specialAttack': 60,\n 'defense': 90,\n 'specialDefense': 70,\n 'speed': 97,\n },\n}, {\n 'id': 613,\n 'name': 'Cubchoo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cubchoo', 'Beartic', 37)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 70,\n 'specialAttack': 60,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 40,\n },\n}, {\n 'id': 614,\n 'name': 'Beartic',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 177,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 95,\n 'attack': 130,\n 'specialAttack': 70,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 50,\n },\n}, {\n 'id': 615,\n 'name': 'Cryogonal',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 180,\n 'catchRate': 25,\n 'base': {\n 'hitpoints': 80,\n 'attack': 50,\n 'specialAttack': 95,\n 'defense': 50,\n 'specialDefense': 135,\n 'speed': 105,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 616,\n 'name': 'Shelmet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Shelmet', 'Accelgor', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 85,\n 'specialDefense': 65,\n 'speed': 25,\n },\n}, {\n 'id': 617,\n 'name': 'Accelgor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 80,\n 'attack': 70,\n 'specialAttack': 100,\n 'defense': 40,\n 'specialDefense': 60,\n 'speed': 145,\n },\n}, {\n 'id': 618,\n 'name': 'Stunfisk',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 109,\n 'attack': 66,\n 'specialAttack': 81,\n 'defense': 84,\n 'specialDefense': 99,\n 'speed': 32,\n },\n}, {\n 'id': 618.01,\n 'name': 'Galarian Stunfisk',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 109,\n 'attack': 81,\n 'specialAttack': 66,\n 'defense': 99,\n 'specialDefense': 84,\n 'speed': 32,\n },\n}, {\n 'id': 619,\n 'name': 'Mienfoo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 70,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Mienfoo', 'Mienshao', 50)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 85,\n 'specialAttack': 55,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 65,\n },\n}, {\n 'id': 620,\n 'name': 'Mienshao',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 179,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 65,\n 'attack': 125,\n 'specialAttack': 95,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 105,\n },\n}, {\n 'id': 621,\n 'name': 'Druddigon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 77,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 48,\n },\n}, {\n 'id': 622,\n 'name': 'Golett',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Golett', 'Golurk', 43)],\n 'base': {\n 'hitpoints': 59,\n 'attack': 74,\n 'specialAttack': 35,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 35,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 623,\n 'name': 'Golurk',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 169,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 89,\n 'attack': 124,\n 'specialAttack': 55,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 55,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 624,\n 'name': 'Pawniard',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 68,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pawniard', 'Bisharp', 52)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 85,\n 'specialAttack': 40,\n 'defense': 70,\n 'specialDefense': 40,\n 'speed': 60,\n },\n}, {\n 'id': 625,\n 'name': 'Bisharp',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Bisharp', 'Kingambit', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Leaders_crest)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 125,\n 'specialAttack': 60,\n 'defense': 100,\n 'specialDefense': 70,\n 'speed': 70,\n },\n // 'heldItem': { type: ItemType.item, id: 'Leaders_crest' },// Need this to not drop until Paldea\n}, {\n 'id': 626,\n 'name': 'Bouffalant',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 95,\n 'attack': 110,\n 'specialAttack': 40,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 55,\n },\n}, {\n 'id': 627,\n 'name': 'Rufflet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 70,\n 'catchRate': 190,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Rufflet', 'Braviary', 54),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Rufflet', 'Hisuian Braviary', 54),\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 83,\n 'specialAttack': 37,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 628,\n 'name': 'Braviary',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 179,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 100,\n 'attack': 123,\n 'specialAttack': 57,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 628.01,\n 'name': 'Hisuian Braviary',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 179,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 110,\n 'attack': 83,\n 'specialAttack': 112,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 65,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 629,\n 'name': 'Vullaby',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 74,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Vullaby', 'Mandibuzz', 54)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 55,\n 'specialAttack': 45,\n 'defense': 75,\n 'specialDefense': 65,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 630,\n 'name': 'Mandibuzz',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 179,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 110,\n 'attack': 65,\n 'specialAttack': 55,\n 'defense': 105,\n 'specialDefense': 95,\n 'speed': 80,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 631,\n 'name': 'Heatmor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 169,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 85,\n 'attack': 97,\n 'specialAttack': 105,\n 'defense': 66,\n 'specialDefense': 66,\n 'speed': 65,\n },\n}, {\n 'id': 632,\n 'name': 'Durant',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 169,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 58,\n 'attack': 109,\n 'specialAttack': 48,\n 'defense': 112,\n 'specialDefense': 48,\n 'speed': 109,\n },\n}, {\n 'id': 633,\n 'name': 'Deino',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Deino', 'Zweilous', 50)],\n 'base': {\n 'hitpoints': 52,\n 'attack': 65,\n 'specialAttack': 45,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 38,\n },\n}, {\n 'id': 634,\n 'name': 'Zweilous',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Zweilous', 'Hydreigon', 64)],\n 'base': {\n 'hitpoints': 72,\n 'attack': 85,\n 'specialAttack': 65,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 58,\n },\n}, {\n 'id': 635,\n 'name': 'Hydreigon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 92,\n 'attack': 105,\n 'specialAttack': 125,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 98,\n },\n}, {\n 'id': 636,\n 'name': 'Larvesta',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 72,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Larvesta', 'Volcarona', 59)],\n 'baby': true,\n 'base': {\n 'hitpoints': 55,\n 'attack': 85,\n 'specialAttack': 50,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 60,\n },\n}, {\n 'id': 637,\n 'name': 'Volcarona',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 248,\n 'catchRate': 15,\n 'base': {\n 'hitpoints': 85,\n 'attack': 60,\n 'specialAttack': 135,\n 'defense': 65,\n 'specialDefense': 105,\n 'speed': 100,\n },\n}, {\n 'id': 638,\n 'name': 'Cobalion',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 91,\n 'attack': 90,\n 'specialAttack': 90,\n 'defense': 129,\n 'specialDefense': 72,\n 'speed': 108,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 639,\n 'name': 'Terrakion',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 91,\n 'attack': 129,\n 'specialAttack': 72,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 108,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 640,\n 'name': 'Virizion',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 91,\n 'attack': 90,\n 'specialAttack': 90,\n 'defense': 72,\n 'specialDefense': 129,\n 'speed': 108,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 641,\n 'name': 'Tornadus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 79,\n 'attack': 115,\n 'specialAttack': 125,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 111,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 641.01,\n 'name': 'Tornadus (Therian)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 79,\n 'attack': 100,\n 'specialAttack': 110,\n 'defense': 80,\n 'specialDefense': 90,\n 'speed': 121,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 642,\n 'name': 'Thundurus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 79,\n 'attack': 115,\n 'specialAttack': 125,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 111,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 642.01,\n 'name': 'Thundurus (Therian)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 79,\n 'attack': 105,\n 'specialAttack': 145,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 101,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 643,\n 'name': 'Reshiram',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 120,\n 'specialAttack': 150,\n 'defense': 100,\n 'specialDefense': 120,\n 'speed': 90,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'White_DNA' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 644,\n 'name': 'Zekrom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 150,\n 'specialAttack': 120,\n 'defense': 120,\n 'specialDefense': 100,\n 'speed': 90,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Black_DNA' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 645,\n 'name': 'Landorus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 89,\n 'attack': 125,\n 'specialAttack': 115,\n 'defense': 90,\n 'specialDefense': 80,\n 'speed': 101,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 645.01,\n 'name': 'Landorus (Therian)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 89,\n 'attack': 145,\n 'specialAttack': 105,\n 'defense': 90,\n 'specialDefense': 80,\n 'speed': 91,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 646,\n 'name': 'Kyurem',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 297,\n 'catchRate': 3,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Kyurem', 'Kyurem (Black)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Black_DNA),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Kyurem', 'Kyurem (White)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.White_DNA),\n ],\n 'base': {\n 'hitpoints': 125,\n 'attack': 130,\n 'specialAttack': 130,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 646.01,\n 'name': 'Kyurem (White)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 297,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 125,\n 'attack': 120,\n 'specialAttack': 170,\n 'defense': 90,\n 'specialDefense': 100,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 646.02,\n 'name': 'Kyurem (Black)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 297,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 125,\n 'attack': 170,\n 'specialAttack': 120,\n 'defense': 100,\n 'specialDefense': 90,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 647,\n 'name': 'Keldeo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 91,\n 'attack': 72,\n 'specialAttack': 129,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 108,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 647.01,\n 'name': 'Keldeo (Resolute)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 80,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 261,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 91,\n 'attack': 72,\n 'specialAttack': 129,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 108,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 648,\n 'name': 'Meloetta (Aria)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 77,\n 'specialAttack': 128,\n 'defense': 77,\n 'specialDefense': 128,\n 'speed': 90,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Star Piece' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 648.01,\n 'name': 'Meloetta (Pirouette)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 100,\n 'attack': 128,\n 'specialAttack': 77,\n 'defense': 90,\n 'specialDefense': 77,\n 'speed': 128,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649,\n 'name': 'Genesect',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Burn_Drive', 'Genesect', 'Genesect (Burn)', 70),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Chill_Drive', 'Genesect', 'Genesect (Chill)', 70),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Douse_Drive', 'Genesect', 'Genesect (Douse)', 70),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Shock_Drive', 'Genesect', 'Genesect (Shock)', 70),\n ],\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.01,\n 'name': 'Genesect (Burn)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.02,\n 'name': 'Genesect (Chill)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.03,\n 'name': 'Genesect (Douse)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.04,\n 'name': 'Genesect (Shock)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.05,\n 'name': 'Genesect (High-Speed)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Burn_Drive', 'Genesect (High-Speed)', 'Genesect (High-Speed Burn)', 70),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Chill_Drive', 'Genesect (High-Speed)', 'Genesect (High-Speed Chill)', 70),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Douse_Drive', 'Genesect (High-Speed)', 'Genesect (High-Speed Douse)', 70),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Shock_Drive', 'Genesect (High-Speed)', 'Genesect (High-Speed Shock)', 70),\n ],\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.06,\n 'name': 'Genesect (High-Speed Burn)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.07,\n 'name': 'Genesect (High-Speed Chill)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.08,\n 'name': 'Genesect (High-Speed Douse)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 649.09,\n 'name': 'Genesect (High-Speed Shock)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 71,\n 'attack': 120,\n 'specialAttack': 120,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 650,\n 'name': 'Chespin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 63,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Chespin', 'Quilladin', 16)],\n 'base': {\n 'hitpoints': 56,\n 'attack': 61,\n 'specialAttack': 48,\n 'defense': 65,\n 'specialDefense': 45,\n 'speed': 38,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 651,\n 'name': 'Quilladin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Quilladin', 'Chesnaught', 36)],\n 'base': {\n 'hitpoints': 61,\n 'attack': 78,\n 'specialAttack': 56,\n 'defense': 95,\n 'specialDefense': 58,\n 'speed': 57,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 652,\n 'name': 'Chesnaught',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 88,\n 'attack': 107,\n 'specialAttack': 74,\n 'defense': 122,\n 'specialDefense': 75,\n 'speed': 64,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 653,\n 'name': 'Fennekin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 61,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Fennekin', 'Braixen', 16)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 62,\n 'defense': 40,\n 'specialDefense': 60,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 654,\n 'name': 'Braixen',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 143,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Braixen', 'Delphox', 36)],\n 'base': {\n 'hitpoints': 59,\n 'attack': 59,\n 'specialAttack': 90,\n 'defense': 58,\n 'specialDefense': 70,\n 'speed': 73,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 655,\n 'name': 'Delphox',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 240,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 69,\n 'specialAttack': 114,\n 'defense': 72,\n 'specialDefense': 100,\n 'speed': 104,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 656,\n 'name': 'Froakie',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 63,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Froakie', 'Frogadier', 16)],\n 'base': {\n 'hitpoints': 41,\n 'attack': 56,\n 'specialAttack': 62,\n 'defense': 40,\n 'specialDefense': 44,\n 'speed': 71,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 657,\n 'name': 'Frogadier',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 142,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Frogadier', 'Greninja', 36)],\n 'base': {\n 'hitpoints': 54,\n 'attack': 63,\n 'specialAttack': 83,\n 'defense': 52,\n 'specialDefense': 56,\n 'speed': 97,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 658,\n 'name': 'Greninja',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 72,\n 'attack': 95,\n 'specialAttack': 103,\n 'defense': 67,\n 'specialDefense': 71,\n 'speed': 122,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 658.01,\n 'name': 'Ash-Greninja',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 45,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 72,\n 'attack': 145,\n 'specialAttack': 153,\n 'defense': 67,\n 'specialDefense': 71,\n 'speed': 132,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 659,\n 'name': 'Bunnelby',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 47,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bunnelby', 'Diggersby', 20)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 36,\n 'specialAttack': 32,\n 'defense': 38,\n 'specialDefense': 36,\n 'speed': 57,\n },\n}, {\n 'id': 660,\n 'name': 'Diggersby',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 148,\n 'catchRate': 127,\n 'base': {\n 'hitpoints': 85,\n 'attack': 56,\n 'specialAttack': 50,\n 'defense': 77,\n 'specialDefense': 77,\n 'speed': 78,\n },\n}, {\n 'id': 661,\n 'name': 'Fletchling',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Fletchling', 'Fletchinder', 17)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 50,\n 'specialAttack': 40,\n 'defense': 43,\n 'specialDefense': 38,\n 'speed': 62,\n },\n}, {\n 'id': 662,\n 'name': 'Fletchinder',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 134,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Fletchinder', 'Talonflame', 35)],\n 'base': {\n 'hitpoints': 62,\n 'attack': 73,\n 'specialAttack': 56,\n 'defense': 55,\n 'specialDefense': 52,\n 'speed': 84,\n },\n}, {\n 'id': 663,\n 'name': 'Talonflame',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 175,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 81,\n 'specialAttack': 74,\n 'defense': 71,\n 'specialDefense': 69,\n 'speed': 126,\n },\n}, {\n 'id': 664,\n 'name': 'Scatterbug',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 40,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Scatterbug', 'Spewpa', 9)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 35,\n 'specialAttack': 27,\n 'defense': 40,\n 'specialDefense': 25,\n 'speed': 35,\n },\n}, {\n 'id': 665,\n 'name': 'Spewpa',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 75,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Spewpa', 'Vivillon (Meadow)', 12),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Icy Snow)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Polar)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Tundra)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Continental)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Garden)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Elegant)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Modern)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Marine)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Archipelago)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (High Plains)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Sandstorm)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (River)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Monsoon)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Savanna)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Sun)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Ocean)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Jungle)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Poké Ball)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Spewpa', 'Vivillon (Fancy)'),\n ],\n 'base': {\n 'hitpoints': 45,\n 'attack': 22,\n 'specialAttack': 27,\n 'defense': 60,\n 'specialDefense': 30,\n 'speed': 29,\n },\n}, {\n 'id': 666,\n 'name': 'Vivillon (Meadow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.01,\n 'name': 'Vivillon (Icy Snow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.02,\n 'name': 'Vivillon (Polar)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.03,\n 'name': 'Vivillon (Tundra)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.04,\n 'name': 'Vivillon (Continental)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.05,\n 'name': 'Vivillon (Garden)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.06,\n 'name': 'Vivillon (Elegant)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.07,\n 'name': 'Vivillon (Modern)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.08,\n 'name': 'Vivillon (Marine)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.09,\n 'name': 'Vivillon (Archipelago)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.10,\n 'name': 'Vivillon (High Plains)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.11,\n 'name': 'Vivillon (Sandstorm)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.12,\n 'name': 'Vivillon (River)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.13,\n 'name': 'Vivillon (Monsoon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.14,\n 'name': 'Vivillon (Savanna)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.15,\n 'name': 'Vivillon (Sun)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.16,\n 'name': 'Vivillon (Ocean)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.17,\n 'name': 'Vivillon (Jungle)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.18,\n 'name': 'Vivillon (Poké Ball)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 666.19,\n 'name': 'Vivillon (Fancy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 185,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 52,\n 'specialAttack': 90,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 89,\n },\n}, {\n 'id': 667,\n 'name': 'Litleo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 74,\n 'catchRate': 220,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Litleo', 'Pyroar', 35)],\n 'base': {\n 'hitpoints': 62,\n 'attack': 50,\n 'specialAttack': 73,\n 'defense': 58,\n 'specialDefense': 54,\n 'speed': 72,\n },\n 'gender': {\n 'femaleRatio': 0.875,\n },\n}, {\n 'id': 668,\n 'name': 'Pyroar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 177,\n 'catchRate': 65,\n 'base': {\n 'hitpoints': 86,\n 'attack': 68,\n 'specialAttack': 109,\n 'defense': 72,\n 'specialDefense': 66,\n 'speed': 106,\n },\n 'gender': {\n 'femaleRatio': 0.875,\n 'visualDifference': true,\n },\n}, {\n 'id': 669,\n 'name': 'Flabébé (Red)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Flabébé (Red)', 'Floette (Red)', 19)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 38,\n 'specialAttack': 61,\n 'defense': 39,\n 'specialDefense': 79,\n 'speed': 42,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 669.01,\n 'name': 'Flabébé (Yellow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Flabébé (Yellow)', 'Floette (Yellow)', 19)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 38,\n 'specialAttack': 61,\n 'defense': 39,\n 'specialDefense': 79,\n 'speed': 42,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 669.02,\n 'name': 'Flabébé (Orange)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Flabébé (Orange)', 'Floette (Orange)', 19)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 38,\n 'specialAttack': 61,\n 'defense': 39,\n 'specialDefense': 79,\n 'speed': 42,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 669.03,\n 'name': 'Flabébé (Blue)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Flabébé (Blue)', 'Floette (Blue)', 19)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 38,\n 'specialAttack': 61,\n 'defense': 39,\n 'specialDefense': 79,\n 'speed': 42,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 669.04,\n 'name': 'Flabébé (White)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Flabébé (White)', 'Floette (White)', 19)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 38,\n 'specialAttack': 61,\n 'defense': 39,\n 'specialDefense': 79,\n 'speed': 42,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 670,\n 'name': 'Floette (Red)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 130,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Floette (Red)', 'Florges (Red)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Shiny_stone)],\n 'base': {\n 'hitpoints': 54,\n 'attack': 45,\n 'specialAttack': 75,\n 'defense': 47,\n 'specialDefense': 98,\n 'speed': 52,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 670.01,\n 'name': 'Floette (Yellow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 130,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Floette (Yellow)', 'Florges (Yellow)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Shiny_stone)],\n 'base': {\n 'hitpoints': 54,\n 'attack': 45,\n 'specialAttack': 75,\n 'defense': 47,\n 'specialDefense': 98,\n 'speed': 52,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 670.02,\n 'name': 'Floette (Orange)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 130,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Floette (Orange)', 'Florges (Orange)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Shiny_stone)],\n 'base': {\n 'hitpoints': 54,\n 'attack': 45,\n 'specialAttack': 75,\n 'defense': 47,\n 'specialDefense': 98,\n 'speed': 52,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 670.03,\n 'name': 'Floette (Blue)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 130,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Floette (Blue)', 'Florges (Blue)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Shiny_stone)],\n 'base': {\n 'hitpoints': 54,\n 'attack': 45,\n 'specialAttack': 75,\n 'defense': 47,\n 'specialDefense': 98,\n 'speed': 52,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 670.04,\n 'name': 'Floette (White)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 130,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Floette (White)', 'Florges (White)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Shiny_stone)],\n 'base': {\n 'hitpoints': 54,\n 'attack': 45,\n 'specialAttack': 75,\n 'defense': 47,\n 'specialDefense': 98,\n 'speed': 52,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 670.05,\n 'name': 'Floette (Eternal)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 130,\n 'catchRate': 120,\n 'base': {\n 'hitpoints': 74,\n 'attack': 65,\n 'specialAttack': 125,\n 'defense': 67,\n 'specialDefense': 128,\n 'speed': 92,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 671,\n 'name': 'Florges (Red)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 248,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 65,\n 'specialAttack': 112,\n 'defense': 68,\n 'specialDefense': 154,\n 'speed': 75,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 671.01,\n 'name': 'Florges (Yellow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 248,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 65,\n 'specialAttack': 112,\n 'defense': 68,\n 'specialDefense': 154,\n 'speed': 75,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 671.02,\n 'name': 'Florges (Orange)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 248,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 65,\n 'specialAttack': 112,\n 'defense': 68,\n 'specialDefense': 154,\n 'speed': 75,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 671.03,\n 'name': 'Florges (Blue)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 248,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 65,\n 'specialAttack': 112,\n 'defense': 68,\n 'specialDefense': 154,\n 'speed': 75,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 671.04,\n 'name': 'Florges (White)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 248,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 65,\n 'specialAttack': 112,\n 'defense': 68,\n 'specialDefense': 154,\n 'speed': 75,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 672,\n 'name': 'Skiddo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 70,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Skiddo', 'Gogoat', 32)],\n 'base': {\n 'hitpoints': 66,\n 'attack': 65,\n 'specialAttack': 62,\n 'defense': 48,\n 'specialDefense': 57,\n 'speed': 52,\n },\n}, {\n 'id': 673,\n 'name': 'Gogoat',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 186,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 123,\n 'attack': 100,\n 'specialAttack': 97,\n 'defense': 62,\n 'specialDefense': 81,\n 'speed': 68,\n },\n}, {\n 'id': 674,\n 'name': 'Pancham',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 70,\n 'catchRate': 220,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pancham', 'Pangoro', 32)],\n 'base': {\n 'hitpoints': 67,\n 'attack': 82,\n 'specialAttack': 46,\n 'defense': 62,\n 'specialDefense': 48,\n 'speed': 43,\n },\n}, {\n 'id': 675,\n 'name': 'Pangoro',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 65,\n 'base': {\n 'hitpoints': 95,\n 'attack': 124,\n 'specialAttack': 69,\n 'defense': 78,\n 'specialDefense': 71,\n 'speed': 58,\n },\n}, {\n 'id': 676,\n 'name': 'Furfrou',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.01,\n 'name': 'Furfrou (Heart)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.02,\n 'name': 'Furfrou (Star)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.03,\n 'name': 'Furfrou (Diamond)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.04,\n 'name': 'Furfrou (Debutante)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.05,\n 'name': 'Furfrou (Matron)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.06,\n 'name': 'Furfrou (Dandy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.07,\n 'name': 'Furfrou (La Reine)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.08,\n 'name': 'Furfrou (Kabuki)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 676.09,\n 'name': 'Furfrou (Pharaoh)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 160,\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 102,\n },\n}, {\n 'id': 677,\n 'name': 'Espurr',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 71,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Espurr', 'Meowstic', 25)],\n 'base': {\n 'hitpoints': 62,\n 'attack': 48,\n 'specialAttack': 63,\n 'defense': 54,\n 'specialDefense': 60,\n 'speed': 68,\n },\n}, {\n 'id': 678,\n 'name': 'Meowstic',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 163,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 74,\n 'attack': 48,\n 'specialAttack': 83,\n 'defense': 76,\n 'specialDefense': 81,\n 'speed': 104,\n },\n 'gender': {\n 'visualDifference': true,\n },\n}, {\n 'id': 679,\n 'name': 'Honedge',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 65,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Honedge', 'Doublade', 35)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 80,\n 'specialAttack': 35,\n 'defense': 100,\n 'specialDefense': 37,\n 'speed': 28,\n },\n}, {\n 'id': 680,\n 'name': 'Doublade',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 157,\n 'catchRate': 90,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Doublade', 'Aegislash (Shield)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Dusk_stone),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Doublade', 'Aegislash (Blade)'),\n ],\n 'base': {\n 'hitpoints': 59,\n 'attack': 110,\n 'specialAttack': 45,\n 'defense': 150,\n 'specialDefense': 49,\n 'speed': 35,\n },\n}, {\n 'id': 681,\n 'name': 'Aegislash (Shield)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 234,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 50,\n 'defense': 140,\n 'specialDefense': 140,\n 'speed': 60,\n },\n}, {\n 'id': 681.01,\n 'name': 'Aegislash (Blade)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 234,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 60,\n 'attack': 140,\n 'specialAttack': 140,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 60,\n },\n}, {\n 'id': 682,\n 'name': 'Spritzee',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 68,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Spritzee', 'Aromatisse', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Sachet)],\n 'base': {\n 'hitpoints': 78,\n 'attack': 52,\n 'specialAttack': 63,\n 'defense': 60,\n 'specialDefense': 65,\n 'speed': 23,\n },\n}, {\n 'id': 683,\n 'name': 'Aromatisse',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 162,\n 'catchRate': 140,\n 'base': {\n 'hitpoints': 101,\n 'attack': 72,\n 'specialAttack': 99,\n 'defense': 72,\n 'specialDefense': 89,\n 'speed': 29,\n },\n}, {\n 'id': 684,\n 'name': 'Swirlix',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 68,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Swirlix', 'Slurpuff', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Whipped_dream)],\n 'base': {\n 'hitpoints': 62,\n 'attack': 48,\n 'specialAttack': 59,\n 'defense': 66,\n 'specialDefense': 57,\n 'speed': 49,\n },\n}, {\n 'id': 685,\n 'name': 'Slurpuff',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 140,\n 'base': {\n 'hitpoints': 82,\n 'attack': 80,\n 'specialAttack': 85,\n 'defense': 86,\n 'specialDefense': 75,\n 'speed': 72,\n },\n}, {\n 'id': 686,\n 'name': 'Inkay',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Inkay', 'Malamar', 30)],\n 'base': {\n 'hitpoints': 53,\n 'attack': 54,\n 'specialAttack': 37,\n 'defense': 53,\n 'specialDefense': 46,\n 'speed': 45,\n },\n}, {\n 'id': 686.01,\n 'name': 'Inkay (Pikachu)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'catchRate': 190,\n 'base': {\n 'hitpoints': 53,\n 'attack': 54,\n 'specialAttack': 37,\n 'defense': 53,\n 'specialDefense': 46,\n 'speed': 45,\n },\n}, {\n 'id': 687,\n 'name': 'Malamar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 169,\n 'catchRate': 80,\n 'base': {\n 'hitpoints': 86,\n 'attack': 92,\n 'specialAttack': 68,\n 'defense': 88,\n 'specialDefense': 75,\n 'speed': 73,\n },\n}, {\n 'id': 688,\n 'name': 'Binacle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Binacle', 'Barbaracle', 39)],\n 'base': {\n 'hitpoints': 42,\n 'attack': 52,\n 'specialAttack': 39,\n 'defense': 67,\n 'specialDefense': 56,\n 'speed': 50,\n },\n}, {\n 'id': 689,\n 'name': 'Barbaracle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 72,\n 'attack': 105,\n 'specialAttack': 54,\n 'defense': 115,\n 'specialDefense': 86,\n 'speed': 68,\n },\n}, {\n 'id': 690,\n 'name': 'Skrelp',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Skrelp', 'Dragalge', 48)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 60,\n 'specialAttack': 60,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 30,\n },\n}, {\n 'id': 691,\n 'name': 'Dragalge',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 55,\n 'base': {\n 'hitpoints': 65,\n 'attack': 75,\n 'specialAttack': 97,\n 'defense': 90,\n 'specialDefense': 123,\n 'speed': 44,\n },\n}, {\n 'id': 692,\n 'name': 'Clauncher',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 66,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Clauncher', 'Clawitzer', 37)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 53,\n 'specialAttack': 58,\n 'defense': 62,\n 'specialDefense': 63,\n 'speed': 44,\n },\n}, {\n 'id': 693,\n 'name': 'Clawitzer',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 100,\n 'catchRate': 55,\n 'base': {\n 'hitpoints': 71,\n 'attack': 73,\n 'specialAttack': 120,\n 'defense': 88,\n 'specialDefense': 89,\n 'speed': 59,\n },\n}, {\n 'id': 694,\n 'name': 'Helioptile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 58,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Helioptile', 'Heliolisk', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Sun_stone)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 38,\n 'specialAttack': 61,\n 'defense': 33,\n 'specialDefense': 43,\n 'speed': 70,\n },\n}, {\n 'id': 695,\n 'name': 'Heliolisk',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 62,\n 'attack': 55,\n 'specialAttack': 109,\n 'defense': 52,\n 'specialDefense': 94,\n 'speed': 109,\n },\n}, {\n 'id': 696,\n 'name': 'Tyrunt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 72,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedLevelEvolution)('Tyrunt', 'Tyrantrum', 39)],\n 'base': {\n 'hitpoints': 58,\n 'attack': 89,\n 'specialAttack': 45,\n 'defense': 77,\n 'specialDefense': 45,\n 'speed': 48,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 697,\n 'name': 'Tyrantrum',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 82,\n 'attack': 121,\n 'specialAttack': 69,\n 'defense': 119,\n 'specialDefense': 59,\n 'speed': 71,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 698,\n 'name': 'Amaura',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 72,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedLevelEvolution)('Amaura', 'Aurorus', 39)],\n 'base': {\n 'hitpoints': 77,\n 'attack': 59,\n 'specialAttack': 67,\n 'defense': 50,\n 'specialDefense': 63,\n 'speed': 46,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 699,\n 'name': 'Aurorus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 104,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 123,\n 'attack': 77,\n 'specialAttack': 99,\n 'defense': 72,\n 'specialDefense': 92,\n 'speed': 58,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 700,\n 'name': 'Sylveon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 95,\n 'attack': 65,\n 'specialAttack': 110,\n 'defense': 65,\n 'specialDefense': 130,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 701,\n 'name': 'Hawlucha',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 100,\n 'base': {\n 'hitpoints': 78,\n 'attack': 92,\n 'specialAttack': 74,\n 'defense': 75,\n 'specialDefense': 63,\n 'speed': 118,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Kings_rock' },\n}, {\n 'id': 702,\n 'name': 'Dedenne',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 151,\n 'catchRate': 180,\n 'base': {\n 'hitpoints': 67,\n 'attack': 58,\n 'specialAttack': 81,\n 'defense': 57,\n 'specialDefense': 67,\n 'speed': 101,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rare_Candy' },\n}, {\n 'id': 703,\n 'name': 'Carbink',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 100,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 50,\n 'attack': 50,\n 'specialAttack': 50,\n 'defense': 150,\n 'specialDefense': 150,\n 'speed': 50,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 704,\n 'name': 'Goomy',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'catchRate': 45,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Goomy', 'Sliggoo', 40),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Goomy', 'Hisuian Sliggoo', 40),\n ],\n 'base': {\n 'hitpoints': 45,\n 'attack': 50,\n 'specialAttack': 55,\n 'defense': 35,\n 'specialDefense': 75,\n 'speed': 40,\n },\n}, {\n 'id': 705,\n 'name': 'Sliggoo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 158,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.WeatherRestrictedLevelEvolution)([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Fog, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Thunderstorm], 'Sliggoo', 'Goodra', 50)],\n 'base': {\n 'hitpoints': 68,\n 'attack': 75,\n 'specialAttack': 83,\n 'defense': 53,\n 'specialDefense': 113,\n 'speed': 60,\n },\n}, {\n 'id': 705.01,\n 'name': 'Hisuian Sliggoo',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 158,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.WeatherRestrictedLevelEvolution)([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Fog, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Thunderstorm], 'Hisuian Sliggoo', 'Hisuian Goodra', 50)],\n 'base': {\n 'hitpoints': 58,\n 'attack': 75,\n 'specialAttack': 83,\n 'defense': 83,\n 'specialDefense': 113,\n 'speed': 40,\n },\n}, {\n 'id': 706,\n 'name': 'Goodra',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 90,\n 'attack': 100,\n 'specialAttack': 110,\n 'defense': 70,\n 'specialDefense': 150,\n 'speed': 80,\n },\n}, {\n 'id': 706.01,\n 'name': 'Hisuian Goodra',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 110,\n 'defense': 100,\n 'specialDefense': 150,\n 'speed': 60,\n },\n}, {\n 'id': 707,\n 'name': 'Klefki',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 165,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 57,\n 'attack': 80,\n 'specialAttack': 80,\n 'defense': 91,\n 'specialDefense': 87,\n 'speed': 75,\n },\n}, {\n 'id': 708,\n 'name': 'Phantump',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 62,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Phantump', 'Trevenant', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 43,\n 'attack': 70,\n 'specialAttack': 50,\n 'defense': 48,\n 'specialDefense': 60,\n 'speed': 38,\n },\n}, {\n 'id': 709,\n 'name': 'Trevenant',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 85,\n 'attack': 110,\n 'specialAttack': 65,\n 'defense': 76,\n 'specialDefense': 82,\n 'speed': 56,\n },\n}, {\n 'id': 710,\n 'name': 'Pumpkaboo (Average)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Pumpkaboo (Average)', 'Gourgeist (Average)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 49,\n 'attack': 66,\n 'specialAttack': 44,\n 'defense': 70,\n 'specialDefense': 55,\n 'speed': 51,\n },\n}, {\n 'id': 710.01,\n 'name': 'Pumpkaboo (Small)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Pumpkaboo (Small)', 'Gourgeist (Small)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 44,\n 'attack': 66,\n 'specialAttack': 44,\n 'defense': 70,\n 'specialDefense': 55,\n 'speed': 56,\n },\n}, {\n 'id': 710.02,\n 'name': 'Pumpkaboo (Large)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Pumpkaboo (Large)', 'Gourgeist (Large)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 54,\n 'attack': 66,\n 'specialAttack': 44,\n 'defense': 70,\n 'specialDefense': 55,\n 'speed': 46,\n },\n}, {\n 'id': 710.03,\n 'name': 'Pumpkaboo (Super Size)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 67,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Pumpkaboo (Super Size)', 'Gourgeist (Super Size)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Linking_cord)],\n 'base': {\n 'hitpoints': 59,\n 'attack': 66,\n 'specialAttack': 44,\n 'defense': 70,\n 'specialDefense': 55,\n 'speed': 41,\n },\n}, {\n 'id': 711,\n 'name': 'Gourgeist (Average)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 65,\n 'attack': 90,\n 'specialAttack': 58,\n 'defense': 122,\n 'specialDefense': 75,\n 'speed': 84,\n },\n}, {\n 'id': 711.01,\n 'name': 'Gourgeist (Small)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 55,\n 'attack': 85,\n 'specialAttack': 58,\n 'defense': 122,\n 'specialDefense': 75,\n 'speed': 99,\n },\n}, {\n 'id': 711.02,\n 'name': 'Gourgeist (Large)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 75,\n 'attack': 95,\n 'specialAttack': 58,\n 'defense': 122,\n 'specialDefense': 75,\n 'speed': 69,\n },\n}, {\n 'id': 711.03,\n 'name': 'Gourgeist (Super Size)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 85,\n 'attack': 100,\n 'specialAttack': 58,\n 'defense': 122,\n 'specialDefense': 75,\n 'speed': 54,\n },\n}, {\n 'id': 712,\n 'name': 'Bergmite',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bergmite', 'Avalugg', 37),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bergmite', 'Hisuian Avalugg', 37),\n ],\n 'base': {\n 'hitpoints': 55,\n 'attack': 69,\n 'specialAttack': 32,\n 'defense': 85,\n 'specialDefense': 35,\n 'speed': 28,\n },\n}, {\n 'id': 713,\n 'name': 'Avalugg',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 180,\n 'catchRate': 55,\n 'base': {\n 'hitpoints': 95,\n 'attack': 117,\n 'specialAttack': 44,\n 'defense': 184,\n 'specialDefense': 46,\n 'speed': 28,\n },\n}, {\n 'id': 713.01,\n 'name': 'Hisuian Avalugg',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 180,\n 'catchRate': 55,\n 'base': {\n 'hitpoints': 95,\n 'attack': 127,\n 'specialAttack': 34,\n 'defense': 184,\n 'specialDefense': 36,\n 'speed': 38,\n },\n}, {\n 'id': 713.02,\n 'name': 'Noble Avalugg',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 180,\n 'catchRate': 55,\n 'base': {\n 'hitpoints': 95,\n 'attack': 127,\n 'specialAttack': 34,\n 'defense': 184,\n 'specialDefense': 36,\n 'speed': 38,\n },\n}, {\n 'id': 714,\n 'name': 'Noibat',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 49,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Noibat', 'Noivern', 48)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 30,\n 'specialAttack': 45,\n 'defense': 35,\n 'specialDefense': 40,\n 'speed': 55,\n },\n}, {\n 'id': 715,\n 'name': 'Noivern',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 187,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 85,\n 'attack': 70,\n 'specialAttack': 97,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 123,\n },\n}, {\n 'id': 716,\n 'name': 'Xerneas',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 126,\n 'attack': 131,\n 'specialAttack': 131,\n 'defense': 95,\n 'specialDefense': 98,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 717,\n 'name': 'Yveltal',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 126,\n 'attack': 131,\n 'specialAttack': 131,\n 'defense': 95,\n 'specialDefense': 98,\n 'speed': 99,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 718,\n 'name': 'Zygarde',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 108,\n 'attack': 100,\n 'specialAttack': 81,\n 'defense': 121,\n 'specialDefense': 95,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 719,\n 'name': 'Diancie',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.MegaEvolution)(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MegaStoneType.Diancite, 'Diancie', 'Mega Diancie')],\n 'base': {\n 'hitpoints': 50,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 150,\n 'specialDefense': 150,\n 'speed': 50,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 719.01,\n 'name': 'Mega Diancie',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 347,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 50,\n 'attack': 160,\n 'specialAttack': 160,\n 'defense': 110,\n 'specialDefense': 110,\n 'speed': 110,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 720,\n 'name': 'Hoopa',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 110,\n 'specialAttack': 150,\n 'defense': 60,\n 'specialDefense': 130,\n 'speed': 70,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 720.01,\n 'name': 'Hoopa (Unbound)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 160,\n 'specialAttack': 170,\n 'defense': 60,\n 'specialDefense': 130,\n 'speed': 70,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 721,\n 'name': 'Volcanion',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 110,\n 'specialAttack': 130,\n 'defense': 120,\n 'specialDefense': 90,\n 'speed': 70,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 722,\n 'name': 'Rowlet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Rowlet', 'Dartrix', 17)],\n 'base': {\n 'hitpoints': 68,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 55,\n 'specialDefense': 50,\n 'speed': 42,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 723,\n 'name': 'Dartrix',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dartrix', 'Decidueye', 34),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dartrix', 'Hisuian Decidueye', 36),\n ],\n 'base': {\n 'hitpoints': 78,\n 'attack': 75,\n 'specialAttack': 70,\n 'defense': 75,\n 'specialDefense': 70,\n 'speed': 52,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 724,\n 'name': 'Decidueye',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 78,\n 'attack': 107,\n 'specialAttack': 100,\n 'defense': 75,\n 'specialDefense': 100,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 724.01,\n 'name': 'Hisuian Decidueye',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hisui,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 88,\n 'attack': 112,\n 'specialAttack': 95,\n 'defense': 80,\n 'specialDefense': 95,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 725,\n 'name': 'Litten',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Litten', 'Torracat', 17)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 65,\n 'specialAttack': 60,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 70,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 726,\n 'name': 'Torracat',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Torracat', 'Incineroar', 34)],\n 'base': {\n 'hitpoints': 65,\n 'attack': 85,\n 'specialAttack': 80,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 90,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 727,\n 'name': 'Incineroar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 95,\n 'attack': 115,\n 'specialAttack': 80,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 728,\n 'name': 'Popplio',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Popplio', 'Brionne', 17)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 54,\n 'specialAttack': 66,\n 'defense': 54,\n 'specialDefense': 56,\n 'speed': 40,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 729,\n 'name': 'Brionne',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Brionne', 'Primarina', 34)],\n 'base': {\n 'hitpoints': 60,\n 'attack': 69,\n 'specialAttack': 91,\n 'defense': 69,\n 'specialDefense': 81,\n 'speed': 50,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 730,\n 'name': 'Primarina',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 239,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 74,\n 'specialAttack': 126,\n 'defense': 74,\n 'specialDefense': 116,\n 'speed': 60,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 731,\n 'name': 'Pikipek',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 53,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pikipek', 'Trumbeak', 14)],\n 'base': {\n 'hitpoints': 35,\n 'attack': 75,\n 'specialAttack': 30,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 65,\n },\n}, {\n 'id': 732,\n 'name': 'Trumbeak',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 124,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Trumbeak', 'Toucannon', 28)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 85,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 75,\n },\n}, {\n 'id': 733,\n 'name': 'Toucannon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 218,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 75,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 60,\n },\n}, {\n 'id': 734,\n 'name': 'Yungoos',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 51,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedLevelEvolution)('Yungoos', 'Gumshoos', 20)],\n 'base': {\n 'hitpoints': 48,\n 'attack': 70,\n 'specialAttack': 30,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 45,\n },\n}, {\n 'id': 735,\n 'name': 'Gumshoos',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 146,\n 'catchRate': 127,\n 'base': {\n 'hitpoints': 88,\n 'attack': 110,\n 'specialAttack': 55,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 45,\n },\n}, {\n 'id': 735.01,\n 'name': 'Totem Gumshoos',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 23,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 146,\n 'catchRate': 127,\n 'base': {\n 'hitpoints': 88,\n 'attack': 110,\n 'specialAttack': 55,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 45,\n },\n}, {\n 'id': 736,\n 'name': 'Grubbin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Grubbin', 'Charjabug', 20)],\n 'base': {\n 'hitpoints': 47,\n 'attack': 62,\n 'specialAttack': 55,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 46,\n },\n}, {\n 'id': 737,\n 'name': 'Charjabug',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 140,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.EnvironmentRestrictedLevelEvolution)('MagneticField', 'Charjabug', 'Vikavolt', 20),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.RegionStoneEvolution)(galarOnly, 'Charjabug', 'Vikavolt', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Thunder_stone),\n ],\n 'base': {\n 'hitpoints': 57,\n 'attack': 82,\n 'specialAttack': 55,\n 'defense': 95,\n 'specialDefense': 75,\n 'speed': 36,\n },\n}, {\n 'id': 738,\n 'name': 'Vikavolt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 225,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 77,\n 'attack': 70,\n 'specialAttack': 145,\n 'defense': 90,\n 'specialDefense': 75,\n 'speed': 43,\n },\n}, {\n 'id': 738.01,\n 'name': 'Totem Vikavolt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 225,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 77,\n 'attack': 80,\n 'specialAttack': 155,\n 'defense': 100,\n 'specialDefense': 85,\n 'speed': 53,\n },\n}, {\n 'id': 739,\n 'name': 'Crabrawler',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 68,\n 'catchRate': 225,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DungeonRestrictedLevelEvolution)('Mount Lanakila', 'Crabrawler', 'Crabominable', 20)],\n 'base': {\n 'hitpoints': 47,\n 'attack': 82,\n 'specialAttack': 42,\n 'defense': 57,\n 'specialDefense': 47,\n 'speed': 63,\n },\n}, {\n 'id': 740,\n 'name': 'Crabominable',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 167,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 97,\n 'attack': 132,\n 'specialAttack': 62,\n 'defense': 77,\n 'specialDefense': 67,\n 'speed': 43,\n },\n}, {\n 'id': 741,\n 'name': 'Oricorio (Baile)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 167,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 70,\n 'specialAttack': 98,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 93,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 741.01,\n 'name': 'Oricorio (Pom-Pom)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 167,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 70,\n 'specialAttack': 98,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 93,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 741.02,\n 'name': 'Oricorio (Pa\\'u)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 167,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 70,\n 'specialAttack': 98,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 93,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 741.03,\n 'name': 'Oricorio (Sensu)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 167,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 70,\n 'specialAttack': 98,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 93,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 742,\n 'name': 'Cutiefly',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cutiefly', 'Ribombee', 25)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 55,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 84,\n },\n}, {\n 'id': 743,\n 'name': 'Ribombee',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 162,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 60,\n 'attack': 55,\n 'specialAttack': 95,\n 'defense': 60,\n 'specialDefense': 70,\n 'speed': 124,\n },\n}, {\n 'id': 743.01,\n 'name': 'Totem Ribombee',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 162,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 60,\n 'attack': 75,\n 'specialAttack': 115,\n 'defense': 80,\n 'specialDefense': 90,\n 'speed': 144,\n },\n}, {\n 'id': 744,\n 'name': 'Rockruff',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 56,\n 'catchRate': 190,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayCyclePartRestrictedLevelEvolution)([_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_11__[\"default\"].Day], 'Rockruff', 'Lycanroc (Midday)', 25),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayCyclePartRestrictedLevelEvolution)([_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_11__[\"default\"].Night], 'Rockruff', 'Lycanroc (Midnight)', 25),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayCyclePartRestrictedLevelEvolution)([_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_11__[\"default\"].Dusk], 'Rockruff', 'Lycanroc (Dusk)', 25),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayCyclePartRestrictedLevelEvolution)([_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_11__[\"default\"].Dawn], 'Rockruff', 'Lycanroc (Dusk)', 25),\n ],\n 'base': {\n 'hitpoints': 45,\n 'attack': 65,\n 'specialAttack': 30,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 60,\n },\n}, {\n 'id': 745,\n 'name': 'Lycanroc (Midday)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 75,\n 'attack': 115,\n 'specialAttack': 55,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 112,\n },\n}, {\n 'id': 745.01,\n 'name': 'Lycanroc (Midnight)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 85,\n 'attack': 115,\n 'specialAttack': 55,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 82,\n },\n}, {\n 'id': 745.02,\n 'name': 'Lycanroc (Dusk)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 90,\n 'base': {\n 'hitpoints': 75,\n 'attack': 117,\n 'specialAttack': 55,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 110,\n },\n}, {\n 'id': 746,\n 'name': 'Wishiwashi (Solo)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 61,\n 'catchRate': 60,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wishiwashi (Solo)', 'Wishiwashi (School)', 20)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 20,\n 'specialAttack': 25,\n 'defense': 20,\n 'specialDefense': 25,\n 'speed': 40,\n },\n}, {\n 'id': 746.01,\n 'name': 'Wishiwashi (School)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 61,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 45,\n 'attack': 140,\n 'specialAttack': 140,\n 'defense': 130,\n 'specialDefense': 135,\n 'speed': 30,\n },\n}, {\n 'id': 746.02,\n 'name': 'Totem Wishiwashi',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 23,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 61,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 45,\n 'attack': 140,\n 'specialAttack': 140,\n 'defense': 140,\n 'specialDefense': 135,\n 'speed': 30,\n },\n}, {\n 'id': 747,\n 'name': 'Mareanie',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Mareanie', 'Toxapex', 38)],\n 'base': {\n 'hitpoints': 50,\n 'attack': 53,\n 'specialAttack': 43,\n 'defense': 62,\n 'specialDefense': 52,\n 'speed': 45,\n },\n}, {\n 'id': 748,\n 'name': 'Toxapex',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 50,\n 'attack': 63,\n 'specialAttack': 53,\n 'defense': 152,\n 'specialDefense': 142,\n 'speed': 35,\n },\n}, {\n 'id': 749,\n 'name': 'Mudbray',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 77,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Mudbray', 'Mudsdale', 30)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 100,\n 'specialAttack': 45,\n 'defense': 70,\n 'specialDefense': 55,\n 'speed': 45,\n },\n}, {\n 'id': 750,\n 'name': 'Mudsdale',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 100,\n 'attack': 125,\n 'specialAttack': 55,\n 'defense': 100,\n 'specialDefense': 85,\n 'speed': 35,\n },\n}, {\n 'id': 751,\n 'name': 'Dewpider',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 54,\n 'catchRate': 200,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dewpider', 'Araquanid', 22)],\n 'base': {\n 'hitpoints': 38,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 52,\n 'specialDefense': 72,\n 'speed': 27,\n },\n}, {\n 'id': 752,\n 'name': 'Araquanid',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'catchRate': 100,\n 'base': {\n 'hitpoints': 68,\n 'attack': 70,\n 'specialAttack': 50,\n 'defense': 92,\n 'specialDefense': 132,\n 'speed': 42,\n },\n}, {\n 'id': 752.01,\n 'name': 'Totem Araquanid',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 23,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 159,\n 'catchRate': 100,\n 'base': {\n 'hitpoints': 68,\n 'attack': 70,\n 'specialAttack': 50,\n 'defense': 92,\n 'specialDefense': 132,\n 'speed': 52,\n },\n}, {\n 'id': 753,\n 'name': 'Fomantis',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 50,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedLevelEvolution)('Fomantis', 'Lurantis', 34)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 55,\n 'specialAttack': 50,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 35,\n },\n}, {\n 'id': 754,\n 'name': 'Lurantis',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 105,\n 'specialAttack': 80,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 45,\n },\n}, {\n 'id': 754.01,\n 'name': 'Totem Lurantis',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 70,\n 'attack': 105,\n 'specialAttack': 80,\n 'defense': 90,\n 'specialDefense': 90,\n 'speed': 65,\n },\n}, {\n 'id': 755,\n 'name': 'Morelull',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 57,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Morelull', 'Shiinotic', 24)],\n 'base': {\n 'hitpoints': 40,\n 'attack': 35,\n 'specialAttack': 65,\n 'defense': 55,\n 'specialDefense': 75,\n 'speed': 15,\n },\n}, {\n 'id': 756,\n 'name': 'Shiinotic',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 142,\n 'catchRate': 75,\n 'base': {\n 'hitpoints': 60,\n 'attack': 45,\n 'specialAttack': 90,\n 'defense': 80,\n 'specialDefense': 100,\n 'speed': 30,\n },\n}, {\n 'id': 757,\n 'name': 'Salandit',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Salandit', 'Salazzle', 33)],\n 'base': {\n 'hitpoints': 48,\n 'attack': 44,\n 'specialAttack': 71,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 77,\n },\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 758,\n 'name': 'Salazzle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 68,\n 'attack': 64,\n 'specialAttack': 111,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 117,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 758.01,\n 'name': 'Totem Salazzle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 68,\n 'attack': 64,\n 'specialAttack': 111,\n 'defense': 60,\n 'specialDefense': 70,\n 'speed': 117,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 759,\n 'name': 'Stufful',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 68,\n 'catchRate': 140,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Stufful', 'Bewear', 27)],\n 'base': {\n 'hitpoints': 70,\n 'attack': 75,\n 'specialAttack': 45,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 50,\n },\n}, {\n 'id': 760,\n 'name': 'Bewear',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 70,\n 'base': {\n 'hitpoints': 120,\n 'attack': 125,\n 'specialAttack': 55,\n 'defense': 80,\n 'specialDefense': 60,\n 'speed': 60,\n },\n}, {\n 'id': 761,\n 'name': 'Bounsweet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 42,\n 'catchRate': 235,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Bounsweet', 'Steenee', 18)],\n 'base': {\n 'hitpoints': 42,\n 'attack': 30,\n 'specialAttack': 30,\n 'defense': 38,\n 'specialDefense': 38,\n 'speed': 32,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 762,\n 'name': 'Steenee',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 102,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Steenee', 'Tsareena', 29)],\n 'base': {\n 'hitpoints': 52,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 48,\n 'specialDefense': 48,\n 'speed': 62,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 763,\n 'name': 'Tsareena',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 230,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 72,\n 'attack': 120,\n 'specialAttack': 50,\n 'defense': 98,\n 'specialDefense': 98,\n 'speed': 72,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 764,\n 'name': 'Comfey',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 170,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 51,\n 'attack': 52,\n 'specialAttack': 82,\n 'defense': 90,\n 'specialDefense': 110,\n 'speed': 100,\n },\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 765,\n 'name': 'Oranguru',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 172,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 90,\n 'attack': 60,\n 'specialAttack': 90,\n 'defense': 80,\n 'specialDefense': 110,\n 'speed': 60,\n },\n}, {\n 'id': 766,\n 'name': 'Passimian',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 172,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 100,\n 'attack': 120,\n 'specialAttack': 40,\n 'defense': 90,\n 'specialDefense': 60,\n 'speed': 80,\n },\n}, {\n 'id': 767,\n 'name': 'Wimpod',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 46,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wimpod', 'Golisopod', 30)],\n 'base': {\n 'hitpoints': 25,\n 'attack': 35,\n 'specialAttack': 20,\n 'defense': 40,\n 'specialDefense': 30,\n 'speed': 80,\n },\n}, {\n 'id': 768,\n 'name': 'Golisopod',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 186,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 125,\n 'specialAttack': 60,\n 'defense': 140,\n 'specialDefense': 90,\n 'speed': 40,\n },\n}, {\n 'id': 769,\n 'name': 'Sandygast',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 64,\n 'catchRate': 140,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sandygast', 'Palossand', 42)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 55,\n 'specialAttack': 70,\n 'defense': 80,\n 'specialDefense': 45,\n 'speed': 15,\n },\n}, {\n 'id': 770,\n 'name': 'Palossand',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 85,\n 'attack': 75,\n 'specialAttack': 100,\n 'defense': 110,\n 'specialDefense': 75,\n 'speed': 35,\n },\n}, {\n 'id': 771,\n 'name': 'Pyukumuku',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 144,\n 'catchRate': 60,\n 'base': {\n 'hitpoints': 55,\n 'attack': 60,\n 'specialAttack': 30,\n 'defense': 130,\n 'specialDefense': 130,\n 'speed': 5,\n },\n}, {\n 'id': 772,\n 'name': 'Type: Null',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 107,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Type: Null', 'Silvally (Normal)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 59,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 773,\n 'name': 'Silvally (Normal)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 773.01,\n 'name': 'Silvally (Fire)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.02,\n 'name': 'Silvally (Water)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.03,\n 'name': 'Silvally (Electric)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.04,\n 'name': 'Silvally (Grass)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.05,\n 'name': 'Silvally (Ice)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.06,\n 'name': 'Silvally (Fighting)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.07,\n 'name': 'Silvally (Poison)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.08,\n 'name': 'Silvally (Ground)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.09,\n 'name': 'Silvally (Flying)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.10,\n 'name': 'Silvally (Psychic)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.11,\n 'name': 'Silvally (Bug)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.12,\n 'name': 'Silvally (Rock)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.13,\n 'name': 'Silvally (Ghost)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.14,\n 'name': 'Silvally (Dragon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.15,\n 'name': 'Silvally (Dark)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.16,\n 'name': 'Silvally (Steel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 773.17,\n 'name': 'Silvally (Fairy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 95,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 95,\n },\n}, {\n 'id': 774,\n 'name': 'Minior (Meteor)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 60,\n 'defense': 100,\n 'specialDefense': 100,\n 'speed': 60,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].underground, id: 'Star Piece' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 774.01,\n 'name': 'Minior (Red Core)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 774.02,\n 'name': 'Minior (Orange Core)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 774.03,\n 'name': 'Minior (Yellow Core)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 774.04,\n 'name': 'Minior (Green Core)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 774.05,\n 'name': 'Minior (Blue Core)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 774.06,\n 'name': 'Minior (Indigo Core)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 774.07,\n 'name': 'Minior (Violet Core)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 154,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 60,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 120,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 775,\n 'name': 'Komala',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 168,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 65,\n 'attack': 115,\n 'specialAttack': 75,\n 'defense': 65,\n 'specialDefense': 95,\n 'speed': 65,\n },\n}, {\n 'id': 776,\n 'name': 'Turtonator',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 70,\n 'base': {\n 'hitpoints': 60,\n 'attack': 78,\n 'specialAttack': 91,\n 'defense': 135,\n 'specialDefense': 85,\n 'speed': 36,\n },\n}, {\n 'id': 777,\n 'name': 'Togedemaru',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 152,\n 'catchRate': 180,\n 'base': {\n 'hitpoints': 65,\n 'attack': 98,\n 'specialAttack': 40,\n 'defense': 63,\n 'specialDefense': 73,\n 'speed': 96,\n },\n}, {\n 'id': 777.01,\n 'name': 'Totem Togedemaru',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 152,\n 'catchRate': 180,\n 'base': {\n 'hitpoints': 65,\n 'attack': 98,\n 'specialAttack': 40,\n 'defense': 83,\n 'specialDefense': 73,\n 'speed': 96,\n },\n}, {\n 'id': 778,\n 'name': 'Mimikyu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 167,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 55,\n 'attack': 90,\n 'specialAttack': 50,\n 'defense': 80,\n 'specialDefense': 105,\n 'speed': 96,\n },\n}, {\n 'id': 778.01,\n 'name': 'Totem Mimikyu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 167,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 55,\n 'attack': 100,\n 'specialAttack': 60,\n 'defense': 90,\n 'specialDefense': 115,\n 'speed': 106,\n },\n}, {\n 'id': 779,\n 'name': 'Bruxish',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 80,\n 'base': {\n 'hitpoints': 68,\n 'attack': 105,\n 'specialAttack': 70,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 92,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Razor_fang' },\n}, {\n 'id': 780,\n 'name': 'Drampa',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 70,\n 'base': {\n 'hitpoints': 78,\n 'attack': 60,\n 'specialAttack': 135,\n 'defense': 85,\n 'specialDefense': 91,\n 'speed': 36,\n },\n}, {\n 'id': 781,\n 'name': 'Dhelmise',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 181,\n 'catchRate': 25,\n 'base': {\n 'hitpoints': 70,\n 'attack': 131,\n 'specialAttack': 86,\n 'defense': 100,\n 'specialDefense': 90,\n 'speed': 40,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 782,\n 'name': 'Jangmo-o',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Jangmo-o', 'Hakamo-o', 35)],\n 'base': {\n 'hitpoints': 45,\n 'attack': 55,\n 'specialAttack': 45,\n 'defense': 65,\n 'specialDefense': 45,\n 'speed': 45,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Razor_claw' },\n}, {\n 'id': 783,\n 'name': 'Hakamo-o',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Hakamo-o', 'Kommo-o', 45)],\n 'base': {\n 'hitpoints': 55,\n 'attack': 75,\n 'specialAttack': 65,\n 'defense': 90,\n 'specialDefense': 70,\n 'speed': 65,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Razor_claw' },\n}, {\n 'id': 784,\n 'name': 'Kommo-o',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 110,\n 'specialAttack': 100,\n 'defense': 125,\n 'specialDefense': 105,\n 'speed': 85,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Razor_claw' },\n}, {\n 'id': 784.01,\n 'name': 'Totem Kommo-o',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 90,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 75,\n 'attack': 120,\n 'specialAttack': 110,\n 'defense': 135,\n 'specialDefense': 115,\n 'speed': 95,\n },\n}, {\n 'id': 785,\n 'name': 'Tapu Koko',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 70,\n 'attack': 115,\n 'specialAttack': 95,\n 'defense': 85,\n 'specialDefense': 75,\n 'speed': 130,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 786,\n 'name': 'Tapu Lele',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 130,\n 'defense': 75,\n 'specialDefense': 115,\n 'speed': 95,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 787,\n 'name': 'Tapu Bulu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 70,\n 'attack': 130,\n 'specialAttack': 85,\n 'defense': 115,\n 'specialDefense': 95,\n 'speed': 75,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 788,\n 'name': 'Tapu Fini',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 70,\n 'attack': 75,\n 'specialAttack': 95,\n 'defense': 115,\n 'specialDefense': 130,\n 'speed': 85,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 789,\n 'name': 'Cosmog',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 40,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cosmog', 'Cosmoem', 43)],\n 'base': {\n 'hitpoints': 43,\n 'attack': 29,\n 'specialAttack': 29,\n 'defense': 31,\n 'specialDefense': 31,\n 'speed': 37,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 790,\n 'name': 'Cosmoem',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 140,\n 'catchRate': 45,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.DayTimedLevelEvolution)('Cosmoem', 'Solgaleo', 53),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedLevelEvolution)('Cosmoem', 'Lunala', 53),\n ],\n 'base': {\n 'hitpoints': 43,\n 'attack': 29,\n 'specialAttack': 29,\n 'defense': 131,\n 'specialDefense': 131,\n 'speed': 37,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 791,\n 'name': 'Solgaleo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Solgaleo', 'Solgaleo (Radiant Sun)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Solar_light)],\n 'base': {\n 'hitpoints': 137,\n 'attack': 137,\n 'specialAttack': 113,\n 'defense': 107,\n 'specialDefense': 89,\n 'speed': 97,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Solar_light' },\n}, {\n 'id': 791.01,\n 'name': 'Solgaleo (Radiant Sun)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': null,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 137,\n 'attack': 137,\n 'specialAttack': 113,\n 'defense': 107,\n 'specialDefense': 89,\n 'speed': 97,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Solar_light' },\n}, {\n 'id': 792,\n 'name': 'Lunala',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 306,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Lunala', 'Lunala (Full Moon)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Lunar_light)],\n 'base': {\n 'hitpoints': 137,\n 'attack': 113,\n 'specialAttack': 137,\n 'defense': 89,\n 'specialDefense': 107,\n 'speed': 97,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Lunar_light' },\n}, {\n 'id': 792.01,\n 'name': 'Lunala (Full Moon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': null,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 137,\n 'attack': 113,\n 'specialAttack': 137,\n 'defense': 89,\n 'specialDefense': 107,\n 'speed': 97,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Lunar_light' },\n}, {\n 'id': 793,\n 'name': 'Nihilego',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 109,\n 'attack': 53,\n 'specialAttack': 127,\n 'defense': 47,\n 'specialDefense': 131,\n 'speed': 103,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 794,\n 'name': 'Buzzwole',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 107,\n 'attack': 139,\n 'specialAttack': 53,\n 'defense': 139,\n 'specialDefense': 53,\n 'speed': 79,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 795,\n 'name': 'Pheromosa',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 71,\n 'attack': 137,\n 'specialAttack': 137,\n 'defense': 37,\n 'specialDefense': 37,\n 'speed': 151,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 796,\n 'name': 'Xurkitree',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 83,\n 'attack': 89,\n 'specialAttack': 173,\n 'defense': 71,\n 'specialDefense': 71,\n 'speed': 83,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 797,\n 'name': 'Celesteela',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 97,\n 'attack': 101,\n 'specialAttack': 107,\n 'defense': 103,\n 'specialDefense': 101,\n 'speed': 61,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 798,\n 'name': 'Kartana',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 59,\n 'attack': 181,\n 'specialAttack': 59,\n 'defense': 131,\n 'specialDefense': 31,\n 'speed': 109,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 799,\n 'name': 'Guzzlord',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 223,\n 'attack': 101,\n 'specialAttack': 97,\n 'defense': 53,\n 'specialDefense': 53,\n 'speed': 43,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 800,\n 'name': 'Necrozma',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Necrozma', 'Necrozma (Dusk Mane)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Solar_light),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Necrozma', 'Necrozma (Dawn Wings)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Lunar_light),\n ],\n 'base': {\n 'hitpoints': 97,\n 'attack': 107,\n 'specialAttack': 127,\n 'defense': 101,\n 'specialDefense': 89,\n 'speed': 79,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Pure_light' },\n}, {\n 'id': 800.01,\n 'name': 'Necrozma (Dusk Mane)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Necrozma (Dusk Mane)', 'Ultra Necrozma', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Pure_light)],\n 'base': {\n 'hitpoints': 97,\n 'attack': 157,\n 'specialAttack': 113,\n 'defense': 127,\n 'specialDefense': 109,\n 'speed': 77,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 800.02,\n 'name': 'Necrozma (Dawn Wings)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Necrozma (Dawn Wings)', 'Ultra Necrozma', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Pure_light)],\n 'base': {\n 'hitpoints': 97,\n 'attack': 113,\n 'specialAttack': 157,\n 'defense': 109,\n 'specialDefense': 127,\n 'speed': 77,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 800.03,\n 'name': 'Ultra Necrozma',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 97,\n 'attack': 167,\n 'specialAttack': 167,\n 'defense': 97,\n 'specialDefense': 97,\n 'speed': 129,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 801,\n 'name': 'Magearna',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 95,\n 'specialAttack': 130,\n 'defense': 115,\n 'specialDefense': 115,\n 'speed': 65,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 801.01,\n 'name': 'Magearna (Original Color)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 80,\n 'attack': 95,\n 'specialAttack': 130,\n 'defense': 115,\n 'specialDefense': 115,\n 'speed': 65,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 802,\n 'name': 'Marshadow',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Marshadow', 'Marshadow (Zenith)', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Crystallized_shadow)],\n 'base': {\n 'hitpoints': 90,\n 'attack': 125,\n 'specialAttack': 90,\n 'defense': 80,\n 'specialDefense': 90,\n 'speed': 125,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Crystallized_shadow' },\n}, {\n 'id': 802.01,\n 'name': 'Marshadow (Zenith)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 90,\n 'attack': 125,\n 'specialAttack': 90,\n 'defense': 80,\n 'specialDefense': 90,\n 'speed': 125,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Crystallized_shadow' },\n}, {\n 'id': 803,\n 'name': 'Poipole',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 189,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Poipole', 'Naganadel', 41)],\n 'base': {\n 'hitpoints': 67,\n 'attack': 73,\n 'specialAttack': 73,\n 'defense': 67,\n 'specialDefense': 67,\n 'speed': 73,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 804,\n 'name': 'Naganadel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 243,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 73,\n 'attack': 73,\n 'specialAttack': 127,\n 'defense': 73,\n 'specialDefense': 73,\n 'speed': 121,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 805,\n 'name': 'Stakataka',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 61,\n 'attack': 131,\n 'specialAttack': 53,\n 'defense': 211,\n 'specialDefense': 101,\n 'speed': 13,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 806,\n 'name': 'Blacephalon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 30,\n 'base': {\n 'hitpoints': 53,\n 'attack': 127,\n 'specialAttack': 151,\n 'defense': 53,\n 'specialDefense': 79,\n 'speed': 107,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 807,\n 'name': 'Zeraora',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 88,\n 'attack': 112,\n 'specialAttack': 102,\n 'defense': 75,\n 'specialDefense': 80,\n 'speed': 143,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 808,\n 'name': 'Meltan',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.none,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 135,\n 'catchRate': 3,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Meltan', 'Melmetal'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Meltan', 'Gigantamax Melmetal'),\n ],\n 'base': {\n 'hitpoints': 46,\n 'attack': 65,\n 'specialAttack': 55,\n 'defense': 65,\n 'specialDefense': 35,\n 'speed': 34,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 809,\n 'name': 'Melmetal',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.none,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 135,\n 'attack': 143,\n 'specialAttack': 80,\n 'defense': 143,\n 'specialDefense': 65,\n 'speed': 34,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 809.01,\n 'name': 'Gigantamax Melmetal',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.none,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 270,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 270,\n 'attack': 143,\n 'specialAttack': 80,\n 'defense': 143,\n 'specialDefense': 65,\n 'speed': 34,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 810,\n 'name': 'Grookey',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 40,\n 'speed': 65,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Grookey', 'Thwackey', 16)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 811,\n 'name': 'Thwackey',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 55,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 80,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Thwackey', 'Rillaboom', 35),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Thwackey', 'Gigantamax Rillaboom'),\n ],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 812,\n 'name': 'Rillaboom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 100,\n 'attack': 125,\n 'specialAttack': 60,\n 'defense': 90,\n 'specialDefense': 70,\n 'speed': 85,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 812.01,\n 'name': 'Gigantamax Rillaboom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 200,\n 'attack': 125,\n 'specialAttack': 60,\n 'defense': 90,\n 'specialDefense': 70,\n 'speed': 85,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 813,\n 'name': 'Scorbunny',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 50,\n 'attack': 71,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 69,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Scorbunny', 'Raboot', 16)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 814,\n 'name': 'Raboot',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 65,\n 'attack': 86,\n 'specialAttack': 55,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 94,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Raboot', 'Cinderace', 35),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Raboot', 'Gigantamax Cinderace'),\n ],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 815,\n 'name': 'Cinderace',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 80,\n 'attack': 116,\n 'specialAttack': 65,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 119,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 815.01,\n 'name': 'Gigantamax Cinderace',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 160,\n 'attack': 116,\n 'specialAttack': 65,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 119,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 816,\n 'name': 'Sobble',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 50,\n 'attack': 40,\n 'specialAttack': 70,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sobble', 'Drizzile', 16)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 817,\n 'name': 'Drizzile',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 95,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 147,\n 'catchRate': 45,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Drizzile', 'Inteleon', 35),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Drizzile', 'Gigantamax Inteleon'),\n ],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 818,\n 'name': 'Inteleon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 125,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 120,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 818.01,\n 'name': 'Gigantamax Inteleon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 140,\n 'attack': 85,\n 'specialAttack': 125,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 120,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 819,\n 'name': 'Skwovet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 70,\n 'attack': 55,\n 'specialAttack': 35,\n 'defense': 55,\n 'specialDefense': 35,\n 'speed': 25,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 55,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Skwovet', 'Greedent', 24)],\n}, {\n 'id': 820,\n 'name': 'Greedent',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 120,\n 'attack': 95,\n 'specialAttack': 55,\n 'defense': 95,\n 'specialDefense': 75,\n 'speed': 20,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'catchRate': 90,\n}, {\n 'id': 821,\n 'name': 'Rookidee',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 38,\n 'attack': 47,\n 'specialAttack': 33,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 57,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 49,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Rookidee', 'Corvisquire', 18)],\n}, {\n 'id': 822,\n 'name': 'Corvisquire',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 68,\n 'attack': 67,\n 'specialAttack': 43,\n 'defense': 55,\n 'specialDefense': 55,\n 'speed': 77,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 128,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Corvisquire', 'Corviknight', 38),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Corvisquire', 'Gigantamax Corviknight'),\n ],\n}, {\n 'id': 823,\n 'name': 'Corviknight',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel,\n ],\n 'base': {\n 'hitpoints': 98,\n 'attack': 87,\n 'specialAttack': 53,\n 'defense': 105,\n 'specialDefense': 85,\n 'speed': 67,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 248,\n 'catchRate': 45,\n}, {\n 'id': 823.01,\n 'name': 'Gigantamax Corviknight',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel,\n ],\n 'base': {\n 'hitpoints': 196,\n 'attack': 87,\n 'specialAttack': 53,\n 'defense': 105,\n 'specialDefense': 85,\n 'speed': 67,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 248,\n 'catchRate': 45,\n}, {\n 'id': 824,\n 'name': 'Blipbug',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'base': {\n 'hitpoints': 25,\n 'attack': 20,\n 'specialAttack': 25,\n 'defense': 20,\n 'specialDefense': 45,\n 'speed': 45,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 36,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Blipbug', 'Dottler', 10)],\n}, {\n 'id': 825,\n 'name': 'Dottler',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic,\n ],\n 'base': {\n 'hitpoints': 50,\n 'attack': 35,\n 'specialAttack': 50,\n 'defense': 80,\n 'specialDefense': 90,\n 'speed': 30,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 117,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dottler', 'Orbeetle', 30),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Dottler', 'Gigantamax Orbeetle'),\n ],\n}, {\n 'id': 826,\n 'name': 'Orbeetle',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic,\n ],\n 'base': {\n 'hitpoints': 60,\n 'attack': 45,\n 'specialAttack': 80,\n 'defense': 110,\n 'specialDefense': 120,\n 'speed': 90,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 253,\n 'catchRate': 45,\n}, {\n 'id': 826.01,\n 'name': 'Gigantamax Orbeetle',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic,\n ],\n 'base': {\n 'hitpoints': 120,\n 'attack': 45,\n 'specialAttack': 80,\n 'defense': 110,\n 'specialDefense': 120,\n 'speed': 90,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 253,\n 'catchRate': 45,\n}, {\n 'id': 827,\n 'name': 'Nickit',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 40,\n 'attack': 28,\n 'specialAttack': 47,\n 'defense': 28,\n 'specialDefense': 52,\n 'speed': 50,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 49,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Nickit', 'Thievul', 18)],\n}, {\n 'id': 828,\n 'name': 'Thievul',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 70,\n 'attack': 58,\n 'specialAttack': 87,\n 'defense': 58,\n 'specialDefense': 92,\n 'speed': 90,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 159,\n 'catchRate': 127,\n}, {\n 'id': 829,\n 'name': 'Gossifleur',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 10,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 50,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Gossifleur', 'Eldegoss', 20)],\n}, {\n 'id': 830,\n 'name': 'Eldegoss',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 60,\n 'attack': 50,\n 'specialAttack': 80,\n 'defense': 90,\n 'specialDefense': 120,\n 'speed': 60,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 161,\n 'catchRate': 75,\n}, {\n 'id': 831,\n 'name': 'Wooloo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 42,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 55,\n 'specialDefense': 45,\n 'speed': 48,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 122,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wooloo', 'Dubwool', 24)],\n}, {\n 'id': 832,\n 'name': 'Dubwool',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 72,\n 'attack': 80,\n 'specialAttack': 60,\n 'defense': 100,\n 'specialDefense': 90,\n 'speed': 88,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 172,\n 'catchRate': 127,\n}, {\n 'id': 833,\n 'name': 'Chewtle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 50,\n 'attack': 64,\n 'specialAttack': 38,\n 'defense': 50,\n 'specialDefense': 38,\n 'speed': 44,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 57,\n 'catchRate': 255,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Chewtle', 'Drednaw', 22),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Chewtle', 'Gigantamax Drednaw'),\n ],\n}, {\n 'id': 834,\n 'name': 'Drednaw',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock,\n ],\n 'base': {\n 'hitpoints': 90,\n 'attack': 115,\n 'specialAttack': 48,\n 'defense': 90,\n 'specialDefense': 68,\n 'speed': 74,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 75,\n}, {\n 'id': 834.01,\n 'name': 'Gigantamax Drednaw',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock,\n ],\n 'base': {\n 'hitpoints': 180,\n 'attack': 115,\n 'specialAttack': 48,\n 'defense': 90,\n 'specialDefense': 68,\n 'speed': 74,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 75,\n}, {\n 'id': 835,\n 'name': 'Yamper',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 59,\n 'attack': 45,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 26,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 54,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Yamper', 'Boltund', 25)],\n}, {\n 'id': 836,\n 'name': 'Boltund',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 69,\n 'attack': 90,\n 'specialAttack': 90,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 121,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 172,\n 'catchRate': 45,\n}, {\n 'id': 837,\n 'name': 'Rolycoly',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 30,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 30,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 48,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Rolycoly', 'Carkol', 18)],\n}, {\n 'id': 838,\n 'name': 'Carkol',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire,\n ],\n 'base': {\n 'hitpoints': 80,\n 'attack': 60,\n 'specialAttack': 60,\n 'defense': 90,\n 'specialDefense': 70,\n 'speed': 50,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 144,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Carkol', 'Coalossal', 34),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Carkol', 'Gigantamax Coalossal'),\n ],\n}, {\n 'id': 839,\n 'name': 'Coalossal',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire,\n ],\n 'base': {\n 'hitpoints': 110,\n 'attack': 80,\n 'specialAttack': 80,\n 'defense': 120,\n 'specialDefense': 90,\n 'speed': 30,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 255,\n 'catchRate': 45,\n}, {\n 'id': 839.01,\n 'name': 'Gigantamax Coalossal',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire,\n ],\n 'base': {\n 'hitpoints': 220,\n 'attack': 80,\n 'specialAttack': 80,\n 'defense': 120,\n 'specialDefense': 90,\n 'speed': 30,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 255,\n 'catchRate': 45,\n}, {\n 'id': 840,\n 'name': 'Applin',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 80,\n 'specialDefense': 40,\n 'speed': 20,\n },\n 'eggCycles': 20,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Applin', 'Flapple', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Tart_apple),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Applin', 'Appletun', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Sweet_apple),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Applin', 'Dipplin', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Syrupy_apple),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Applin', 'Gigantamax Flapple'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Applin', 'Gigantamax Appletun'),\n ],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 52,\n 'catchRate': 255,\n}, {\n 'id': 840.01,\n 'name': 'Exposed Applin',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 40,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 52,\n 'catchRate': 255,\n}, {\n 'id': 841,\n 'name': 'Flapple',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 110,\n 'specialAttack': 95,\n 'defense': 80,\n 'specialDefense': 60,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 170,\n 'catchRate': 45,\n}, {\n 'id': 841.01,\n 'name': 'Gigantamax Flapple',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 140,\n 'attack': 110,\n 'specialAttack': 95,\n 'defense': 80,\n 'specialDefense': 60,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 170,\n 'catchRate': 45,\n}, {\n 'id': 842,\n 'name': 'Appletun',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 110,\n 'attack': 85,\n 'specialAttack': 100,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 30,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 170,\n 'catchRate': 45,\n}, {\n 'id': 842.01,\n 'name': 'Gigantamax Appletun',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 220,\n 'attack': 85,\n 'specialAttack': 100,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 30,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 170,\n 'catchRate': 45,\n}, {\n 'id': 843,\n 'name': 'Silicobra',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'base': {\n 'hitpoints': 52,\n 'attack': 57,\n 'specialAttack': 35,\n 'defense': 75,\n 'specialDefense': 50,\n 'speed': 46,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 63,\n 'catchRate': 255,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Silicobra', 'Sandaconda', 36),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Silicobra', 'Gigantamax Sandaconda'),\n ],\n}, {\n 'id': 844,\n 'name': 'Sandaconda',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'base': {\n 'hitpoints': 72,\n 'attack': 107,\n 'specialAttack': 65,\n 'defense': 125,\n 'specialDefense': 70,\n 'speed': 71,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 179,\n 'catchRate': 120,\n}, {\n 'id': 844.01,\n 'name': 'Gigantamax Sandaconda',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'base': {\n 'hitpoints': 144,\n 'attack': 107,\n 'specialAttack': 65,\n 'defense': 125,\n 'specialDefense': 70,\n 'speed': 71,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 179,\n 'catchRate': 120,\n}, {\n 'id': 845,\n 'name': 'Cramorant',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 55,\n 'specialDefense': 95,\n 'speed': 85,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 45,\n}, {\n 'id': 845.01,\n 'name': 'Cramorant (Gulping)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 55,\n 'specialDefense': 95,\n 'speed': 85,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 45,\n}, {\n 'id': 845.02,\n 'name': 'Cramorant (Gorging)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 85,\n 'defense': 55,\n 'specialDefense': 95,\n 'speed': 85,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 45,\n}, {\n 'id': 846,\n 'name': 'Arrokuda',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 41,\n 'attack': 63,\n 'specialAttack': 40,\n 'defense': 40,\n 'specialDefense': 30,\n 'speed': 66,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Arrokuda', 'Barraskewda', 26)],\n}, {\n 'id': 847,\n 'name': 'Barraskewda',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 61,\n 'attack': 123,\n 'specialAttack': 60,\n 'defense': 60,\n 'specialDefense': 50,\n 'speed': 136,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 172,\n 'catchRate': 60,\n}, {\n 'id': 848,\n 'name': 'Toxel',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison,\n ],\n 'base': {\n 'hitpoints': 40,\n 'attack': 38,\n 'specialAttack': 54,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 40,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 48,\n 'catchRate': 75,\n 'baby': true,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Toxel', 'Toxtricity (Amped)', 30),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Toxel', 'Toxtricity (Low Key)', 30),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Toxel', 'Gigantamax Toxtricity'),\n ],\n}, {\n 'id': 849,\n 'name': 'Toxtricity (Amped)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison,\n ],\n 'base': {\n 'hitpoints': 75,\n 'attack': 98,\n 'specialAttack': 114,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 75,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 176,\n 'catchRate': 45,\n}, {\n 'id': 849.01,\n 'name': 'Toxtricity (Low Key)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison,\n ],\n 'base': {\n 'hitpoints': 75,\n 'attack': 98,\n 'specialAttack': 114,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 75,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 176,\n 'catchRate': 45,\n}, {\n 'id': 849.02,\n 'name': 'Gigantamax Toxtricity',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison,\n ],\n 'base': {\n 'hitpoints': 150,\n 'attack': 98,\n 'specialAttack': 114,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 75,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 176,\n 'catchRate': 45,\n}, {\n 'id': 850,\n 'name': 'Sizzlipede',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n ],\n 'base': {\n 'hitpoints': 50,\n 'attack': 65,\n 'specialAttack': 50,\n 'defense': 45,\n 'specialDefense': 50,\n 'speed': 45,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sizzlipede', 'Centiskorch', 28),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Sizzlipede', 'Gigantamax Centiskorch'),\n ],\n}, {\n 'id': 851,\n 'name': 'Centiskorch',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n ],\n 'base': {\n 'hitpoints': 100,\n 'attack': 115,\n 'specialAttack': 90,\n 'defense': 65,\n 'specialDefense': 90,\n 'speed': 65,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'catchRate': 75,\n}, {\n 'id': 851.01,\n 'name': 'Gigantamax Centiskorch',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n ],\n 'base': {\n 'hitpoints': 200,\n 'attack': 115,\n 'specialAttack': 90,\n 'defense': 65,\n 'specialDefense': 90,\n 'speed': 65,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 184,\n 'catchRate': 75,\n}, {\n 'id': 852,\n 'name': 'Clobbopus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 50,\n 'attack': 68,\n 'specialAttack': 50,\n 'defense': 60,\n 'specialDefense': 50,\n 'speed': 32,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Clobbopus', 'Grapploct', 35)],\n}, {\n 'id': 853,\n 'name': 'Grapploct',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 80,\n 'attack': 118,\n 'specialAttack': 70,\n 'defense': 90,\n 'specialDefense': 80,\n 'speed': 42,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 168,\n 'catchRate': 45,\n}, {\n 'id': 854,\n 'name': 'Sinistea',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 74,\n 'defense': 45,\n 'specialDefense': 54,\n 'speed': 50,\n },\n 'eggCycles': 20,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Sinistea', 'Polteageist', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Cracked_pot)],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 62,\n 'catchRate': 120,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 855,\n 'name': 'Polteageist',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 60,\n 'attack': 65,\n 'specialAttack': 134,\n 'defense': 65,\n 'specialDefense': 114,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'catchRate': 60,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 856,\n 'name': 'Hatenna',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 42,\n 'attack': 30,\n 'specialAttack': 56,\n 'defense': 45,\n 'specialDefense': 53,\n 'speed': 39,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 53,\n 'catchRate': 235,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Hatenna', 'Hattrem', 32)],\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 857,\n 'name': 'Hattrem',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 57,\n 'attack': 40,\n 'specialAttack': 86,\n 'defense': 65,\n 'specialDefense': 73,\n 'speed': 49,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 130,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Hattrem', 'Hatterene', 42),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Hattrem', 'Gigantamax Hatterene'),\n ],\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 858,\n 'name': 'Hatterene',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy,\n ],\n 'base': {\n 'hitpoints': 57,\n 'attack': 90,\n 'specialAttack': 136,\n 'defense': 95,\n 'specialDefense': 103,\n 'speed': 29,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 255,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 858.01,\n 'name': 'Gigantamax Hatterene',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy,\n ],\n 'base': {\n 'hitpoints': 114,\n 'attack': 90,\n 'specialAttack': 136,\n 'defense': 95,\n 'specialDefense': 103,\n 'speed': 29,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 255,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 859,\n 'name': 'Impidimp',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy,\n ],\n 'base': {\n 'hitpoints': 45,\n 'attack': 45,\n 'specialAttack': 55,\n 'defense': 30,\n 'specialDefense': 40,\n 'speed': 50,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 53,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Impidimp', 'Morgrem', 32)],\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 860,\n 'name': 'Morgrem',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy,\n ],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 75,\n 'defense': 45,\n 'specialDefense': 55,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 130,\n 'catchRate': 120,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Morgrem', 'Grimmsnarl', 42),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Morgrem', 'Gigantamax Grimmsnarl'),\n ],\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 861,\n 'name': 'Grimmsnarl',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy,\n ],\n 'base': {\n 'hitpoints': 95,\n 'attack': 120,\n 'specialAttack': 95,\n 'defense': 65,\n 'specialDefense': 75,\n 'speed': 60,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 255,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 861.01,\n 'name': 'Gigantamax Grimmsnarl',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy,\n ],\n 'base': {\n 'hitpoints': 190,\n 'attack': 120,\n 'specialAttack': 95,\n 'defense': 65,\n 'specialDefense': 75,\n 'speed': 60,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 255,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 862,\n 'name': 'Obstagoon',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal,\n ],\n 'base': {\n 'hitpoints': 93,\n 'attack': 90,\n 'specialAttack': 60,\n 'defense': 101,\n 'specialDefense': 81,\n 'speed': 95,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 260,\n 'catchRate': 45,\n}, {\n 'id': 863,\n 'name': 'Perrserker',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.galar,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 70,\n 'attack': 110,\n 'specialAttack': 50,\n 'defense': 100,\n 'specialDefense': 60,\n 'speed': 50,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 154,\n 'catchRate': 90,\n}, {\n 'id': 864,\n 'name': 'Cursola',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 60,\n 'attack': 95,\n 'specialAttack': 145,\n 'defense': 50,\n 'specialDefense': 130,\n 'speed': 30,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 179,\n 'catchRate': 30,\n 'gender': {\n 'femaleRatio': 0.75,\n },\n}, {\n 'id': 865,\n 'name': 'Sirfetch\\'d',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 62,\n 'attack': 135,\n 'specialAttack': 68,\n 'defense': 95,\n 'specialDefense': 82,\n 'speed': 65,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 177,\n 'catchRate': 45,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Leek' },\n}, {\n 'id': 866,\n 'name': 'Mr. Rime',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic,\n ],\n 'base': {\n 'hitpoints': 80,\n 'attack': 85,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 100,\n 'speed': 70,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n}, {\n 'id': 867,\n 'name': 'Runerigus',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost,\n ],\n 'base': {\n 'hitpoints': 58,\n 'attack': 95,\n 'specialAttack': 50,\n 'defense': 145,\n 'specialDefense': 105,\n 'speed': 30,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 169,\n 'catchRate': 90,\n}, {\n 'id': 868,\n 'name': 'Milcery',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 45,\n 'attack': 40,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 61,\n 'speed': 34,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 54,\n 'catchRate': 200,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Vanilla)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Ruby Cream)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Caramel)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Ruby Swirl)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Matcha)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Salted)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Lemon)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Mint)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Strawberry Rainbow)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Vanilla)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Ruby Cream)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Caramel)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Ruby Swirl)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Matcha)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Salted)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Lemon)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Mint)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Berry Rainbow)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Vanilla)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Ruby Cream)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Caramel)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Ruby Swirl)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Matcha)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Salted)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Lemon)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Mint)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Love Rainbow)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Vanilla)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Ruby Cream)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Caramel)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Ruby Swirl)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Matcha)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Salted)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Lemon)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Mint)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Star Rainbow)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Vanilla)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Ruby Cream)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Caramel)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Ruby Swirl)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Matcha)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Salted)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Lemon)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Mint)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Clover Rainbow)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Vanilla)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Ruby Cream)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Caramel)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Ruby Swirl)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Matcha)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Salted)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Lemon)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Mint)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Flower Rainbow)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Vanilla)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Ruby Cream)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Caramel)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Ruby Swirl)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Matcha)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Salted)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Lemon)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Mint)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Alcremie (Ribbon Rainbow)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Milcery', 'Gigantamax Alcremie'),\n ],\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 868.01,\n 'name': 'Milcery (Cheesy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 45,\n 'attack': 40,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 61,\n 'speed': 34,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 54,\n 'catchRate': 200,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869,\n 'name': 'Alcremie (Strawberry Vanilla)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.01,\n 'name': 'Alcremie (Strawberry Ruby Cream)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.02,\n 'name': 'Alcremie (Strawberry Caramel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.03,\n 'name': 'Alcremie (Strawberry Ruby Swirl)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.04,\n 'name': 'Alcremie (Strawberry Matcha)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.05,\n 'name': 'Alcremie (Strawberry Salted)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.06,\n 'name': 'Alcremie (Strawberry Lemon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.07,\n 'name': 'Alcremie (Strawberry Mint)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.08,\n 'name': 'Alcremie (Strawberry Rainbow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.1,\n 'name': 'Alcremie (Berry Vanilla)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.11,\n 'name': 'Alcremie (Berry Ruby Cream)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.12,\n 'name': 'Alcremie (Berry Caramel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.13,\n 'name': 'Alcremie (Berry Ruby Swirl)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.14,\n 'name': 'Alcremie (Berry Matcha)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.15,\n 'name': 'Alcremie (Berry Salted)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.16,\n 'name': 'Alcremie (Berry Lemon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.17,\n 'name': 'Alcremie (Berry Mint)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.18,\n 'name': 'Alcremie (Berry Rainbow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.2,\n 'name': 'Alcremie (Love Vanilla)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.21,\n 'name': 'Alcremie (Love Ruby Cream)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.22,\n 'name': 'Alcremie (Love Caramel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.23,\n 'name': 'Alcremie (Love Ruby Swirl)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.24,\n 'name': 'Alcremie (Love Matcha)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.25,\n 'name': 'Alcremie (Love Salted)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.26,\n 'name': 'Alcremie (Love Lemon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.27,\n 'name': 'Alcremie (Love Mint)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.28,\n 'name': 'Alcremie (Love Rainbow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.3,\n 'name': 'Alcremie (Star Vanilla)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.31,\n 'name': 'Alcremie (Star Ruby Cream)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.32,\n 'name': 'Alcremie (Star Caramel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.33,\n 'name': 'Alcremie (Star Ruby Swirl)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.34,\n 'name': 'Alcremie (Star Matcha)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.35,\n 'name': 'Alcremie (Star Salted)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.36,\n 'name': 'Alcremie (Star Lemon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.37,\n 'name': 'Alcremie (Star Mint)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.38,\n 'name': 'Alcremie (Star Rainbow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.4,\n 'name': 'Alcremie (Clover Vanilla)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.41,\n 'name': 'Alcremie (Clover Ruby Cream)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.42,\n 'name': 'Alcremie (Clover Caramel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.43,\n 'name': 'Alcremie (Clover Ruby Swirl)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.44,\n 'name': 'Alcremie (Clover Matcha)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.45,\n 'name': 'Alcremie (Clover Salted)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.46,\n 'name': 'Alcremie (Clover Lemon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.47,\n 'name': 'Alcremie (Clover Mint)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.48,\n 'name': 'Alcremie (Clover Rainbow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.5,\n 'name': 'Alcremie (Flower Vanilla)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.51,\n 'name': 'Alcremie (Flower Ruby Cream)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.52,\n 'name': 'Alcremie (Flower Caramel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.53,\n 'name': 'Alcremie (Flower Ruby Swirl)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.54,\n 'name': 'Alcremie (Flower Matcha)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.55,\n 'name': 'Alcremie (Flower Salted)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.56,\n 'name': 'Alcremie (Flower Lemon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.57,\n 'name': 'Alcremie (Flower Mint)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.58,\n 'name': 'Alcremie (Flower Rainbow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.6,\n 'name': 'Alcremie (Ribbon Vanilla)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.61,\n 'name': 'Alcremie (Ribbon Ruby Cream)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.62,\n 'name': 'Alcremie (Ribbon Caramel)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.63,\n 'name': 'Alcremie (Ribbon Ruby Swirl)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.64,\n 'name': 'Alcremie (Ribbon Matcha)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.65,\n 'name': 'Alcremie (Ribbon Salted)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.66,\n 'name': 'Alcremie (Ribbon Lemon)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.67,\n 'name': 'Alcremie (Ribbon Mint)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.68,\n 'name': 'Alcremie (Ribbon Rainbow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 65,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 869.70,\n 'name': 'Gigantamax Alcremie',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 130,\n 'attack': 60,\n 'specialAttack': 110,\n 'defense': 75,\n 'specialDefense': 121,\n 'speed': 64,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 870,\n 'name': 'Falinks',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 65,\n 'attack': 100,\n 'specialAttack': 70,\n 'defense': 100,\n 'specialDefense': 60,\n 'speed': 75,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 165,\n 'catchRate': 45,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 871,\n 'name': 'Pincurchin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 48,\n 'attack': 101,\n 'specialAttack': 91,\n 'defense': 95,\n 'specialDefense': 85,\n 'speed': 15,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 152,\n 'catchRate': 75,\n}, {\n 'id': 872,\n 'name': 'Snom',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n ],\n 'base': {\n 'hitpoints': 30,\n 'attack': 25,\n 'specialAttack': 45,\n 'defense': 35,\n 'specialDefense': 30,\n 'speed': 20,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 37,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.NightTimedStoneEvolution)('Snom', 'Frosmoth', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Soothe_bell)],\n}, {\n 'id': 873,\n 'name': 'Frosmoth',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug,\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 65,\n 'specialAttack': 125,\n 'defense': 60,\n 'specialDefense': 90,\n 'speed': 65,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 166,\n 'catchRate': 75,\n}, {\n 'id': 874,\n 'name': 'Stonjourner',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 100,\n 'attack': 125,\n 'specialAttack': 20,\n 'defense': 135,\n 'specialDefense': 20,\n 'speed': 70,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 165,\n 'catchRate': 60,\n}, {\n 'id': 875,\n 'name': 'Eiscue (Ice Face)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 110,\n 'specialDefense': 90,\n 'speed': 50,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 165,\n 'catchRate': 60,\n}, {\n 'id': 875.01,\n 'name': 'Eiscue (Noice Face)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 75,\n 'attack': 80,\n 'specialAttack': 65,\n 'defense': 70,\n 'specialDefense': 50,\n 'speed': 130,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 165,\n 'catchRate': 60,\n}, {\n 'id': 876,\n 'name': 'Indeedee (Male)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal,\n ],\n 'base': {\n 'hitpoints': 60,\n 'attack': 65,\n 'specialAttack': 105,\n 'defense': 55,\n 'specialDefense': 95,\n 'speed': 95,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 166,\n 'catchRate': 30,\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 876.01,\n 'name': 'Indeedee (Female)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal,\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 55,\n 'specialAttack': 95,\n 'defense': 65,\n 'specialDefense': 105,\n 'speed': 85,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 166,\n 'catchRate': 30,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 877,\n 'name': 'Morpeko',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n ],\n 'base': {\n 'hitpoints': 58,\n 'attack': 95,\n 'specialAttack': 70,\n 'defense': 58,\n 'specialDefense': 58,\n 'speed': 97,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 153,\n 'catchRate': 180,\n}, {\n 'id': 877.01,\n 'name': 'Morpeko (Hangry)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n ],\n 'base': {\n 'hitpoints': 58,\n 'attack': 95,\n 'specialAttack': 70,\n 'defense': 58,\n 'specialDefense': 58,\n 'speed': 97,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 153,\n 'catchRate': 180,\n}, {\n 'id': 878,\n 'name': 'Cufant',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 72,\n 'attack': 80,\n 'specialAttack': 40,\n 'defense': 49,\n 'specialDefense': 49,\n 'speed': 40,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 66,\n 'catchRate': 190,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Cufant', 'Copperajah', 34),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Cufant', 'Gigantamax Copperajah'),\n ],\n}, {\n 'id': 879,\n 'name': 'Copperajah',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 122,\n 'attack': 130,\n 'specialAttack': 80,\n 'defense': 69,\n 'specialDefense': 69,\n 'speed': 30,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 90,\n}, {\n 'id': 879.01,\n 'name': 'Gigantamax Copperajah',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 244,\n 'attack': 130,\n 'specialAttack': 80,\n 'defense': 69,\n 'specialDefense': 69,\n 'speed': 30,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 90,\n}, {\n 'id': 880,\n 'name': 'Dracozolt',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 90,\n 'attack': 100,\n 'specialAttack': 80,\n 'defense': 90,\n 'specialDefense': 70,\n 'speed': 75,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 177,\n 'catchRate': 45,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 881,\n 'name': 'Arctozolt',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice,\n ],\n 'base': {\n 'hitpoints': 90,\n 'attack': 100,\n 'specialAttack': 90,\n 'defense': 90,\n 'specialDefense': 80,\n 'speed': 55,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 177,\n 'catchRate': 45,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 882,\n 'name': 'Dracovish',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 90,\n 'attack': 90,\n 'specialAttack': 70,\n 'defense': 100,\n 'specialDefense': 80,\n 'speed': 75,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 177,\n 'catchRate': 45,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 883,\n 'name': 'Arctovish',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice,\n ],\n 'base': {\n 'hitpoints': 90,\n 'attack': 90,\n 'specialAttack': 80,\n 'defense': 100,\n 'specialDefense': 90,\n 'speed': 55,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 177,\n 'catchRate': 45,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 884,\n 'name': 'Duraludon',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 70,\n 'attack': 95,\n 'specialAttack': 120,\n 'defense': 115,\n 'specialDefense': 50,\n 'speed': 85,\n },\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 187,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Duraludon', 'Archaludon', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Metal_alloy)],\n}, {\n 'id': 884.01,\n 'name': 'Gigantamax Duraludon',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 140,\n 'attack': 95,\n 'specialAttack': 120,\n 'defense': 115,\n 'specialDefense': 50,\n 'speed': 85,\n },\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 187,\n 'catchRate': 45,\n}, {\n 'id': 885,\n 'name': 'Dreepy',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost,\n ],\n 'base': {\n 'hitpoints': 28,\n 'attack': 60,\n 'specialAttack': 40,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 82,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 54,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dreepy', 'Drakloak', 50)],\n}, {\n 'id': 886,\n 'name': 'Drakloak',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost,\n ],\n 'base': {\n 'hitpoints': 68,\n 'attack': 80,\n 'specialAttack': 60,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 102,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 144,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Drakloak', 'Dragapult', 60)],\n}, {\n 'id': 887,\n 'name': 'Dragapult',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost,\n ],\n 'base': {\n 'hitpoints': 88,\n 'attack': 120,\n 'specialAttack': 100,\n 'defense': 75,\n 'specialDefense': 75,\n 'speed': 142,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 300,\n 'catchRate': 45,\n}, {\n 'id': 888,\n 'name': 'Zacian (Battle Hero)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 92,\n 'attack': 120,\n 'specialAttack': 80,\n 'defense': 115,\n 'specialDefense': 115,\n 'speed': 138,\n },\n 'eggCycles': 120,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Rusted_Sword', 'Zacian (Battle Hero)', 'Zacian (Crowned Sword)', 100)],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'catchRate': 10,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rusted_Sword' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 888.01,\n 'name': 'Zacian (Crowned Sword)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 92,\n 'attack': 150,\n 'specialAttack': 80,\n 'defense': 115,\n 'specialDefense': 115,\n 'speed': 148,\n },\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'catchRate': 10,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rusted_Sword' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 889,\n 'name': 'Zamazenta (Battle Hero)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 92,\n 'attack': 120,\n 'specialAttack': 80,\n 'defense': 115,\n 'specialDefense': 115,\n 'speed': 138,\n },\n 'eggCycles': 120,\n 'evolutions': [(0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Rusted_Shield', 'Zamazenta (Battle Hero)', 'Zamazenta (Crowned Shield)', 100)],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'catchRate': 10,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rusted_Shield' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 889.01,\n 'name': 'Zamazenta (Crowned Shield)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 92,\n 'attack': 120,\n 'specialAttack': 80,\n 'defense': 140,\n 'specialDefense': 140,\n 'speed': 128,\n },\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'catchRate': 10,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Rusted_Shield' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 890,\n 'name': 'Eternatus',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 140,\n 'attack': 85,\n 'specialAttack': 145,\n 'defense': 95,\n 'specialDefense': 95,\n 'speed': 130,\n },\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 345,\n 'catchRate': 255,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 890.01,\n 'name': 'Eternamax Eternatus',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon,\n ],\n 'base': {\n 'hitpoints': 255,\n 'attack': 115,\n 'specialAttack': 125,\n 'defense': 250,\n 'specialDefense': 250,\n 'speed': 130,\n },\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 345,\n 'catchRate': 255,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 891,\n 'name': 'Kubfu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 60,\n 'attack': 90,\n 'specialAttack': 53,\n 'defense': 60,\n 'specialDefense': 50,\n 'speed': 72,\n },\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Kubfu', 'Urshifu (Single Strike)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Kubfu', 'Urshifu (Rapid Strike)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Kubfu', 'Gigantamax Urshifu (Single Strike)'),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Kubfu', 'Gigantamax Urshifu (Rapid Strike)'),\n ],\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 892,\n 'name': 'Urshifu (Single Strike)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n ],\n 'base': {\n 'hitpoints': 100,\n 'attack': 130,\n 'specialAttack': 63,\n 'defense': 100,\n 'specialDefense': 60,\n 'speed': 97,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 892.01,\n 'name': 'Urshifu (Rapid Strike)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n ],\n 'base': {\n 'hitpoints': 100,\n 'attack': 130,\n 'specialAttack': 63,\n 'defense': 100,\n 'specialDefense': 60,\n 'speed': 97,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 892.02,\n 'name': 'Gigantamax Urshifu (Single Strike)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n ],\n 'base': {\n 'hitpoints': 200,\n 'attack': 130,\n 'specialAttack': 63,\n 'defense': 100,\n 'specialDefense': 60,\n 'speed': 97,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 892.03,\n 'name': 'Gigantamax Urshifu (Rapid Strike)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water,\n ],\n 'base': {\n 'hitpoints': 200,\n 'attack': 130,\n 'specialAttack': 63,\n 'defense': 100,\n 'specialDefense': 60,\n 'speed': 97,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 893,\n 'name': 'Zarude',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass,\n ],\n 'base': {\n 'hitpoints': 105,\n 'attack': 120,\n 'specialAttack': 70,\n 'defense': 105,\n 'specialDefense': 95,\n 'speed': 105,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 893.01,\n 'name': 'Zarude (Dada)',\n 'type': [\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark,\n _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass,\n ],\n 'base': {\n 'hitpoints': 105,\n 'attack': 120,\n 'specialAttack': 70,\n 'defense': 105,\n 'specialDefense': 95,\n 'speed': 105,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 894,\n 'name': 'Regieleki',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 80,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 200,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 895,\n 'name': 'Regidrago',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 200,\n 'attack': 100,\n 'specialAttack': 100,\n 'defense': 50,\n 'specialDefense': 50,\n 'speed': 80,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 896,\n 'name': 'Glastrier',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 100,\n 'attack': 145,\n 'specialAttack': 65,\n 'defense': 130,\n 'specialDefense': 110,\n 'speed': 30,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'White_mane_hair' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 897,\n 'name': 'Spectrier',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 100,\n 'attack': 65,\n 'specialAttack': 145,\n 'defense': 60,\n 'specialDefense': 80,\n 'speed': 130,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Black_mane_hair' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 898,\n 'name': 'Calyrex',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 100,\n 'attack': 80,\n 'specialAttack': 80,\n 'defense': 80,\n 'specialDefense': 80,\n 'speed': 80,\n },\n 'catchRate': 3,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Calyrex', 'Shadow Rider Calyrex', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Black_mane_hair),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Calyrex', 'Ice Rider Calyrex', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.White_mane_hair),\n ],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 898.01,\n 'name': 'Ice Rider Calyrex',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 100,\n 'attack': 165,\n 'specialAttack': 85,\n 'defense': 150,\n 'specialDefense': 130,\n 'speed': 50,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 898.02,\n 'name': 'Shadow Rider Calyrex',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 100,\n 'attack': 85,\n 'specialAttack': 165,\n 'defense': 80,\n 'specialDefense': 100,\n 'speed': 150,\n },\n 'catchRate': 3,\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 899,\n 'name': 'Wyrdeer',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 263,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 103,\n 'attack': 105,\n 'specialAttack': 105,\n 'defense': 72,\n 'specialDefense': 75,\n 'speed': 65,\n },\n}, {\n 'id': 900,\n 'name': 'Kleavor',\n 'catchRate': 15,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 70,\n 'attack': 135,\n 'specialAttack': 45,\n 'defense': 95,\n 'specialDefense': 70,\n 'speed': 85,\n },\n}, {\n 'id': 900.01,\n 'name': 'Noble Kleavor',\n 'catchRate': 15,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'eggCycles': 25,\n 'base': {\n 'hitpoints': 70,\n 'attack': 135,\n 'specialAttack': 45,\n 'defense': 95,\n 'specialDefense': 70,\n 'speed': 85,\n },\n}, {\n 'id': 901,\n 'name': 'Ursaluna',\n 'catchRate': 20,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 275,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 130,\n 'attack': 140,\n 'specialAttack': 35,\n 'defense': 105,\n 'specialDefense': 80,\n 'speed': 50,\n },\n}, {\n 'id': 901.01,\n 'name': 'Bloodmoon Ursaluna',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'catchRate': 20,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 275,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 113,\n 'attack': 70,\n 'specialAttack': 135,\n 'defense': 120,\n 'specialDefense': 65,\n 'speed': 52,\n },\n}, {\n 'id': 902,\n 'name': 'Basculegion (Male)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 265,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 120,\n 'attack': 112,\n 'specialAttack': 80,\n 'defense': 65,\n 'specialDefense': 75,\n 'speed': 78,\n },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 902.01,\n 'name': 'Basculegion (Female)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 265,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 120,\n 'attack': 92,\n 'specialAttack': 100,\n 'defense': 65,\n 'specialDefense': 75,\n 'speed': 78,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 903,\n 'name': 'Sneasler',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 102,\n 'catchRate': 20,\n 'base': {\n 'hitpoints': 80,\n 'attack': 130,\n 'specialAttack': 40,\n 'defense': 60,\n 'specialDefense': 80,\n 'speed': 120,\n },\n}, {\n 'id': 904,\n 'name': 'Overqwil',\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 179,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 85,\n 'attack': 115,\n 'specialAttack': 65,\n 'defense': 95,\n 'specialDefense': 65,\n 'speed': 85,\n },\n}, {\n 'id': 905,\n 'name': 'Enamorus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 116,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 74,\n 'attack': 115,\n 'specialAttack': 135,\n 'defense': 70,\n 'specialDefense': 80,\n 'speed': 106,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 905.01,\n 'name': 'Enamorus (Therian)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 116,\n 'catchRate': 3,\n 'base': {\n 'hitpoints': 74,\n 'attack': 115,\n 'specialAttack': 135,\n 'defense': 110,\n 'specialDefense': 100,\n 'speed': 46,\n },\n 'gender': {\n 'femaleRatio': 1,\n },\n}, \n// Missingno.\n{\n 'id': 0,\n 'name': 'MissingNo.',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.none,\n 'catchRate': 45,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 64,\n 'eggCycles': 20,\n 'base': {\n 'hitpoints': 178,\n 'attack': 19,\n 'specialAttack': 23,\n 'defense': 11,\n 'specialDefense': 23,\n 'speed': 0,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 906,\n 'name': 'Sprigatito',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 40,\n 'attack': 61,\n 'specialAttack': 45,\n 'defense': 54,\n 'specialDefense': 45,\n 'speed': 65,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Sprigatito', 'Floragato', 16)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 907,\n 'name': 'Floragato',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 61,\n 'attack': 80,\n 'specialAttack': 60,\n 'defense': 63,\n 'specialDefense': 63,\n 'speed': 83,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 144,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Floragato', 'Meowscarada', 36)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 908,\n 'name': 'Meowscarada',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 76,\n 'attack': 110,\n 'specialAttack': 81,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 123,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 909,\n 'name': 'Fuecoco',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 67,\n 'attack': 45,\n 'specialAttack': 63,\n 'defense': 59,\n 'specialDefense': 40,\n 'speed': 36,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Fuecoco', 'Crocalor', 16)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 910,\n 'name': 'Crocalor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 81,\n 'attack': 58,\n 'specialAttack': 90,\n 'defense': 78,\n 'specialDefense': 58,\n 'speed': 49,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 144,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Crocalor', 'Skeledirge', 36)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 911,\n 'name': 'Skeledirge',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 104,\n 'attack': 75,\n 'specialAttack': 110,\n 'defense': 100,\n 'specialDefense': 75,\n 'speed': 66,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 912,\n 'name': 'Quaxly',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 55,\n 'attack': 65,\n 'specialAttack': 50,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 50,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Quaxly', 'Quaxwell', 16)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 913,\n 'name': 'Quaxwell',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 65,\n 'defense': 65,\n 'specialDefense': 60,\n 'speed': 65,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 144,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Quaxwell', 'Quaquaval', 36)],\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 914,\n 'name': 'Quaquaval',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 85,\n 'attack': 120,\n 'specialAttack': 85,\n 'defense': 80,\n 'specialDefense': 75,\n 'speed': 85,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 265,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 0.125,\n },\n}, {\n 'id': 915,\n 'name': 'Lechonk',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 54,\n 'attack': 45,\n 'specialAttack': 35,\n 'defense': 40,\n 'specialDefense': 45,\n 'speed': 35,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 51,\n 'catchRate': 255,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Lechonk', 'Oinkologne (Male)', 18),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Lechonk', 'Oinkologne (Female)', 18),\n ],\n}, {\n 'id': 916,\n 'name': 'Oinkologne (Male)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 110,\n 'attack': 100,\n 'specialAttack': 59,\n 'defense': 75,\n 'specialDefense': 80,\n 'speed': 65,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 171,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 916.01,\n 'name': 'Oinkologne (Female)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 115,\n 'attack': 90,\n 'specialAttack': 59,\n 'defense': 70,\n 'specialDefense': 90,\n 'speed': 65,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 171,\n 'catchRate': 100,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 917,\n 'name': 'Tarountula',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'base': {\n 'hitpoints': 35,\n 'attack': 41,\n 'specialAttack': 29,\n 'defense': 45,\n 'specialDefense': 40,\n 'speed': 20,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 42,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tarountula', 'Spidops', 15)],\n}, {\n 'id': 918,\n 'name': 'Spidops',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'base': {\n 'hitpoints': 60,\n 'attack': 79,\n 'specialAttack': 52,\n 'defense': 92,\n 'specialDefense': 86,\n 'speed': 35,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 141,\n 'catchRate': 120,\n}, {\n 'id': 919,\n 'name': 'Nymble',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'base': {\n 'hitpoints': 33,\n 'attack': 46,\n 'specialAttack': 21,\n 'defense': 40,\n 'specialDefense': 25,\n 'speed': 45,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 42,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Nymble', 'Lokix', 24)],\n}, {\n 'id': 920,\n 'name': 'Lokix',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 71,\n 'attack': 102,\n 'specialAttack': 52,\n 'defense': 78,\n 'specialDefense': 55,\n 'speed': 92,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'catchRate': 30,\n}, {\n 'id': 921,\n 'name': 'Pawmi',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 45,\n 'attack': 50,\n 'specialAttack': 40,\n 'defense': 20,\n 'specialDefense': 25,\n 'speed': 60,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 48,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Pawmi', 'Pawmo', 18)],\n}, {\n 'id': 922,\n 'name': 'Pawmo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 60,\n 'attack': 75,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 85,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 123,\n 'catchRate': 80,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Pawmo', 'Pawmot')],\n}, {\n 'id': 923,\n 'name': 'Pawmot',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 70,\n 'attack': 115,\n 'specialAttack': 70,\n 'defense': 70,\n 'specialDefense': 60,\n 'speed': 105,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 245,\n 'catchRate': 45,\n}, {\n 'id': 924,\n 'name': 'Tandemaus',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 50,\n 'attack': 50,\n 'specialAttack': 45,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 75,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 61,\n 'catchRate': 150,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tandemaus', 'Maushold (Family of Four)', 25)],\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 925,\n 'name': 'Maushold (Family of Four)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 74,\n 'attack': 75,\n 'specialAttack': 65,\n 'defense': 70,\n 'specialDefense': 75,\n 'speed': 111,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 165,\n 'catchRate': 75,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 925.01,\n 'name': 'Maushold (Family of Three)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 74,\n 'attack': 75,\n 'specialAttack': 65,\n 'defense': 70,\n 'specialDefense': 75,\n 'speed': 111,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 165,\n 'catchRate': 75,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 926,\n 'name': 'Fidough',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 37,\n 'attack': 55,\n 'specialAttack': 30,\n 'defense': 70,\n 'specialDefense': 55,\n 'speed': 65,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 62,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Fidough', 'Dachsbun', 26)],\n}, {\n 'id': 927,\n 'name': 'Dachsbun',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 57,\n 'attack': 80,\n 'specialAttack': 50,\n 'defense': 115,\n 'specialDefense': 80,\n 'speed': 95,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 167,\n 'catchRate': 90,\n}, {\n 'id': 928,\n 'name': 'Smoliv',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 41,\n 'attack': 35,\n 'specialAttack': 58,\n 'defense': 45,\n 'specialDefense': 51,\n 'speed': 30,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 52,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Smoliv', 'Dolliv', 25)],\n}, {\n 'id': 929,\n 'name': 'Dolliv',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 52,\n 'attack': 53,\n 'specialAttack': 78,\n 'defense': 60,\n 'specialDefense': 78,\n 'speed': 33,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 124,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Dolliv', 'Arboliva', 35)],\n}, {\n 'id': 930,\n 'name': 'Arboliva',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 78,\n 'attack': 69,\n 'specialAttack': 125,\n 'defense': 90,\n 'specialDefense': 109,\n 'speed': 39,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 355,\n 'catchRate': 45,\n}, {\n 'id': 931,\n 'name': 'Squawkabilly (Green)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 82,\n 'attack': 96,\n 'specialAttack': 45,\n 'defense': 51,\n 'specialDefense': 51,\n 'speed': 92,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 146,\n 'catchRate': 190,\n}, {\n 'id': 931.01,\n 'name': 'Squawkabilly (Blue)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 82,\n 'attack': 96,\n 'specialAttack': 45,\n 'defense': 51,\n 'specialDefense': 51,\n 'speed': 92,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 146,\n 'catchRate': 190,\n}, {\n 'id': 931.02,\n 'name': 'Squawkabilly (Yellow)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 82,\n 'attack': 96,\n 'specialAttack': 45,\n 'defense': 51,\n 'specialDefense': 51,\n 'speed': 92,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 146,\n 'catchRate': 190,\n}, {\n 'id': 931.03,\n 'name': 'Squawkabilly (White)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 82,\n 'attack': 96,\n 'specialAttack': 45,\n 'defense': 51,\n 'specialDefense': 51,\n 'speed': 92,\n },\n 'eggCycles': 15,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 146,\n 'catchRate': 190,\n}, {\n 'id': 932,\n 'name': 'Nacli',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 55,\n 'attack': 55,\n 'specialAttack': 35,\n 'defense': 75,\n 'specialDefense': 35,\n 'speed': 25,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 56,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Nacli', 'Naclstack', 24)],\n}, {\n 'id': 933,\n 'name': 'Naclstack',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 60,\n 'attack': 60,\n 'specialAttack': 35,\n 'defense': 100,\n 'specialDefense': 65,\n 'speed': 35,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 124,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Naclstack', 'Garganacl', 38)],\n}, {\n 'id': 934,\n 'name': 'Garganacl',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 100,\n 'attack': 100,\n 'specialAttack': 45,\n 'defense': 130,\n 'specialDefense': 90,\n 'speed': 35,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 250,\n 'catchRate': 45,\n}, {\n 'id': 935,\n 'name': 'Charcadet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 40,\n 'attack': 50,\n 'specialAttack': 50,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 35,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 51,\n 'catchRate': 90,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Charcadet', 'Armarouge', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Auspicious_armor),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Charcadet', 'Ceruledge', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Malicious_armor),\n ],\n}, {\n 'id': 936,\n 'name': 'Armarouge',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 85,\n 'attack': 60,\n 'specialAttack': 125,\n 'defense': 100,\n 'specialDefense': 80,\n 'speed': 75,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 263,\n 'catchRate': 25,\n}, {\n 'id': 937,\n 'name': 'Ceruledge',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 75,\n 'attack': 125,\n 'specialAttack': 60,\n 'defense': 80,\n 'specialDefense': 100,\n 'speed': 85,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 263,\n 'catchRate': 25,\n}, {\n 'id': 938,\n 'name': 'Tadbulb',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 61,\n 'attack': 31,\n 'specialAttack': 59,\n 'defense': 41,\n 'specialDefense': 35,\n 'speed': 45,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 54,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Tadbulb', 'Bellibolt', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Thunder_stone)],\n}, {\n 'id': 939,\n 'name': 'Bellibolt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 109,\n 'attack': 64,\n 'specialAttack': 103,\n 'defense': 91,\n 'specialDefense': 83,\n 'speed': 45,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 173,\n 'catchRate': 50,\n}, {\n 'id': 940,\n 'name': 'Wattrel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 55,\n 'defense': 35,\n 'specialDefense': 40,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 56,\n 'catchRate': 180,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wattrel', 'Kilowattrel', 25)],\n}, {\n 'id': 941,\n 'name': 'Kilowattrel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 70,\n 'attack': 70,\n 'specialAttack': 105,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 125,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 172,\n 'catchRate': 90,\n}, {\n 'id': 942,\n 'name': 'Maschiff',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 60,\n 'attack': 78,\n 'specialAttack': 40,\n 'defense': 60,\n 'specialDefense': 51,\n 'speed': 51,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 68,\n 'catchRate': 150,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Maschiff', 'Mabosstiff', 30)],\n}, {\n 'id': 943,\n 'name': 'Mabosstiff',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 90,\n 'specialDefense': 70,\n 'speed': 85,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 177,\n 'catchRate': 75,\n}, {\n 'id': 944,\n 'name': 'Shroodle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 40,\n 'attack': 65,\n 'specialAttack': 40,\n 'defense': 35,\n 'specialDefense': 35,\n 'speed': 75,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 58,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Shroodle', 'Grafaiai', 28)],\n}, {\n 'id': 945,\n 'name': 'Grafaiai',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 63,\n 'attack': 95,\n 'specialAttack': 80,\n 'defense': 65,\n 'specialDefense': 72,\n 'speed': 110,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 170,\n 'catchRate': 90,\n}, {\n 'id': 946,\n 'name': 'Bramblin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 40,\n 'attack': 65,\n 'specialAttack': 45,\n 'defense': 30,\n 'specialDefense': 35,\n 'speed': 60,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 55,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Bramblin', 'Brambleghast')],\n}, {\n 'id': 947,\n 'name': 'Brambleghast',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 55,\n 'attack': 115,\n 'specialAttack': 80,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 168,\n 'catchRate': 45,\n}, {\n 'id': 948,\n 'name': 'Toedscool',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 40,\n 'attack': 40,\n 'specialAttack': 50,\n 'defense': 35,\n 'specialDefense': 100,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 67,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Toedscool', 'Toedscruel', 30)],\n}, {\n 'id': 949,\n 'name': 'Toedscruel',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 80,\n 'attack': 70,\n 'specialAttack': 80,\n 'defense': 65,\n 'specialDefense': 120,\n 'speed': 100,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 180,\n 'catchRate': 90,\n}, {\n 'id': 950,\n 'name': 'Klawf',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 70,\n 'attack': 100,\n 'specialAttack': 35,\n 'defense': 115,\n 'specialDefense': 55,\n 'speed': 75,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'catchRate': 120,\n}, {\n 'id': 950.01,\n 'name': 'Titan Klawf',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 140,\n 'attack': 100,\n 'specialAttack': 35,\n 'defense': 115,\n 'specialDefense': 55,\n 'speed': 75,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 158,\n 'catchRate': 120,\n}, {\n 'id': 951,\n 'name': 'Capsakid',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 50,\n 'attack': 62,\n 'specialAttack': 62,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 50,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 61,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Capsakid', 'Scovillain', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Fire_stone)],\n}, {\n 'id': 952,\n 'name': 'Scovillain',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 65,\n 'attack': 108,\n 'specialAttack': 108,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 75,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 170,\n 'catchRate': 75,\n}, {\n 'id': 953,\n 'name': 'Rellor',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug],\n 'base': {\n 'hitpoints': 41,\n 'attack': 50,\n 'specialAttack': 31,\n 'defense': 60,\n 'specialDefense': 58,\n 'speed': 30,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 54,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Rellor', 'Rabsca')],\n}, {\n 'id': 954,\n 'name': 'Rabsca',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 75,\n 'attack': 50,\n 'specialAttack': 115,\n 'defense': 85,\n 'specialDefense': 100,\n 'speed': 45,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 165,\n 'catchRate': 45,\n}, {\n 'id': 955,\n 'name': 'Flittle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 30,\n 'attack': 35,\n 'specialAttack': 55,\n 'defense': 30,\n 'specialDefense': 30,\n 'speed': 75,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 51,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Flittle', 'Espathra', 35)],\n}, {\n 'id': 956,\n 'name': 'Espathra',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 95,\n 'attack': 60,\n 'specialAttack': 101,\n 'defense': 60,\n 'specialDefense': 60,\n 'speed': 105,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 168,\n 'catchRate': 60,\n}, {\n 'id': 957,\n 'name': 'Tinkatink',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 50,\n 'attack': 45,\n 'specialAttack': 35,\n 'defense': 45,\n 'specialDefense': 64,\n 'speed': 58,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 59,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tinkatink', 'Tinkatuff', 38)],\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 958,\n 'name': 'Tinkatuff',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 65,\n 'attack': 55,\n 'specialAttack': 45,\n 'defense': 55,\n 'specialDefense': 82,\n 'speed': 78,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 133,\n 'catchRate': 90,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Tinkatuff', 'Tinkaton', 38)],\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 959,\n 'name': 'Tinkaton',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 85,\n 'attack': 75,\n 'specialAttack': 70,\n 'defense': 77,\n 'specialDefense': 105,\n 'speed': 94,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 253,\n 'catchRate': 45,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 960,\n 'name': 'Wiglett',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 10,\n 'attack': 55,\n 'specialAttack': 35,\n 'defense': 25,\n 'specialDefense': 25,\n 'speed': 95,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 49,\n 'catchRate': 255,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Wiglett', 'Wugtrio', 26)],\n}, {\n 'id': 961,\n 'name': 'Wugtrio',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 35,\n 'attack': 100,\n 'specialAttack': 50,\n 'defense': 50,\n 'specialDefense': 70,\n 'speed': 120,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 149,\n 'catchRate': 50,\n}, {\n 'id': 962,\n 'name': 'Bombirdier',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 70,\n 'attack': 103,\n 'specialAttack': 60,\n 'defense': 85,\n 'specialDefense': 85,\n 'speed': 82,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 243,\n 'catchRate': 25,\n}, {\n 'id': 962.01,\n 'name': 'Titan Bombirdier',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 84,\n 'attack': 103,\n 'specialAttack': 60,\n 'defense': 85,\n 'specialDefense': 85,\n 'speed': 82,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 243,\n 'catchRate': 25,\n}, {\n 'id': 963,\n 'name': 'Finizen',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 70,\n 'attack': 45,\n 'specialAttack': 45,\n 'defense': 40,\n 'specialDefense': 40,\n 'speed': 75,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 63,\n 'catchRate': 200,\n 'evolutions': [\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Finizen', 'Palafin (Zero)', 38),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Finizen', 'Palafin (Hero)'),\n ],\n}, {\n 'id': 964,\n 'name': 'Palafin (Zero)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 100,\n 'attack': 70,\n 'specialAttack': 53,\n 'defense': 72,\n 'specialDefense': 62,\n 'speed': 100,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 160,\n 'catchRate': 45,\n}, {\n 'id': 964.01,\n 'name': 'Palafin (Hero)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 100,\n 'attack': 160,\n 'specialAttack': 106,\n 'defense': 97,\n 'specialDefense': 87,\n 'speed': 100,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 160,\n 'catchRate': 45,\n}, {\n 'id': 965,\n 'name': 'Varoom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'base': {\n 'hitpoints': 45,\n 'attack': 70,\n 'specialAttack': 30,\n 'defense': 63,\n 'specialDefense': 45,\n 'speed': 47,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 60,\n 'catchRate': 190,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Varoom', 'Revavroom', 40)],\n}, {\n 'id': 966,\n 'name': 'Revavroom',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'base': {\n 'hitpoints': 80,\n 'attack': 119,\n 'specialAttack': 54,\n 'defense': 90,\n 'specialDefense': 67,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 75,\n}, {\n 'id': 967,\n 'name': 'Cyclizar',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 70,\n 'attack': 95,\n 'specialAttack': 85,\n 'defense': 65,\n 'specialDefense': 65,\n 'speed': 121,\n },\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 175,\n 'catchRate': 190,\n}, {\n 'id': 968,\n 'name': 'Orthworm',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 70,\n 'attack': 85,\n 'specialAttack': 60,\n 'defense': 145,\n 'specialDefense': 55,\n 'speed': 65,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 240,\n 'catchRate': 25,\n}, {\n 'id': 968.01,\n 'name': 'Titan Orthworm',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 105,\n 'attack': 85,\n 'specialAttack': 60,\n 'defense': 145,\n 'specialDefense': 55,\n 'speed': 65,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 240,\n 'catchRate': 25,\n}, {\n 'id': 969,\n 'name': 'Glimmet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'base': {\n 'hitpoints': 48,\n 'attack': 35,\n 'specialAttack': 105,\n 'defense': 42,\n 'specialDefense': 60,\n 'speed': 60,\n },\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 70,\n 'catchRate': 70,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Glimmet', 'Glimmora', 35)],\n}, {\n 'id': 970,\n 'name': 'Glimmora',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'base': {\n 'hitpoints': 83,\n 'attack': 55,\n 'specialAttack': 130,\n 'defense': 90,\n 'specialDefense': 81,\n 'speed': 86,\n },\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 184,\n 'catchRate': 25,\n}, {\n 'id': 971,\n 'name': 'Greavard',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 50,\n 'attack': 61,\n 'specialAttack': 30,\n 'defense': 60,\n 'specialDefense': 55,\n 'speed': 34,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 58,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Greavard', 'Houndstone', 30)],\n}, {\n 'id': 972,\n 'name': 'Houndstone',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 72,\n 'attack': 101,\n 'specialAttack': 50,\n 'defense': 100,\n 'specialDefense': 97,\n 'speed': 68,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 171,\n 'catchRate': 60,\n}, {\n 'id': 973,\n 'name': 'Flamigo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 82,\n 'attack': 115,\n 'specialAttack': 75,\n 'defense': 74,\n 'specialDefense': 64,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 175,\n 'catchRate': 100,\n}, {\n 'id': 974,\n 'name': 'Cetoddle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 108,\n 'attack': 68,\n 'specialAttack': 30,\n 'defense': 45,\n 'specialDefense': 40,\n 'speed': 43,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 67,\n 'catchRate': 150,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Cetoddle', 'Cetitan', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Ice_stone)],\n}, {\n 'id': 975,\n 'name': 'Cetitan',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 170,\n 'attack': 113,\n 'specialAttack': 45,\n 'defense': 65,\n 'specialDefense': 55,\n 'speed': 73,\n },\n 'eggCycles': 25,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 182,\n 'catchRate': 50,\n}, {\n 'id': 976,\n 'name': 'Veluza',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 90,\n 'attack': 102,\n 'specialAttack': 78,\n 'defense': 73,\n 'specialDefense': 65,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].fast,\n 'exp': 167,\n 'catchRate': 100,\n}, {\n 'id': 977,\n 'name': 'Dondozo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 150,\n 'attack': 100,\n 'specialAttack': 65,\n 'defense': 115,\n 'specialDefense': 65,\n 'speed': 35,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 265,\n 'catchRate': 25,\n}, {\n 'id': 977.01,\n 'name': 'Titan Dondozo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 300,\n 'attack': 100,\n 'specialAttack': 65,\n 'defense': 115,\n 'specialDefense': 65,\n 'speed': 35,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 265,\n 'catchRate': 25,\n}, {\n 'id': 978,\n 'name': 'Tatsugiri (Curly)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 68,\n 'attack': 50,\n 'specialAttack': 120,\n 'defense': 60,\n 'specialDefense': 95,\n 'speed': 82,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 166,\n 'catchRate': 100,\n}, {\n 'id': 978.01,\n 'name': 'Tatsugiri (Droopy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 68,\n 'attack': 50,\n 'specialAttack': 120,\n 'defense': 60,\n 'specialDefense': 95,\n 'speed': 82,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 166,\n 'catchRate': 100,\n}, {\n 'id': 978.02,\n 'name': 'Tatsugiri (Stretchy)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 68,\n 'attack': 50,\n 'specialAttack': 120,\n 'defense': 60,\n 'specialDefense': 95,\n 'speed': 82,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 166,\n 'catchRate': 100,\n}, {\n 'id': 978.03,\n 'name': 'Titan Tatsugiri',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 204,\n 'attack': 50,\n 'specialAttack': 120,\n 'defense': 60,\n 'specialDefense': 95,\n 'speed': 82,\n },\n 'eggCycles': 35,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumslow,\n 'exp': 166,\n 'catchRate': 100,\n}, {\n 'id': 979,\n 'name': 'Annihilape',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 110,\n 'attack': 115,\n 'specialAttack': 50,\n 'defense': 80,\n 'specialDefense': 90,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 268,\n 'catchRate': 45,\n}, {\n 'id': 980,\n 'name': 'Clodsire',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'base': {\n 'hitpoints': 130,\n 'attack': 75,\n 'specialAttack': 45,\n 'defense': 60,\n 'specialDefense': 100,\n 'speed': 20,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 151,\n 'catchRate': 90,\n}, {\n 'id': 981,\n 'name': 'Farigiraf',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 120,\n 'attack': 90,\n 'specialAttack': 110,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 60,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 260,\n 'catchRate': 45,\n}, {\n 'id': 982,\n 'name': 'Dudunsparce (Two-Segment)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 125,\n 'attack': 100,\n 'specialAttack': 85,\n 'defense': 80,\n 'specialDefense': 75,\n 'speed': 55,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n}, {\n 'id': 982.01,\n 'name': 'Dudunsparce (Three-Segment)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 125,\n 'attack': 100,\n 'specialAttack': 85,\n 'defense': 80,\n 'specialDefense': 75,\n 'speed': 55,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 182,\n 'catchRate': 45,\n}, {\n 'id': 983,\n 'name': 'Kingambit',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 100,\n 'attack': 135,\n 'specialAttack': 60,\n 'defense': 120,\n 'specialDefense': 85,\n 'speed': 50,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 275,\n 'catchRate': 25,\n}, {\n 'id': 984,\n 'name': 'Great Tusk',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 115,\n 'attack': 131,\n 'specialAttack': 53,\n 'defense': 131,\n 'specialDefense': 53,\n 'speed': 87,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 984.01,\n 'name': 'Titan Great Tusk',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 230,\n 'attack': 131,\n 'specialAttack': 53,\n 'defense': 131,\n 'specialDefense': 53,\n 'speed': 87,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 985,\n 'name': 'Scream Tail',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 115,\n 'attack': 65,\n 'specialAttack': 65,\n 'defense': 99,\n 'specialDefense': 115,\n 'speed': 111,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 50,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 986,\n 'name': 'Brute Bonnet',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 111,\n 'attack': 127,\n 'specialAttack': 79,\n 'defense': 99,\n 'specialDefense': 99,\n 'speed': 55,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 50,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 987,\n 'name': 'Flutter Mane',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 55,\n 'attack': 55,\n 'specialAttack': 135,\n 'defense': 55,\n 'specialDefense': 135,\n 'speed': 135,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 988,\n 'name': 'Slither Wing',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Bug, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 85,\n 'attack': 135,\n 'specialAttack': 85,\n 'defense': 79,\n 'specialDefense': 105,\n 'speed': 81,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 989,\n 'name': 'Sandy Shocks',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'base': {\n 'hitpoints': 85,\n 'attack': 81,\n 'specialAttack': 121,\n 'defense': 97,\n 'specialDefense': 85,\n 'speed': 101,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 990,\n 'name': 'Iron Treads',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 90,\n 'attack': 112,\n 'specialAttack': 72,\n 'defense': 120,\n 'specialDefense': 70,\n 'speed': 106,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 990.01,\n 'name': 'Titan Iron Treads',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel],\n 'base': {\n 'hitpoints': 190,\n 'attack': 112,\n 'specialAttack': 72,\n 'defense': 120,\n 'specialDefense': 70,\n 'speed': 106,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 991,\n 'name': 'Iron Bundle',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 56,\n 'attack': 80,\n 'specialAttack': 124,\n 'defense': 114,\n 'specialDefense': 60,\n 'speed': 136,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 50,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 992,\n 'name': 'Iron Hands',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 154,\n 'attack': 140,\n 'specialAttack': 50,\n 'defense': 108,\n 'specialDefense': 68,\n 'speed': 50,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 50,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 993,\n 'name': 'Iron Jugulis',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Flying],\n 'base': {\n 'hitpoints': 94,\n 'attack': 80,\n 'specialAttack': 122,\n 'defense': 86,\n 'specialDefense': 80,\n 'speed': 108,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 994,\n 'name': 'Iron Moth',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'base': {\n 'hitpoints': 80,\n 'attack': 70,\n 'specialAttack': 140,\n 'defense': 60,\n 'specialDefense': 110,\n 'speed': 110,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 995,\n 'name': 'Iron Thorns',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric],\n 'base': {\n 'hitpoints': 100,\n 'attack': 134,\n 'specialAttack': 70,\n 'defense': 110,\n 'specialDefense': 84,\n 'speed': 72,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 30,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 996,\n 'name': 'Frigibax',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 65,\n 'attack': 75,\n 'specialAttack': 35,\n 'defense': 45,\n 'specialDefense': 45,\n 'speed': 55,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 64,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Frigibax', 'Arctibax', 35)],\n}, {\n 'id': 997,\n 'name': 'Arctibax',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 90,\n 'attack': 95,\n 'specialAttack': 45,\n 'defense': 66,\n 'specialDefense': 65,\n 'speed': 62,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 148,\n 'catchRate': 25,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.LevelEvolution)('Arctibax', 'Baxcalibur', 54)],\n}, {\n 'id': 998,\n 'name': 'Baxcalibur',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 115,\n 'attack': 145,\n 'specialAttack': 75,\n 'defense': 92,\n 'specialDefense': 86,\n 'speed': 87,\n },\n 'eggCycles': 40,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 30,\n 'catchRate': 10,\n}, {\n 'id': 999,\n 'name': 'Gimmighoul (Chest)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 45,\n 'attack': 30,\n 'specialAttack': 75,\n 'defense': 70,\n 'specialDefense': 70,\n 'speed': 10,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Gimmighoul (Chest)', 'Gholdengo', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Gimmighoul_coin)],\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Gimmighoul_coin' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 999.01,\n 'name': 'Gimmighoul (Roaming)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 45,\n 'attack': 30,\n 'specialAttack': 75,\n 'defense': 25,\n 'specialDefense': 45,\n 'speed': 80,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 60,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Gimmighoul (Roaming)', 'Gholdengo')],\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Gimmighoul_coin' },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1000,\n 'name': 'Gholdengo',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 87,\n 'attack': 60,\n 'specialAttack': 133,\n 'defense': 95,\n 'specialDefense': 91,\n 'speed': 84,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 45,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1001,\n 'name': 'Wo-Chien',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 85,\n 'attack': 85,\n 'specialAttack': 95,\n 'defense': 100,\n 'specialDefense': 135,\n 'speed': 70,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 6,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1002,\n 'name': 'Chien-Pao',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ice],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 90,\n 'defense': 80,\n 'specialDefense': 65,\n 'speed': 135,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 6,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1003,\n 'name': 'Ting-Lu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ground],\n 'base': {\n 'hitpoints': 155,\n 'attack': 110,\n 'specialAttack': 50,\n 'defense': 130,\n 'specialDefense': 80,\n 'speed': 45,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 6,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1004,\n 'name': 'Chi-Yu',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 55,\n 'attack': 80,\n 'specialAttack': 135,\n 'defense': 80,\n 'specialDefense': 120,\n 'speed': 100,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 285,\n 'catchRate': 6,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1005,\n 'name': 'Roaring Moon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 105,\n 'attack': 139,\n 'specialAttack': 55,\n 'defense': 71,\n 'specialDefense': 101,\n 'speed': 119,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 295,\n 'catchRate': 10,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 1006,\n 'name': 'Iron Valiant',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 74,\n 'attack': 130,\n 'specialAttack': 120,\n 'defense': 90,\n 'specialDefense': 60,\n 'speed': 116,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 295,\n 'catchRate': 10,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Booster_Energy' },\n}, {\n 'id': 1007,\n 'name': 'Koraidon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 100,\n 'attack': 135,\n 'specialAttack': 85,\n 'defense': 115,\n 'specialDefense': 100,\n 'speed': 135,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'catchRate': 3,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1008,\n 'name': 'Miraidon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 100,\n 'attack': 85,\n 'specialAttack': 135,\n 'defense': 100,\n 'specialDefense': 115,\n 'speed': 135,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 335,\n 'catchRate': 3,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1009,\n 'name': 'Walking Wake',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 99,\n 'attack': 83,\n 'specialAttack': 125,\n 'defense': 91,\n 'specialDefense': 83,\n 'speed': 109,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 295,\n 'catchRate': 5,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1010,\n 'name': 'Iron Leaves',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 90,\n 'attack': 130,\n 'specialAttack': 70,\n 'defense': 88,\n 'specialDefense': 108,\n 'speed': 104,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 295,\n 'catchRate': 5,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1011,\n 'name': 'Dipplin',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 80,\n 'attack': 80,\n 'specialAttack': 95,\n 'defense': 110,\n 'specialDefense': 80,\n 'speed': 40,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 170,\n 'catchRate': 45,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Dipplin', 'Hydrapple')],\n}, {\n 'id': 1012,\n 'name': 'Poltchageist',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 40,\n 'attack': 45,\n 'specialAttack': 74,\n 'defense': 45,\n 'specialDefense': 54,\n 'speed': 50,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 62,\n 'catchRate': 120,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.StoneEvolution)('Poltchageist', 'Sinistcha', _GameConstants__WEBPACK_IMPORTED_MODULE_4__.StoneType.Unremarkable_teacup)],\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1013,\n 'name': 'Sinistcha',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 71,\n 'attack': 60,\n 'specialAttack': 121,\n 'defense': 106,\n 'specialDefense': 80,\n 'speed': 70,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 178,\n 'catchRate': 60,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1014,\n 'name': 'Okidogi',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 88,\n 'attack': 128,\n 'specialAttack': 58,\n 'defense': 115,\n 'specialDefense': 86,\n 'speed': 80,\n },\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 278,\n 'catchRate': 3,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Cornerstone_Mask' },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 1015,\n 'name': 'Munkidori',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 88,\n 'attack': 75,\n 'specialAttack': 130,\n 'defense': 66,\n 'specialDefense': 90,\n 'speed': 106,\n },\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 278,\n 'catchRate': 3,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Wellspring_Mask' },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 1016,\n 'name': 'Fezandipiti',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 88,\n 'attack': 91,\n 'specialAttack': 70,\n 'defense': 82,\n 'specialDefense': 125,\n 'speed': 99,\n },\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 278,\n 'catchRate': 3,\n 'heldItem': { type: _enums_ItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].item, id: 'Hearthflame_Mask' },\n 'gender': {\n 'femaleRatio': 0,\n },\n}, {\n 'id': 1017,\n 'name': 'Ogerpon (Teal Mask)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 84,\n 'specialDefense': 96,\n 'speed': 110,\n },\n 'eggCycles': 10,\n 'evolutions': [\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Wellspring_Mask', 'Ogerpon (Teal Mask)', 'Ogerpon (Wellspring Mask)', 70),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Hearthflame_Mask', 'Ogerpon (Teal Mask)', 'Ogerpon (Hearthflame Mask)', 70),\n (0,_evolutions_Methods__WEBPACK_IMPORTED_MODULE_0__.HeldItemLevelEvolution)('Cornerstone_Mask', 'Ogerpon (Teal Mask)', 'Ogerpon (Cornerstone Mask)', 70),\n (0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Ogerpon (Teal Mask)', 'Ogerpon (Terrastallized Teal Mask)'),\n ],\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 5,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 1017.01,\n 'name': 'Ogerpon (Wellspring Mask)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 84,\n 'specialDefense': 96,\n 'speed': 110,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 5,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Ogerpon (Wellspring Mask)', 'Ogerpon (Terrastallized Wellspring Mask)')],\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 1017.02,\n 'name': 'Ogerpon (Hearthflame Mask)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 84,\n 'specialDefense': 96,\n 'speed': 110,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 5,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Ogerpon (Hearthflame Mask)', 'Ogerpon (Terrastallized Hearthflame Mask)')],\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 1017.03,\n 'name': 'Ogerpon (Cornerstone Mask)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 84,\n 'specialDefense': 96,\n 'speed': 110,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 5,\n 'evolutions': [(0,_evolutions_Base__WEBPACK_IMPORTED_MODULE_5__.DummyEvolution)('Ogerpon (Cornerstone Mask)', 'Ogerpon (Terrastallized Cornerstone Mask)')],\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 1017.04,\n 'name': 'Ogerpon (Terrastallized Teal Mask)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 84,\n 'specialDefense': 96,\n 'speed': 165,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 5,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 1017.05,\n 'name': 'Ogerpon (Terrastallized Wellspring Mask)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Water],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 84,\n 'specialDefense': 144,\n 'speed': 110,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 5,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 1017.06,\n 'name': 'Ogerpon (Terrastallized Hearthflame Mask)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 80,\n 'attack': 180,\n 'specialAttack': 60,\n 'defense': 84,\n 'specialDefense': 96,\n 'speed': 110,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 5,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 1017.07,\n 'name': 'Ogerpon (Terrastallized Cornerstone Mask)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock],\n 'base': {\n 'hitpoints': 80,\n 'attack': 120,\n 'specialAttack': 60,\n 'defense': 126,\n 'specialDefense': 96,\n 'speed': 110,\n },\n 'eggCycles': 10,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 275,\n 'catchRate': 5,\n 'gender': {\n 'femaleRatio': 1,\n },\n}, {\n 'id': 1018,\n 'name': 'Archaludon',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 90,\n 'attack': 105,\n 'specialAttack': 125,\n 'defense': 130,\n 'specialDefense': 65,\n 'speed': 85,\n },\n 'eggCycles': 30,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 404,\n 'catchRate': 10,\n}, {\n 'id': 1019,\n 'name': 'Hydrapple',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Grass, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 106,\n 'attack': 80,\n 'specialAttack': 120,\n 'defense': 110,\n 'specialDefense': 80,\n 'speed': 44,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].erratic,\n 'exp': 404,\n 'catchRate': 10,\n}, {\n 'id': 1020,\n 'name': 'Gouging Fire',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 105,\n 'attack': 115,\n 'specialAttack': 65,\n 'defense': 121,\n 'specialDefense': 93,\n 'speed': 91,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 295,\n 'catchRate': 10,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1021,\n 'name': 'Raging Bolt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Electric, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dragon],\n 'base': {\n 'hitpoints': 125,\n 'attack': 73,\n 'specialAttack': 137,\n 'defense': 91,\n 'specialDefense': 89,\n 'speed': 75,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 295,\n 'catchRate': 10,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1022,\n 'name': 'Iron Boulder',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 90,\n 'attack': 120,\n 'specialAttack': 68,\n 'defense': 80,\n 'specialDefense': 108,\n 'speed': 124,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 295,\n 'catchRate': 10,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1023,\n 'name': 'Iron Crown',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Steel, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Psychic],\n 'base': {\n 'hitpoints': 90,\n 'attack': 72,\n 'specialAttack': 122,\n 'defense': 100,\n 'specialDefense': 108,\n 'speed': 98,\n },\n 'eggCycles': 50,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 295,\n 'catchRate': 10,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, {\n 'id': 1024,\n 'name': 'Terapagos',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 90,\n 'attack': 65,\n 'specialAttack': 65,\n 'defense': 85,\n 'specialDefense': 85,\n 'speed': 60,\n },\n 'eggCycles': 404,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 404,\n 'catchRate': 255,\n}, {\n 'id': 1024.01,\n 'name': 'Terapagos (Terastal)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 95,\n 'attack': 95,\n 'specialAttack': 105,\n 'defense': 110,\n 'specialDefense': 110,\n 'speed': 85,\n },\n 'eggCycles': 404,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 404,\n 'catchRate': 255,\n}, {\n 'id': 1024.02,\n 'name': 'Terapagos (Stellar)',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Normal],\n 'base': {\n 'hitpoints': 160,\n 'attack': 105,\n 'specialAttack': 130,\n 'defense': 110,\n 'specialDefense': 110,\n 'speed': 85,\n },\n 'eggCycles': 404,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 404,\n 'catchRate': 255,\n}, {\n 'id': 1025,\n 'name': 'Pecharunt',\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Ghost],\n 'base': {\n 'hitpoints': 88,\n 'attack': 88,\n 'specialAttack': 88,\n 'defense': 160,\n 'specialDefense': 88,\n 'speed': 88,\n },\n 'eggCycles': 404,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 404,\n 'catchRate': 3,\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, \n// ???\n{\n 'id': -793,\n 'name': '???',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 109,\n 'attack': 53,\n 'specialAttack': 127,\n 'defense': 47,\n 'specialDefense': 131,\n 'speed': 103,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, \n// Fusion Lusamine\n{\n 'id': -793.01,\n 'name': 'You hateful little Trainer!',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.alola,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Rock, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'eggCycles': 120,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].slow,\n 'exp': 257,\n 'catchRate': 45,\n 'base': {\n 'hitpoints': 109,\n 'attack': 53,\n 'specialAttack': 127,\n 'defense': 47,\n 'specialDefense': 131,\n 'speed': 103,\n },\n 'gender': {\n 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.Genderless,\n },\n}, \n// Starmobiles (Revavroom)\n{\n 'id': -966.01,\n 'name': 'Segin Starmobile',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Dark],\n 'base': {\n 'hitpoints': 80,\n 'attack': 119,\n 'specialAttack': 54,\n 'defense': 90,\n 'specialDefense': 67,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 75,\n}, {\n 'id': -966.02,\n 'name': 'Schedar Starmobile',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fire],\n 'base': {\n 'hitpoints': 80,\n 'attack': 119,\n 'specialAttack': 54,\n 'defense': 90,\n 'specialDefense': 67,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 75,\n}, {\n 'id': -966.03,\n 'name': 'Navi Starmobile',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Poison],\n 'base': {\n 'hitpoints': 80,\n 'attack': 119,\n 'specialAttack': 54,\n 'defense': 90,\n 'specialDefense': 67,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 75,\n}, {\n 'id': -966.04,\n 'name': 'Ruchbah Starmobile',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fairy],\n 'base': {\n 'hitpoints': 80,\n 'attack': 119,\n 'specialAttack': 54,\n 'defense': 90,\n 'specialDefense': 67,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 75,\n}, {\n 'id': -966.05,\n 'name': 'Caph Starmobile',\n 'nativeRegion': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.paldea,\n 'type': [_enums_PokemonType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fighting],\n 'base': {\n 'hitpoints': 80,\n 'attack': 119,\n 'specialAttack': 54,\n 'defense': 90,\n 'specialDefense': 67,\n 'speed': 90,\n },\n 'eggCycles': 20,\n 'levelType': _party_LevelType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].mediumfast,\n 'exp': 175,\n 'catchRate': 75,\n});\nconst pokemonNameIndex = {};\n// This needs to be initiallised before pokemonMap as some other things rely on it for data\n// Specifically Roamers not sure what else.\npokemonList.forEach((p) => {\n var _a, _b;\n // Calculate our attack values\n const baseOffense = 2 * Math.round(Math.sqrt(p.base.attack * p.base.specialAttack) + Math.sqrt(p.base.speed));\n const baseDefense = 2 * Math.round(Math.sqrt(p.base.defense * p.base.specialDefense) + Math.sqrt(p.base.speed));\n const baseStamina = 2 * p.base.hitpoints;\n p.attack = Math.max(10, Math.floor(Math.sqrt(baseDefense * baseStamina) * (baseOffense / 250)));\n if (p.baby) {\n // Calculate prevolutions/baby pokemon\n // Egg steps should be lower than evolved form\n const linemap = function (evoPokemon) {\n var _a;\n pokemonBabyPrevolutionMap[evoPokemon] = p.name;\n (_a = pokemonList.find(_p => _p.name === evoPokemon).evolutions) === null || _a === void 0 ? void 0 : _a.forEach(ee => linemap(ee.evolvedPokemon));\n };\n (_a = p.evolutions) === null || _a === void 0 ? void 0 : _a.forEach((evo) => {\n linemap(evo.evolvedPokemon);\n const { eggCycles } = pokemonList.find((_p) => _p.name === evo.evolvedPokemon);\n p.eggCycles = Math.round(eggCycles * 0.8);\n });\n }\n else {\n // Calculate evolutions egg steps to be higher than the base forms\n (_b = p.evolutions) === null || _b === void 0 ? void 0 : _b.forEach((evo) => {\n const poke = pokemonList.find((_p) => _p.name === evo.evolvedPokemon);\n if (evo.ignoreECChange) {\n poke.eggCycles = Math.max(poke.eggCycles, p.eggCycles);\n }\n else {\n poke.eggCycles = Math.min(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.MAX_EGG_CYCLES, Math.round(p.eggCycles * 1.5));\n }\n });\n }\n // Calculate this pokemons native region\n p.nativeRegion = p.nativeRegion || _GameConstants__WEBPACK_IMPORTED_MODULE_4__.MaxIDPerRegion.findIndex((maxRegionID) => maxRegionID >= Math.floor(p.id));\n // Create an index of pokemon\n pokemonNameIndex[p.name.toLowerCase()] = p;\n // Fill gender object as default\n p.gender = p.gender === undefined ? { 'type': _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.MaleFemale, 'femaleRatio': 0.5, 'visualDifference': false } : p.gender;\n // Add Genders.MaleFemale as default gender type\n p.gender.type = p.gender.type === undefined ? _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Genders.MaleFemale : p.gender.type;\n // Add 0.5 as default gender ratio\n p.gender.femaleRatio = p.gender.femaleRatio === undefined ? 0.5 : p.gender.femaleRatio;\n // Add false as default gender visual difference\n p.gender.visualDifference = p.gender.visualDifference === undefined ? false : p.gender.visualDifference;\n});\nconst pokemonMap = new _utilities_GenericProxy__WEBPACK_IMPORTED_MODULE_7__[\"default\"](pokemonList, {\n get: (pokemon, prop) => {\n var _a, _b;\n if (!Number.isNaN(+prop)) {\n const id = +prop;\n const pokemonByID = pokemon.find((p) => p.id === id);\n if (pokemonByID) {\n return pokemonByID;\n }\n }\n switch (prop) {\n case 'random':\n return (_max = 0, _min = 0) => {\n // minimum 0\n const min = Math.max(0, Math.min(_min, _max));\n // maximum is same as however many pokemon are available\n const max = Math.min(pokemon.length, Math.max(_min, _max));\n // Decide on a base ID first (so we aren't weighted towards pokemon with multiple forms such as Alcremie)\n const basePokemonIDs = [...new Set(pokemon.filter((p) => p.id >= min && p.id <= max).map((p) => Math.floor(p.id)))];\n const ID = _utilities_Rand__WEBPACK_IMPORTED_MODULE_8__[\"default\"].fromArray(basePokemonIDs);\n // Choose a Pokemon with that base ID\n const poke = _utilities_Rand__WEBPACK_IMPORTED_MODULE_8__[\"default\"].fromArray(pokemon.filter((p) => Math.floor(p.id) === ID && p.id >= min && p.id <= max));\n return poke || pokemon.find((p) => p.id === 0);\n };\n case 'randomRegion':\n return (_max = _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto, _min = _GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto) => {\n // minimum 0 (Kanto)\n const min = Math.max(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto, Math.min(_min, _max));\n const max = Math.max(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.kanto, _min, _max);\n // Decide on a base ID first (so we aren't weighted towards pokemon with multiple forms such as Alcremie)\n const basePokemonIDs = [\n ...new Set(pokemon.filter((p) => p.id > 0\n && p.nativeRegion >= min\n && p.nativeRegion <= max).map((p) => Math.floor(p.id))),\n ];\n const ID = _utilities_Rand__WEBPACK_IMPORTED_MODULE_8__[\"default\"].fromArray(basePokemonIDs);\n // Choose a Pokemon with that base ID\n const poke = _utilities_Rand__WEBPACK_IMPORTED_MODULE_8__[\"default\"].fromArray(pokemon.filter((p) => Math.floor(p.id) === ID\n && p.nativeRegion >= min\n && p.nativeRegion <= max));\n // return a random Pokemon or MissingNo if none found\n return poke || pokemon.find((p) => p.id === 0);\n };\n default:\n return pokemonNameIndex[prop.toLowerCase()] || ((_b = (_a = pokemon[prop]) === null || _a === void 0 ? void 0 : _a.bind) === null || _b === void 0 ? void 0 : _b.call(pokemon[prop], pokemon)) || pokemon[prop] || pokemon.find((p) => p.id === 0);\n }\n },\n});\n(0,_mapProvider__WEBPACK_IMPORTED_MODULE_10__.setPokemonMap)(pokemonMap, pokemonList);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/PokemonList.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/RoamingGroup.ts": +/*!**********************************************!*\ + !*** ./src/modules/pokemons/RoamingGroup.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RoamingGroup)\n/* harmony export */ });\nclass RoamingGroup {\n constructor(name, subRegions) {\n this.name = name;\n this.subRegions = subRegions;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/RoamingGroup.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/RoamingPokemon.ts": +/*!************************************************!*\ + !*** ./src/modules/pokemons/RoamingPokemon.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RoamingPokemon)\n/* harmony export */ });\n/* harmony import */ var _PokemonList__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PokemonList */ \"./src/modules/pokemons/PokemonList.ts\");\n\nclass RoamingPokemon {\n constructor(pokemonName, unlockRequirement) {\n this.pokemonName = pokemonName;\n this.unlockRequirement = unlockRequirement;\n this.pokemon = _PokemonList__WEBPACK_IMPORTED_MODULE_0__.pokemonMap[pokemonName];\n }\n isRoaming() {\n return this.unlockRequirement ? this.unlockRequirement.isCompleted() : true;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/RoamingPokemon.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/RoamingPokemonList.ts": +/*!****************************************************!*\ + !*** ./src/modules/pokemons/RoamingPokemonList.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RoamingPokemonList)\n/* harmony export */ });\n/* harmony import */ var _enums_Badges__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/Badges */ \"./src/modules/enums/Badges.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../requirements/ClearDungeonRequirement */ \"./src/modules/requirements/ClearDungeonRequirement.ts\");\n/* harmony import */ var _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../requirements/GymBadgeRequirement */ \"./src/modules/requirements/GymBadgeRequirement.ts\");\n/* harmony import */ var _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../requirements/MultiRequirement */ \"./src/modules/requirements/MultiRequirement.ts\");\n/* harmony import */ var _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../requirements/ObtainedPokemonRequirement */ \"./src/modules/requirements/ObtainedPokemonRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../requirements/QuestLineCompletedRequirement */ \"./src/modules/requirements/QuestLineCompletedRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../requirements/QuestLineStepCompletedRequirement */ \"./src/modules/requirements/QuestLineStepCompletedRequirement.ts\");\n/* harmony import */ var _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../requirements/TemporaryBattleRequirement */ \"./src/modules/requirements/TemporaryBattleRequirement.ts\");\n/* harmony import */ var _requirements_StarterRequirement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../requirements/StarterRequirement */ \"./src/modules/requirements/StarterRequirement.ts\");\n/* harmony import */ var _routes_Routes__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../routes/Routes */ \"./src/modules/routes/Routes.ts\");\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n/* harmony import */ var _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./RoamingPokemon */ \"./src/modules/pokemons/RoamingPokemon.ts\");\n/* harmony import */ var _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./RoamingGroup */ \"./src/modules/pokemons/RoamingGroup.ts\");\n/* harmony import */ var _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../requirements/SpecialEventRequirement */ \"./src/modules/requirements/SpecialEventRequirement.ts\");\n/* harmony import */ var _requirements_MoonCyclePhaseRequirement__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../requirements/MoonCyclePhaseRequirement */ \"./src/modules/requirements/MoonCyclePhaseRequirement.ts\");\n/* harmony import */ var _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../moonCycle/MoonCyclePhase */ \"./src/modules/moonCycle/MoonCyclePhase.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass RoamingPokemonList {\n static add(region, subRegionGroup, roamer) {\n if (!RoamingPokemonList.list[region]) {\n RoamingPokemonList.list[region] = [];\n }\n if (!RoamingPokemonList.list[region][subRegionGroup]) {\n RoamingPokemonList.list[region][subRegionGroup] = [];\n }\n RoamingPokemonList.list[region][subRegionGroup].push(roamer);\n }\n static remove(region, subRegionGroup, pokemonName) {\n const index = RoamingPokemonList.list[region][subRegionGroup].findIndex((r) => r.pokemon.name === pokemonName);\n if (index >= 0) {\n RoamingPokemonList.list[region][subRegionGroup].splice(index, 1);\n }\n }\n static getSubRegionalGroupRoamers(region, subRegionGroup) {\n return RoamingPokemonList.list[region] && RoamingPokemonList.list[region][subRegionGroup]\n ? RoamingPokemonList.list[region][subRegionGroup].filter((p) => p.isRoaming())\n : [];\n }\n static getIncreasedChanceRouteBySubRegionGroup(region, subRegionGroup) {\n var _a;\n return (_a = RoamingPokemonList.increasedChanceRoute[region]) === null || _a === void 0 ? void 0 : _a[subRegionGroup];\n }\n static generateIncreasedChanceRoutes(date = new Date()) {\n // Seed the random runmber generator\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_12__[\"default\"].seedWithDateHour(date, this.period);\n RoamingPokemonList.increasedChanceRoute.forEach((subRegionGroups, region) => {\n subRegionGroups.forEach((route, group) => {\n const routes = _routes_Routes__WEBPACK_IMPORTED_MODULE_11__[\"default\"].getRoutesByRegion(region).filter((r) => { var _a; return this.findGroup(region, (_a = r.subRegion) !== null && _a !== void 0 ? _a : 0) === group; });\n // Select a route\n const selectedRoute = _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_12__[\"default\"].fromArray(routes);\n route(selectedRoute);\n });\n });\n }\n static findGroup(region, subRegion) {\n return this.roamerGroups[region].findIndex((g) => g.subRegions.includes(subRegion));\n }\n}\nRoamingPokemonList.roamerGroups = [\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Kanto', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto]), new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Kanto - Sevii Islands', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii123, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Johto', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.JohtoSubRegions.Johto])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Hoenn', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.HoennSubRegions.Hoenn]), new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Hoenn - Orre', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.HoennSubRegions.Orre])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Sinnoh', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.SinnohSubRegions.Sinnoh])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Unova', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.UnovaSubRegions.Unova])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Kalos', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.KalosSubRegions.Kalos])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Alola', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MelemeleIsland, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland]), new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Alola - Magikarp Jump', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Galar - South', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar]), new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Galar - North', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar]), new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Galar - Isle of Armor', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor]), new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Galar - Crown Tundra', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Hisui', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.HisuiSubRegions.Hisui])],\n [new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Paldea', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.PaldeaSubRegions.Paldea]), new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Paldea - Kitakami', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.PaldeaSubRegions.Kitakami]), new _RoamingGroup__WEBPACK_IMPORTED_MODULE_14__[\"default\"]('Paldea - Blueberry Academy', [_GameConstants__WEBPACK_IMPORTED_MODULE_1__.PaldeaSubRegions.BlueberryAcademy])],\n];\nRoamingPokemonList.list = {};\nRoamingPokemonList.increasedChanceRoute = new Array(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].enumLength(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region) - 2) // Remove None and Final\n .fill(0).map((v, i) => new Array(RoamingPokemonList.roamerGroups[i].length)\n .fill(0).map(() => ko.observable(undefined)));\n// How many hours between when the roaming Pokemon change routes for increased chances\nRoamingPokemonList.period = 8;\n// Kanto\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Mew'));\n// Kanto - Sevii Islands\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Raikou', new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Celio\\'s Errand')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Entei', new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Celio\\'s Errand')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Suicune', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Celio\\'s Errand'), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Suicune')])));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Pink Butterfree', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_OrangeChampion)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Ash\\'s Butterfree', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_OrangeChampion)));\n// Johto\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Raikou', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Legendary Beasts', 3)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Entei', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Legendary Beasts', 3)));\n// Hoenn\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Latios', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Eon Duo', 3)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Latias', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Eon Duo', 3)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Jirachi', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Wish Maker', 8)));\n// Orre\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Ho-Oh', new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Shadows in the Desert')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Bonsly', new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Gale of Darkness')));\n// Sinnoh\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Manaphy', new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Recover the Precious Egg!')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Mesprit', new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Distortion World'))));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Cresselia', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Fullmoon Island')), new _requirements_MoonCyclePhaseRequirement__WEBPACK_IMPORTED_MODULE_16__[\"default\"]([_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__[\"default\"].FullMoon, _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__[\"default\"].WaxingGibbous, _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__[\"default\"].WaningGibbous, _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__[\"default\"].FirstQuarter, _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__[\"default\"].ThirdQuarter])])));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Darkrai', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Newmoon Island')), new _requirements_MoonCyclePhaseRequirement__WEBPACK_IMPORTED_MODULE_16__[\"default\"]([_moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__[\"default\"].NewMoon, _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__[\"default\"].WaxingCrescent, _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_17__[\"default\"].WaningCrescent])])));\n// Unova\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Tornadus', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Legend)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Thundurus', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Legend)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Meloetta (Aria)', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_UnovaChampion)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Genesect (High-Speed)', new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('The Legend Awakened')));\n// Kalos\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Zapdos', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Sea Spirit\\'s Den')), new _requirements_StarterRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Starter.Fire)])));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Moltres', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Sea Spirit\\'s Den')), new _requirements_StarterRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Starter.Water)])));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Articuno', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Sea Spirit\\'s Den')), new _requirements_StarterRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Starter.Grass)])));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Hoopa', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_KalosChampion)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Ash-Greninja', new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Ash Ketchum Kalos')));\n// Alola\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Magearna', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Champion_Stamp)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Marshadow', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Champion_Stamp)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Zeraora', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Champion_Stamp)));\n// Magikarp Jump\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Magikarp Purple Diamonds', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Luxury_League)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Magikarp Apricot Stripes', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Heal_League)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 1, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Magikarp Violet Raindrops', new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Master_League)));\n// Galar\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Galarian Zapdos', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Birds of the Dyna Tree', 5)));\n// Galar - Isle of Armor\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 2, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Zarude', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Secrets of the Jungle', 1)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 2, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Galarian Moltres', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Birds of the Dyna Tree', 5)));\n// Galar - Crown Tundra\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Spectrier', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Crown of Galar', 6)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Glastrier', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Crown of Galar', 6)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Galarian Articuno', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('The Birds of the Dyna Tree', 5)));\n// Hisui\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Tornadus', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Incarnate Forces of Hisui', 1)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Thundurus', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Incarnate Forces of Hisui', 1)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Landorus', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Incarnate Forces of Hisui', 1)));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Enamorus', new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Incarnate Forces of Hisui', 3)));\n// Paldea\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.paldea, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Gimmighoul (Roaming)'));\n// Events\n// Lunar New Year (Jan 24 - Feb 7)\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Vivillon (Fancy)', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Lunar New Year')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Vivillon (Fancy)', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Lunar New Year')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 2, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Vivillon (Fancy)', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Lunar New Year')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Vivillon (Fancy)', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Lunar New Year')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Vivillon (Meadow)', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Lunar New Year')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Vivillon (Meadow)', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Lunar New Year')));\n// Hoopa Day (Apr 1 - Apr 2)\n// Easter (Apr 8 - Apr 29)\n// Golden Week (Apr 29 - May 6)\n// Flying Pikachu (Jul 6 - Jul 12)\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Flying Pikachu', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Flying Pikachu')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Red Spearow', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Flying Pikachu')));\n// First movie anniversay (Jul 18 - Jul 24)\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Bulbasaur (Clone)', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Mewtwo strikes back!'), new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('New Island'))])));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Charmander (Clone)', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Mewtwo strikes back!'), new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('New Island'))])));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Squirtle (Clone)', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Mewtwo strikes back!'), new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('New Island'))])));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Pikachu (Clone)', new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Mewtwo strikes back!'), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Pikachu (Clone)')])));\n// Halloween (Oct 30 - Nov 5)\n// Let's Go Pikachu Eevee (Nov 16 - Nov 23)\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Let\\'s Go Pikachu', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Let\\'s GO!')));\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Let\\'s Go Eevee', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Let\\'s GO!')));\n// Christmas (Dec 18 - Dec 31)\n// Add to every roaming group that has at least one roamer\nRoamingPokemonList.roamerGroups.forEach((regionGroups, region) => {\n regionGroups.forEach((_, subRegionGroup) => {\n var _a;\n if ((_a = RoamingPokemonList.list[region][subRegionGroup]) === null || _a === void 0 ? void 0 : _a.length) {\n RoamingPokemonList.add(region, subRegionGroup, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Santa Snorlax', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Merry Christmas!')));\n }\n });\n});\nRoamingPokemonList.add(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 0, new _RoamingPokemon__WEBPACK_IMPORTED_MODULE_13__[\"default\"]('Reindeer Stantler', new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('Merry Christmas!')));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/RoamingPokemonList.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/evolutions/Base.ts": +/*!*************************************************!*\ + !*** ./src/modules/pokemons/evolutions/Base.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DummyEvolution\": () => (/* binding */ DummyEvolution),\n/* harmony export */ \"Evo\": () => (/* binding */ Evo),\n/* harmony export */ \"EvoTrigger\": () => (/* binding */ EvoTrigger),\n/* harmony export */ \"LevelEvolution\": () => (/* binding */ LevelEvolution),\n/* harmony export */ \"StoneEvolution\": () => (/* binding */ StoneEvolution),\n/* harmony export */ \"beforeEvolve\": () => (/* binding */ beforeEvolve),\n/* harmony export */ \"restrict\": () => (/* binding */ restrict)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _requirements_HoldingItemRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../requirements/HoldingItemRequirement */ \"./src/modules/requirements/HoldingItemRequirement.ts\");\n/* harmony import */ var _requirements_LazyRequirementWrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../requirements/LazyRequirementWrapper */ \"./src/modules/requirements/LazyRequirementWrapper.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* harmony import */ var _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../requirements/ObtainedPokemonRequirement */ \"./src/modules/requirements/ObtainedPokemonRequirement.ts\");\n/* harmony import */ var _requirements_PokemonLevelRequirement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../requirements/PokemonLevelRequirement */ \"./src/modules/requirements/PokemonLevelRequirement.ts\");\n/* harmony import */ var _PokemonHelper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../PokemonHelper */ \"./src/modules/pokemons/PokemonHelper.ts\");\n\n\n\n\n\n\n\nvar EvoTrigger;\n(function (EvoTrigger) {\n EvoTrigger[EvoTrigger[\"NONE\"] = 0] = \"NONE\";\n EvoTrigger[EvoTrigger[\"LEVEL\"] = 1] = \"LEVEL\";\n EvoTrigger[EvoTrigger[\"STONE\"] = 2] = \"STONE\";\n})(EvoTrigger || (EvoTrigger = {}));\nconst beforeEvolve = {\n [EvoTrigger.LEVEL]: () => true,\n};\nconst Evo = (basePokemon, evolvedPokemon, trigger, ignoreECChange) => ({\n basePokemon,\n evolvedPokemon,\n trigger,\n restrictions: [\n new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](basePokemon),\n new _requirements_LazyRequirementWrapper__WEBPACK_IMPORTED_MODULE_2__[\"default\"](\n // wrapping because pokemonMap is needed to calcNativeRegion,\n // but we use Evos while making pokemonMap...\n // wrapping here delays execution until later, after pokemon is available\n () => new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"]((0,_PokemonHelper__WEBPACK_IMPORTED_MODULE_6__.calcNativeRegion)(evolvedPokemon))),\n ],\n ignoreECChange,\n});\nconst restrict = (evo, ...restrictions) => {\n evo.restrictions.push(...restrictions);\n return evo;\n};\nconst DummyEvolution = (basePokemon, evolvedPokemon) => (Object.assign({}, Evo(basePokemon, evolvedPokemon, EvoTrigger.NONE, false)));\nconst LevelEvolution = (basePokemon, evolvedPokemon, level, ignoreECChange = false) => restrict(Object.assign({}, Evo(basePokemon, evolvedPokemon, EvoTrigger.LEVEL, ignoreECChange)), new _requirements_PokemonLevelRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"](basePokemon, level), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](evolvedPokemon, true), new _requirements_HoldingItemRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"](basePokemon, 'Everstone', _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less));\nconst StoneEvolution = (basePokemon, evolvedPokemon, stone, ignoreECChange = false) => restrict(Object.assign(Object.assign({}, Evo(basePokemon, evolvedPokemon, EvoTrigger.STONE, ignoreECChange)), { stone }), new _requirements_HoldingItemRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"](basePokemon, 'Everstone', _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/evolutions/Base.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/evolutions/Methods.ts": +/*!****************************************************!*\ + !*** ./src/modules/pokemons/evolutions/Methods.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AnyDungeonLevelEvolution\": () => (/* binding */ AnyDungeonLevelEvolution),\n/* harmony export */ \"AnyGymLevelEvolution\": () => (/* binding */ AnyGymLevelEvolution),\n/* harmony export */ \"DayCyclePartRestrictedLevelEvolution\": () => (/* binding */ DayCyclePartRestrictedLevelEvolution),\n/* harmony export */ \"DayCyclePartRestrictedStoneEvolution\": () => (/* binding */ DayCyclePartRestrictedStoneEvolution),\n/* harmony export */ \"DayTimedLevelEvolution\": () => (/* binding */ DayTimedLevelEvolution),\n/* harmony export */ \"DayTimedMegaEvolution\": () => (/* binding */ DayTimedMegaEvolution),\n/* harmony export */ \"DayTimedStoneEvolution\": () => (/* binding */ DayTimedStoneEvolution),\n/* harmony export */ \"DungeonRestrictedLevelEvolution\": () => (/* binding */ DungeonRestrictedLevelEvolution),\n/* harmony export */ \"EnvironmentDungeonLevelEvolution\": () => (/* binding */ EnvironmentDungeonLevelEvolution),\n/* harmony export */ \"EnvironmentGymLevelEvolution\": () => (/* binding */ EnvironmentGymLevelEvolution),\n/* harmony export */ \"EnvironmentRestrictedLevelEvolution\": () => (/* binding */ EnvironmentRestrictedLevelEvolution),\n/* harmony export */ \"HeldItemLevelEvolution\": () => (/* binding */ HeldItemLevelEvolution),\n/* harmony export */ \"MegaEvolution\": () => (/* binding */ MegaEvolution),\n/* harmony export */ \"MoonCyclePhaseLevelEvolution\": () => (/* binding */ MoonCyclePhaseLevelEvolution),\n/* harmony export */ \"MoonCyclePhaseStoneEvolution\": () => (/* binding */ MoonCyclePhaseStoneEvolution),\n/* harmony export */ \"NightTimedLevelEvolution\": () => (/* binding */ NightTimedLevelEvolution),\n/* harmony export */ \"NightTimedMegaEvolution\": () => (/* binding */ NightTimedMegaEvolution),\n/* harmony export */ \"NightTimedStoneEvolution\": () => (/* binding */ NightTimedStoneEvolution),\n/* harmony export */ \"QuestlineLevelEvolution\": () => (/* binding */ QuestlineLevelEvolution),\n/* harmony export */ \"QuestlineStoneEvolution\": () => (/* binding */ QuestlineStoneEvolution),\n/* harmony export */ \"RegionDayTimedLevelEvolution\": () => (/* binding */ RegionDayTimedLevelEvolution),\n/* harmony export */ \"RegionLevelEvolution\": () => (/* binding */ RegionLevelEvolution),\n/* harmony export */ \"RegionNightTimedLevelEvolution\": () => (/* binding */ RegionNightTimedLevelEvolution),\n/* harmony export */ \"RegionStoneEvolution\": () => (/* binding */ RegionStoneEvolution),\n/* harmony export */ \"WeatherRestrictedLevelEvolution\": () => (/* binding */ WeatherRestrictedLevelEvolution)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Base */ \"./src/modules/pokemons/evolutions/Base.ts\");\n/* harmony import */ var _Restrictions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Restrictions */ \"./src/modules/pokemons/evolutions/Restrictions.ts\");\n\n\n\n// DayCyclePartRestrictedLevelEvolution(start: number, end: number, basePokemon: string, evolvedPokemon: string, level: number)\nconst DayCyclePartRestrictedLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.dayCyclePartRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// DayCyclePartRestrictedStoneEvolution(start: number, end: number, basePokemon: string, evolvedPokemon: string, stone: GameConstants.StoneType\nconst DayCyclePartRestrictedStoneEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.dayCyclePartRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.StoneEvolution);\n// DayTimedLevelEvolution(basePokemon: string, evolvedPokemon: string, level: number)\nconst DayTimedLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.dayRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// NightTimedLevelEvolution(basePokemon: string, evolvedPokemon: string, level: number)\nconst NightTimedLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.nightRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// DayTimedStoneEvolution(basePokemon: string, evolvedPokemon: string, stone: GameConstants.StoneType)\nconst DayTimedStoneEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.dayRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.StoneEvolution);\n// NightTimedStoneEvolution(basePokemon: string, evolvedPokemon: string, stone: GameConstants.StoneType)\nconst NightTimedStoneEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.nightRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.StoneEvolution);\n// MoonCyclePhaseRestrictedLevelEvolution(phase: MoonCyclePhase.PhaseName, basePokemon: string, evolvedPokemon: string, level: number)\nconst MoonCyclePhaseLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.moonCyclePhaseRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// MoonCyclePhaseRestrictedStoneEvolution(phase: MoonCyclePhase.PhaseName, basePokemon: string, evolvedPokemon: string, stone: GameConstants.StoneType\nconst MoonCyclePhaseStoneEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.moonCyclePhaseRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.StoneEvolution);\n// DungeonRestrictedLevelEvolution(dungeon: string, basePokemon: string, evolvedPokemon: string, level: number)\nconst DungeonRestrictedLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.dungeonRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// AnyDungeonLevelEvolution(basePokemon: string, evolvedPokemon: string, level: number)\nconst AnyDungeonLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.anyDungeonRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// AnyGymLevelEvolution(basePokemon: string, evolvedPokemon: string, level: number)\nconst AnyGymLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.anyGymRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// EnvironmentRestrictedLevelEvolution(environment: Environment, basePokemon: string, evolvedPokemon: string, level: number)\n// an Environment is any key of GameConstants.Environments, eg 'MossRock' or 'TrashCloak'\nconst EnvironmentRestrictedLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.environmentRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// EnvironmentDungeonLevelEvolution(environment: Environment, basePokemon: string, evolvedPokemon: string, level: number)\nconst EnvironmentDungeonLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.environmentRestrict)(AnyDungeonLevelEvolution);\n// EnvironmentGymLevelEvolution(environment: Environment, basePokemon: string, evolvedPokemon: string, level: number)\nconst EnvironmentGymLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.environmentRestrict)(AnyGymLevelEvolution);\n// RegionStoneEvolution(region: GameConstants.Region, basePokemon: string, evolvedPokemon: string, stone: GameConstants.StoneType)\nconst RegionStoneEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.regionRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.StoneEvolution);\n// RegionLevelEvolution(region: GameConstants.Region, basePokemon: string, evolvedPokemon: string, level: number)\nconst RegionLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.regionRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// RegionLevelEvolution(region: GameConstants.Region, basePokemon: string, evolvedPokemon: string, level: number)\nconst RegionDayTimedLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.regionRestrict)(DayTimedLevelEvolution);\n// RegionLevelEvolution(region: GameConstants.Region, basePokemon: string, evolvedPokemon: string, level: number)\nconst RegionNightTimedLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.regionRestrict)(NightTimedLevelEvolution);\n// QuestlineLevelEvolution(region: GameConstants.Region, basePokemon: string, evolvedPokemon: string, level: number)\nconst QuestlineLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.questlineRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\n// QuestlineStoneEvolution(region: GameConstants.Region, basePokemon: string, evolvedPokemon: string, stone: GameConstants.StoneType)\nconst QuestlineStoneEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.questlineRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.StoneEvolution);\nconst HeldItemLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.heldItemRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\nconst WeatherRestrictedLevelEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.weatherRestrict)(_Base__WEBPACK_IMPORTED_MODULE_1__.LevelEvolution);\nconst KeyStoneEvolution = (basePokemon, evolvedPokemon) => (0,_Base__WEBPACK_IMPORTED_MODULE_1__.StoneEvolution)(basePokemon, evolvedPokemon, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.StoneType.Key_stone);\nconst MegaEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.megaEvolveRestrict)(KeyStoneEvolution);\n// DayTimedMegaEvolution(megaStone: GameConstants.MegaStoneType, basePokemon: string, evolvedPokemon: string)\nconst DayTimedMegaEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.dayRestrict)(MegaEvolution);\n// NightTimedMegaEvolution(megaStone: GameConstants.MegaStoneType, basePokemon: string, evolvedPokemon: string)\nconst NightTimedMegaEvolution = (0,_Restrictions__WEBPACK_IMPORTED_MODULE_2__.nightRestrict)(MegaEvolution);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/evolutions/Methods.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/evolutions/Restrictions.ts": +/*!*********************************************************!*\ + !*** ./src/modules/pokemons/evolutions/Restrictions.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"GymRestrict\": () => (/* binding */ GymRestrict),\n/* harmony export */ \"anyDungeonRestrict\": () => (/* binding */ anyDungeonRestrict),\n/* harmony export */ \"anyGymRestrict\": () => (/* binding */ anyGymRestrict),\n/* harmony export */ \"dayCyclePartRestrict\": () => (/* binding */ dayCyclePartRestrict),\n/* harmony export */ \"dayRestrict\": () => (/* binding */ dayRestrict),\n/* harmony export */ \"dungeonRestrict\": () => (/* binding */ dungeonRestrict),\n/* harmony export */ \"environmentRestrict\": () => (/* binding */ environmentRestrict),\n/* harmony export */ \"heldItemRestrict\": () => (/* binding */ heldItemRestrict),\n/* harmony export */ \"megaEvolveRestrict\": () => (/* binding */ megaEvolveRestrict),\n/* harmony export */ \"moonCyclePhaseRestrict\": () => (/* binding */ moonCyclePhaseRestrict),\n/* harmony export */ \"nightRestrict\": () => (/* binding */ nightRestrict),\n/* harmony export */ \"questlineRestrict\": () => (/* binding */ questlineRestrict),\n/* harmony export */ \"regionRestrict\": () => (/* binding */ regionRestrict),\n/* harmony export */ \"weatherRestrict\": () => (/* binding */ weatherRestrict)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _requirements_GameStateRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../requirements/GameStateRequirement */ \"./src/modules/requirements/GameStateRequirement.ts\");\n/* harmony import */ var _requirements_HoldingItemRequirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../requirements/HoldingItemRequirement */ \"./src/modules/requirements/HoldingItemRequirement.ts\");\n/* harmony import */ var _requirements_InDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../requirements/InDungeonRequirement */ \"./src/modules/requirements/InDungeonRequirement.ts\");\n/* harmony import */ var _requirements_InEnvironmentRequirement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../requirements/InEnvironmentRequirement */ \"./src/modules/requirements/InEnvironmentRequirement.ts\");\n/* harmony import */ var _requirements_InGymRequirement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../requirements/InGymRequirement */ \"./src/modules/requirements/InGymRequirement.ts\");\n/* harmony import */ var _requirements_InRegionRequirement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../requirements/InRegionRequirement */ \"./src/modules/requirements/InRegionRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../requirements/QuestLineCompletedRequirement */ \"./src/modules/requirements/QuestLineCompletedRequirement.ts\");\n/* harmony import */ var _requirements_DayCyclePartRequirement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../requirements/DayCyclePartRequirement */ \"./src/modules/requirements/DayCyclePartRequirement.ts\");\n/* harmony import */ var _requirements_MoonCyclePhaseRequirement__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../requirements/MoonCyclePhaseRequirement */ \"./src/modules/requirements/MoonCyclePhaseRequirement.ts\");\n/* harmony import */ var _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../requirements/WeatherRequirement */ \"./src/modules/requirements/WeatherRequirement.ts\");\n/* harmony import */ var _requirements_MegaEvolveRequirement__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../requirements/MegaEvolveRequirement */ \"./src/modules/requirements/MegaEvolveRequirement.ts\");\n/* harmony import */ var _Base__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Base */ \"./src/modules/pokemons/evolutions/Base.ts\");\n/* harmony import */ var _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../dayCycle/DayCyclePart */ \"./src/modules/dayCycle/DayCyclePart.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst anyDungeonRestrict = (evo) => (...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(evo(...rest), new _requirements_GameStateRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_0__.GameState.dungeon));\nconst dungeonRestrict = (evo) => (dungeon, ...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(anyDungeonRestrict(evo)(...rest), new _requirements_InDungeonRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](dungeon));\nconst anyGymRestrict = (evo) => (...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(evo(...rest), new _requirements_GameStateRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_0__.GameState.gym));\nconst GymRestrict = (evo) => (town, ...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(anyGymRestrict(evo)(...rest), new _requirements_InGymRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"](town));\nconst regionRestrict = (evo) => (regions, ...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(evo(...rest), new _requirements_InRegionRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"](regions));\nconst environmentRestrict = (evo) => (environment, ...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(evo(...rest), new _requirements_InEnvironmentRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](environment));\nconst heldItemRestrict = (evo) => (heldItemName, ...rest) => {\n const data = evo(...rest);\n return (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(data, new _requirements_HoldingItemRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](data.basePokemon, heldItemName));\n};\nconst questlineRestrict = (evo) => (questName, ...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(evo(...rest), new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"](questName));\nconst weatherRestrict = (evo) => (weather, ...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(evo(...rest), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](weather));\nconst dayCyclePartRestrict = (evo) => (dayCycleParts, ...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(evo(...rest), new _requirements_DayCyclePartRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"](dayCycleParts));\nconst dayRestrict = (evo) => (...rest) => dayCyclePartRestrict(evo)([_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Day, _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Dusk], ...rest);\nconst nightRestrict = (evo) => (...rest) => dayCyclePartRestrict(evo)([_dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Night, _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Dawn], ...rest);\nconst moonCyclePhaseRestrict = (evo) => (moonCyclePhases, ...rest) => (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(evo(...rest), new _requirements_MoonCyclePhaseRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"](moonCyclePhases));\nconst megaEvolveRestrict = (evo) => (megaStone, ...rest) => {\n const data = evo(...rest);\n data.ignoreECChange = true;\n return (0,_Base__WEBPACK_IMPORTED_MODULE_12__.restrict)(data, new _requirements_MegaEvolveRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"](data.basePokemon, megaStone));\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/evolutions/Restrictions.ts?"); + +/***/ }), + +/***/ "./src/modules/pokemons/mapProvider.ts": +/*!*********************************************!*\ + !*** ./src/modules/pokemons/mapProvider.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"setPokemonMap\": () => (/* binding */ setPokemonMap)\n/* harmony export */ });\nconst container = {\n pokemonMap: undefined,\n pokemonList: undefined,\n};\nfunction setPokemonMap(map, list) {\n container.pokemonMap = map;\n container.pokemonList = list;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (container);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/pokemons/mapProvider.ts?"); + +/***/ }), + +/***/ "./src/modules/polyfill.ts": +/*!*********************************!*\ + !*** ./src/modules/polyfill.ts ***! + \*********************************/ +/***/ (() => { + +eval("/**\n * window.requestIdleCallback()\n * version 0.0.0\n * Browser Compatibility:\n * https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback#browser_compatibility\n */\nif (!window.requestIdleCallback) {\n Object.assign(window, {\n requestIdleCallback(callback, options = { timeout: 0 }) {\n const relaxation = 1;\n const timeout = options.timeout || relaxation;\n const start = performance.now();\n return setTimeout(() => {\n callback({\n get didTimeout() {\n return options.timeout ? false : (performance.now() - start) - relaxation > timeout;\n },\n timeRemaining() {\n return Math.max(0, relaxation + (performance.now() - start));\n },\n });\n }, relaxation);\n },\n });\n}\n/**\n* window.cancelIdleCallback()\n* version 0.0.0\n* Browser Compatibility:\n* https://developer.mozilla.org/en-US/docs/Web/API/Window/cancelIdleCallback#browser_compatibility\n*/\nif (!window.cancelIdleCallback) {\n Object.assign(window, {\n cancelIdleCallback(id) {\n clearTimeout(id);\n },\n });\n}\n/**\n* window.requestAnimationFrame()\n* version 0.0.0\n* Browser Compatibility:\n* https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame#browser_compatibility\n*/\nif (!window.requestAnimationFrame) {\n Object.assign(window, {\n requestAnimationFrame(callback) {\n return window.setTimeout(() => {\n callback(Date.now());\n }, 1000 / 60);\n },\n });\n}\n/**\n* window.cancelAnimationFrame()\n* version 0.0.0\n* Browser Compatibility:\n* https://developer.mozilla.org/en-US/docs/Web/API/Window/cancelAnimationFrame#browser_compatibility\n*/\nif (!window.cancelAnimationFrame) {\n Object.assign(window, {\n cancelAnimationFrame(id) {\n clearTimeout(id);\n },\n });\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/polyfill.ts?"); + +/***/ }), + +/***/ "./src/modules/profile/Profile.ts": +/*!****************************************!*\ + !*** ./src/modules/profile/Profile.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Profile)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _utilities_Rand__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utilities/Rand */ \"./src/modules/utilities/Rand.ts\");\n\n\n\n\nclass Profile {\n constructor(name = 'Trainer', trainer = _utilities_Rand__WEBPACK_IMPORTED_MODULE_3__[\"default\"].floor(Profile.MAX_TRAINER), pokemon = 0, background = _utilities_Rand__WEBPACK_IMPORTED_MODULE_3__[\"default\"].floor(Profile.MAX_BACKGROUND), textColor = '#f5f5f5') {\n this.saveKey = 'profile';\n this.defaults = {};\n this.name = ko.observable(name);\n this.trainer = ko.observable(trainer).extend({ numeric: 0 });\n this.trainer.subscribe((t) => document.documentElement.style.setProperty('--trainer-image', `url('../assets/images/profile/trainer-${t}.png')`));\n this.pokemon = ko.observable(pokemon).extend({ numeric: 2 });\n this.pokemonShiny = ko.observable(false).extend({ boolean: null });\n this.pokemonFemale = ko.observable(false).extend({ boolean: null });\n this.background = ko.observable(background).extend({ numeric: 0 });\n this.textColor = ko.observable(textColor);\n }\n static getTrainerCard(name = 'Trainer', trainer = _utilities_Rand__WEBPACK_IMPORTED_MODULE_3__[\"default\"].floor(Profile.MAX_TRAINER), pokemon = _utilities_Rand__WEBPACK_IMPORTED_MODULE_3__[\"default\"].intBetween(1, 151), pokemonShiny = false, pokemonFemale = false, background = _utilities_Rand__WEBPACK_IMPORTED_MODULE_3__[\"default\"].floor(Profile.MAX_BACKGROUND), textColor = 'whitesmoke', badges = 0, pokedex = 0, seconds = 0, version = '0.0.0', challenges = {}, id = '', key) {\n const template = document.querySelector('#trainerCardTemplate');\n const node = template.content.cloneNode(true);\n // Our container\n const container = node.querySelector('.trainer-card-container');\n container.dataset.key = key;\n // Our trainer card\n const card = node.querySelector('.trainer-card');\n card.classList.add(`trainer-bg-${background}`);\n card.style.color = textColor;\n card.dataset.key = key;\n card.addEventListener('click', (e) => {\n if (e.target.classList.contains('context-menu-button')) {\n return;\n }\n // If no key provided, this is a preview\n if (key === undefined) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({ message: 'What a lovely profile!' });\n return;\n }\n document.querySelector('#saveSelector').remove();\n Save.key = key;\n App.start();\n });\n const trainerImage = node.querySelector('.trainer-image');\n trainerImage.src = `assets/images/profile/trainer-${trainer}.png`;\n const trainerName = node.querySelector('.trainer-name');\n trainerName.innerText = name;\n const table = node.querySelector('.table');\n table.style.color = textColor;\n const trainerBadges = node.querySelector('.trainer-badges');\n trainerBadges.innerText = `${badges}`;\n const trainerPokedex = node.querySelector('.trainer-pokedex');\n trainerPokedex.innerText = `${pokedex}`;\n const trainerTime = node.querySelector('.trainer-time');\n trainerTime.innerText = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.formatTimeFullLetters(seconds);\n const trainerPokemonImage = node.querySelector('.trainer-pokemon-image');\n trainerPokemonImage.src = `assets/images/${pokemonShiny ? 'shiny' : ''}pokemon/${pokemon}${pokemonFemale ? '-f' : ''}.png`;\n const trainerVersion = node.querySelector('.trainer-version');\n trainerVersion.innerText = `v${version}`;\n const badgeContainer = node.querySelector('.challenge-badges');\n Object.entries(challenges)\n .filter(([, v]) => v)\n .forEach(([c]) => {\n const img = document.createElement('img');\n img.onerror = () => img.remove();\n img.className = 'm-1';\n img.width = 18;\n img.src = `assets/images/challenges/${c}.png`;\n img.title = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.camelCaseToString(c);\n img.dataset.toggle = 'tooltip';\n img.dataset.placement = 'top';\n badgeContainer.appendChild(img);\n });\n const trainerId = node.querySelector('.trainer-id');\n trainerId.innerText = id.length ? `#${id}` : '';\n if (key === undefined) {\n node.querySelector('.context-menu-button').remove();\n }\n return container;\n }\n initialize() {\n const throttledTimePlayed = ko.pureComputed(() => App.game.statistics.secondsPlayed()).extend({ rateLimit: 60 * 1000 });\n // Load trainer card preview\n const preview = ko.pureComputed(() => Profile.getTrainerCard(this.name(), this.trainer(), this.pokemon(), this.pokemonShiny(), this.pokemonFemale(), this.background(), this.textColor(), App.game.badgeCase.badgeList.filter((b) => b()).length, App.game.party.caughtPokemon.length, throttledTimePlayed(), App.game.update.version, App.game.challenges.toJSON().list, player.trainerId));\n preview.subscribe((previewElement) => {\n document.getElementById('profile-trainer-card').innerHTML = '';\n document.getElementById('profile-trainer-card').appendChild(previewElement);\n });\n }\n fromJSON(json) {\n if (!json || !json.name) {\n return;\n }\n if (json.name)\n this.name(json.name);\n if (json.trainer !== undefined)\n this.trainer(json.trainer);\n if (json.pokemon !== undefined)\n this.pokemon(json.pokemon);\n if (json.pokemonShiny !== undefined)\n this.pokemonShiny(json.pokemonShiny);\n if (json.pokemonFemale !== undefined)\n this.pokemonFemale(json.pokemonFemale);\n if (json.background !== undefined)\n this.background(json.background);\n if (json.textColor)\n this.textColor(json.textColor);\n }\n toJSON() {\n return {\n name: this.name(),\n trainer: this.trainer(),\n pokemon: this.pokemon(),\n pokemonShiny: this.pokemonShiny(),\n pokemonFemale: this.pokemonFemale(),\n background: this.background(),\n textColor: this.textColor(),\n };\n }\n}\nProfile.MAX_TRAINER = 160;\nProfile.MAX_BACKGROUND = 40;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/profile/Profile.ts?"); + +/***/ }), + +/***/ "./src/modules/quests/QuestLineState.ts": +/*!**********************************************!*\ + !*** ./src/modules/quests/QuestLineState.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar QuestLineState;\n(function (QuestLineState) {\n QuestLineState[QuestLineState[\"inactive\"] = 0] = \"inactive\";\n QuestLineState[QuestLineState[\"started\"] = 1] = \"started\";\n QuestLineState[QuestLineState[\"ended\"] = 2] = \"ended\";\n QuestLineState[QuestLineState[\"suspended\"] = 3] = \"suspended\";\n})(QuestLineState || (QuestLineState = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (QuestLineState);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/quests/QuestLineState.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/AchievementRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/AchievementRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AchievementRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass AchievementRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(requiredValue, option, achievementType = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.None) {\n super(requiredValue, option);\n this.achievementType = achievementType;\n }\n toString() {\n return `${this.constructor.name} ${this.option}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/AchievementRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/AttackRequirement.ts": +/*!*******************************************************!*\ + !*** ./src/modules/requirements/AttackRequirement.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AttackRequirement)\n/* harmony export */ });\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _weather_WeatherType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../weather/WeatherType */ \"./src/modules/weather/WeatherType.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\n\n\nclass AttackRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementType.Attack);\n }\n getProgress() {\n // Calculate real total attack regardless of current region\n const currentAttack = AttackRequirement.attack();\n return Math.min(currentAttack, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Attack needed.`;\n }\n}\nAttackRequirement.attack = ko.pureComputed(() => App.game.party.calculatePokemonAttack(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None, _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None, true, undefined, true, false, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Clear, true, true))\n .extend({ rateLimit: 500 });\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/AttackRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/BattleFrontierHighestStageRequirement.ts": +/*!***************************************************************************!*\ + !*** ./src/modules/requirements/BattleFrontierHighestStageRequirement.ts ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BattleFrontierHighestStageRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass BattleFrontierHighestStageRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Battle Frontier\"]);\n }\n getProgress() {\n return Math.min(App.game.statistics.battleFrontierHighestStageCompleted(), this.requiredValue);\n }\n hint() {\n return `Stage ${this.requiredValue} needs to be completed at the Battle Frontier.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/BattleFrontierHighestStageRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/BattleFrontierTotalStageRequirement.ts": +/*!*************************************************************************!*\ + !*** ./src/modules/requirements/BattleFrontierTotalStageRequirement.ts ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BattleFrontierTotalStageRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass BattleFrontierTotalStageRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Battle Frontier\"]);\n }\n getProgress() {\n return Math.min(App.game.statistics.battleFrontierTotalStagesCompleted(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} total Stages need to be completed at the Battle Frontier.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/BattleFrontierTotalStageRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/BerriesUnlockedRequirement.ts": +/*!****************************************************************!*\ + !*** ./src/modules/requirements/BerriesUnlockedRequirement.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BerriesUnlockedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass BerriesUnlockedRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Farming);\n }\n getProgress() {\n return Math.min(App.game.farming.unlockedBerries.filter((b) => b()).length, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} different Berry types need to be unlocked.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/BerriesUnlockedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/CapturedRequirement.ts": +/*!*********************************************************!*\ + !*** ./src/modules/requirements/CapturedRequirement.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CapturedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass CapturedRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Total Captured\"]);\n }\n getProgress() {\n return Math.min(App.game.statistics.totalPokemonCaptured(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Pokémon need to be captured.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/CapturedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/CaughtPokemonRequirement.ts": +/*!**************************************************************!*\ + !*** ./src/modules/requirements/CaughtPokemonRequirement.ts ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CaughtPokemonRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass CaughtPokemonRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Caught Pokemon\"]);\n }\n getProgress() {\n return Math.min(App.game.party.caughtPokemon.filter((p) => p.id > 0).length, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} unique Pokémon need to be caught.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/CaughtPokemonRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ClearDungeonRequirement.ts": +/*!*************************************************************!*\ + !*** ./src/modules/requirements/ClearDungeonRequirement.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ClearDungeonRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass ClearDungeonRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, dungeonIndex, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Clear Dungeon\"]);\n this.dungeonIndex = dungeonIndex;\n }\n getProgress() {\n return Math.min(App.game.statistics.dungeonsCleared[this.dungeonIndex](), this.requiredValue);\n }\n hint() {\n if (this.requiredValue === 1) {\n return `${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.RegionDungeons.flat()[this.dungeonIndex]} needs to be completed.`;\n }\n return `${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.RegionDungeons.flat()[this.dungeonIndex]} needs to be completed ${this.requiredValue} times.`;\n }\n toString() {\n return `${super.toString()} ${this.dungeonIndex}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ClearDungeonRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ClearGymRequirement.ts": +/*!*********************************************************!*\ + !*** ./src/modules/requirements/ClearGymRequirement.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ClearGymRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass ClearGymRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, gymIndex, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Clear Gym\"]);\n this.gymIndex = gymIndex;\n }\n getProgress() {\n return Math.min(App.game.statistics.gymsDefeated[this.gymIndex](), this.requiredValue);\n }\n hint() {\n if (this.requiredValue === 1) {\n return `Requires the ${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.RegionGyms.flat()[this.gymIndex]} Gym to be completed.`;\n }\n return `Requires the ${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.RegionGyms.flat()[this.gymIndex]} Gym to be defeated ${this.requiredValue} times.`;\n }\n toString() {\n return `${super.toString()} ${this.gymIndex}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ClearGymRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ClickRequirement.ts": +/*!******************************************************!*\ + !*** ./src/modules/requirements/ClickRequirement.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ClickRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass ClickRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Attack);\n }\n getProgress() {\n return Math.min(App.game.statistics.clickAttacks(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} click attacks need to be completed.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ClickRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ClientRequirement.ts": +/*!*******************************************************!*\ + !*** ./src/modules/requirements/ClientRequirement.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ClientRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass ClientRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(usingClient = true) {\n super(1, usingClient ? _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more : _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less);\n this.usingClient = usingClient;\n }\n // eslint-disable-next-line class-methods-use-this\n getProgress() {\n return App.isUsingClient ? 1 : 0;\n }\n hint() {\n return this.usingClient ? 'Use the client' : 'Use the browser version';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ClientRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ContestWonRequirement.ts": +/*!***********************************************************!*\ + !*** ./src/modules/requirements/ContestWonRequirement.ts ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ContestWonRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass ContestWonRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(resultRequired, value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Safari);\n this.resultRequired = resultRequired;\n }\n getProgress() {\n let total = App.game.statistics.contestResults[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ContestResults.Normal]();\n if (this.resultRequired <= _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ContestResults.Super) {\n total += App.game.statistics.contestResults[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ContestResults.Super]();\n }\n if (this.resultRequired <= _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ContestResults.Hyper) {\n total += App.game.statistics.contestResults[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ContestResults.Hyper]();\n }\n if (this.resultRequired <= _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ContestResults.Master) {\n total += App.game.statistics.contestResults[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ContestResults.Master]();\n }\n return Math.min(total, this.requiredValue);\n }\n hint() {\n return `You need to complete atleast ${this.requiredValue} Contests with result ${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ContestResults[this.resultRequired]} or higher.`;\n }\n toString() {\n return `${super.toString()} ${this.resultRequired}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ContestWonRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/CustomRequirement.ts": +/*!*******************************************************!*\ + !*** ./src/modules/requirements/CustomRequirement.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CustomRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass CustomRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(focus, required, hintText, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(1, option);\n this.focus = focus;\n this.required = required;\n this.hintText = hintText;\n }\n getProgress() {\n return Number(this.focus() === this.required);\n }\n hint() {\n return this.hintText;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/CustomRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/DayCyclePartRequirement.ts": +/*!*************************************************************!*\ + !*** ./src/modules/requirements/DayCyclePartRequirement.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DayCyclePartRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n/* harmony import */ var _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dayCycle/DayCyclePart */ \"./src/modules/dayCycle/DayCyclePart.ts\");\n/* harmony import */ var _dayCycle_DayCycle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dayCycle/DayCycle */ \"./src/modules/dayCycle/DayCycle.ts\");\n\n\n\n\nclass DayCyclePartRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(dayCycleParts, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(1, option);\n this.dayCycleParts = dayCycleParts;\n }\n getProgress() {\n return Number(this.dayCycleParts.includes(_dayCycle_DayCycle__WEBPACK_IMPORTED_MODULE_3__[\"default\"].currentDayCyclePart()));\n }\n hint() {\n return `Your local part of the day must be ${this.dayCycleParts.map((dayCyclePart) => _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_2__[\"default\"][dayCyclePart]).join(' or ')}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/DayCyclePartRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/DayOfWeekRequirement.ts": +/*!**********************************************************!*\ + !*** ./src/modules/requirements/DayOfWeekRequirement.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DayOfWeekRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\nclass DayOfWeekRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(DayOfWeekNum, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal) {\n super(1, option);\n this.DayOfWeekNum = DayOfWeekNum;\n }\n getProgress() {\n return +(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].today().getDay() === this.DayOfWeekNum);\n }\n // eslint-disable-next-line class-methods-use-this\n hint() {\n return `Come back on ${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.DayOfWeek[this.DayOfWeekNum]}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/DayOfWeekRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/DefeatedRequirement.ts": +/*!*********************************************************!*\ + !*** ./src/modules/requirements/DefeatedRequirement.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DefeatedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass DefeatedRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Total Defeated\"]);\n }\n getProgress() {\n return Math.min(App.game.statistics.totalPokemonDefeated(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Pokémon need to be defeated.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/DefeatedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/DevelopmentRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/DevelopmentRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DevelopmentRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\nclass DevelopmentRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(requirement = null) {\n super(1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more);\n this.requirement = requirement;\n this.development = false;\n if (!requirement) {\n if (DevelopmentRequirement.default) {\n return DevelopmentRequirement.default;\n }\n DevelopmentRequirement.default = this;\n }\n this.development = _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isDevelopmentBuild();\n }\n // eslint-disable-next-line class-methods-use-this\n getProgress() {\n var _a, _b;\n return +(this.development && ((_b = (_a = this.requirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true));\n }\n // eslint-disable-next-line class-methods-use-this\n hint() {\n var _a, _b;\n return !this.development ? 'This is probably still under development.' : (_b = (_a = this.requirement) === null || _a === void 0 ? void 0 : _a.hint()) !== null && _b !== void 0 ? _b : 'This is probably still under development.';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/DevelopmentRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/DiamondRequirement.ts": +/*!********************************************************!*\ + !*** ./src/modules/requirements/DiamondRequirement.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DiamondRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass DiamondRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Underground);\n }\n getProgress() {\n return Math.min(App.game.statistics.totalDiamonds(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Diamonds need to be obtained.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/DiamondRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/FarmHandRequirement.ts": +/*!*********************************************************!*\ + !*** ./src/modules/requirements/FarmHandRequirement.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FarmHandRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass FarmHandRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(handsUnlocked) {\n super(handsUnlocked, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Farming);\n }\n getProgress() {\n return Math.min(App.game.farming.farmHands.available().length, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Farm Hands needs to be unlocked.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/FarmHandRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/FarmPlotsUnlockedRequirement.ts": +/*!******************************************************************!*\ + !*** ./src/modules/requirements/FarmPlotsUnlockedRequirement.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FarmPlotsUnlockedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass FarmPlotsUnlockedRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Farming);\n }\n getProgress() {\n return Math.min(App.game.farming.unlockedPlotCount(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Plots in the Farm need to be unlocked.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/FarmPlotsUnlockedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/FarmPointsRequirement.ts": +/*!***********************************************************!*\ + !*** ./src/modules/requirements/FarmPointsRequirement.ts ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FarmPointsRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass FarmPointsRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(requiredValue, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(requiredValue, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Farming);\n }\n getProgress() {\n return Math.min(App.game.statistics.totalFarmPoints(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Farm Points need to be obtained.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/FarmPointsRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/GameStateRequirement.ts": +/*!**********************************************************!*\ + !*** ./src/modules/requirements/GameStateRequirement.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GameStateRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass GameStateRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(gameState, expect = true) {\n super(1, expect ? _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more : _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less);\n this.gameState = gameState;\n }\n getProgress() {\n return Number(App.game.gameState === this.gameState);\n }\n hint() {\n return `The game must be in the ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.GameState[this.gameState])} state`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/GameStateRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/GymBadgeRequirement.ts": +/*!*********************************************************!*\ + !*** ./src/modules/requirements/GymBadgeRequirement.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GymBadgeRequirement)\n/* harmony export */ });\n/* harmony import */ var _enums_Badges__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/Badges */ \"./src/modules/enums/Badges.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass GymBadgeRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(badge, option = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementOption.more) {\n super(1, option);\n this.badge = badge;\n }\n getProgress() {\n return +App.game.badgeCase.hasBadge(this.badge);\n }\n hint() {\n return `Requires the ${_GameConstants__WEBPACK_IMPORTED_MODULE_1__.camelCaseToString(_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"][this.badge])} badge.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/GymBadgeRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/HatchRequirement.ts": +/*!******************************************************!*\ + !*** ./src/modules/requirements/HatchRequirement.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HatchRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass HatchRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Hatchery);\n }\n getProgress() {\n return Math.min(App.game.statistics.totalPokemonHatched(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} eggs need to be hatched.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/HatchRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/HatcheryHelperRequirement.ts": +/*!***************************************************************!*\ + !*** ./src/modules/requirements/HatcheryHelperRequirement.ts ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HatcheryHelperRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass HatcheryHelperRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(helpersUnlocked, bonusRequired) {\n super(helpersUnlocked, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Hatchery);\n this.bonusRequired = bonusRequired;\n }\n getProgress() {\n return Math.min(App.game.breeding.hatcheryHelpers.available().filter((h) => h.hatchBonus() >= this.bonusRequired).length, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Hatchery Helpers need at least ${this.bonusRequired} bonus.`;\n }\n toString() {\n return `${super.toString()} ${this.bonusRequired}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/HatcheryHelperRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/HoldingItemRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/HoldingItemRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HoldingItemRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass HoldingItemRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(pokemon, itemName, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(1, option);\n this.pokemon = pokemon;\n this.itemName = itemName;\n }\n getProgress() {\n var _a;\n const heldItem = (_a = App.game.party.getPokemonByName(this.pokemon)) === null || _a === void 0 ? void 0 : _a.heldItem();\n return (heldItem === null || heldItem === void 0 ? void 0 : heldItem.name) === this.itemName ? 1 : 0;\n }\n hint() {\n return `Your pokemon must ${this.option == _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less ? 'not' : ''} be holding ${_GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].anOrA(this.itemName)} ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(this.itemName)}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/HoldingItemRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/InDungeonRequirement.ts": +/*!**********************************************************!*\ + !*** ./src/modules/requirements/InDungeonRequirement.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ InDungeonRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass InDungeonRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(dungeon, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(1, option);\n this.dungeon = dungeon;\n }\n getProgress() {\n return Number(DungeonRunner.dungeon.name === this.dungeon);\n }\n hint() {\n return `You must be in the ${this.dungeon} dungeon`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/InDungeonRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/InEnvironmentRequirement.ts": +/*!**************************************************************!*\ + !*** ./src/modules/requirements/InEnvironmentRequirement.ts ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ InEnvironmentRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass InEnvironmentRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(environment, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(1, option);\n this.environment = environment;\n }\n getProgress() {\n return Number(MapHelper.getCurrentEnvironments().includes(this.environment));\n }\n hint() {\n return `You must be in ${_GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].anOrA(this.environment)} ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(this.environment)} environment`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/InEnvironmentRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/InGymRequirement.ts": +/*!******************************************************!*\ + !*** ./src/modules/requirements/InGymRequirement.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ InGymRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass InGymRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(gymTown, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(1, option);\n this.gymTown = gymTown;\n }\n getProgress() {\n return Number(GymRunner.gymObservable().town === this.gymTown);\n }\n hint() {\n return `You must be in the ${this.gymTown} dungeon`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/InGymRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/InRegionRequirement.ts": +/*!*********************************************************!*\ + !*** ./src/modules/requirements/InRegionRequirement.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ InRegionRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass InRegionRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(regions, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(1, option);\n this.regions = regions;\n }\n getProgress() {\n return Number(this.regions.includes(player.region));\n }\n hint() {\n return this.regions.length > 1\n ? `You must be in one of the following regions: ${this.regions.map((r) => (0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region[r])).join(', ')}`\n : `You must be in the ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region[this.regions[0]])} region`;\n }\n isCurrentlyPossible() {\n return this.regions.find((region) => region <= player.highestRegion()) !== undefined;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/InRegionRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ItemOwnedRequirement.ts": +/*!**********************************************************!*\ + !*** ./src/modules/requirements/ItemOwnedRequirement.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ItemOwnedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass ItemOwnedRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(itemName, amount = 1, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(amount, option);\n this.itemName = itemName;\n }\n getProgress() {\n return player.itemList[this.itemName]();\n }\n hint() {\n const amountHint = this.option === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal ? this.requiredValue :\n (this.option === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more ? `${this.requiredValue} or more` : `less than ${this.requiredValue}`);\n return `You must own ${amountHint} ${_items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[this.itemName].displayName}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ItemOwnedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/LazyRequirementWrapper.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/LazyRequirementWrapper.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LazyRequirementWrapper)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass LazyRequirementWrapper extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(reqCreator) {\n super(1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more);\n this.reqCreator = reqCreator;\n }\n getProgress() {\n return this.unwrap().getProgress();\n }\n hint() {\n return this.unwrap().hint();\n }\n unwrap() {\n if (!this.req) {\n this.req = this.reqCreator();\n this.requiredValue = this.req.requiredValue;\n this.option = this.req.option;\n }\n return this.req;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/LazyRequirementWrapper.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/MaxLevelOakItemRequirement.ts": +/*!****************************************************************!*\ + !*** ./src/modules/requirements/MaxLevelOakItemRequirement.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MaxLevelOakItemRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass MaxLevelOakItemRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Max Level Oak Item\"]);\n }\n getProgress() {\n return Math.min(App.game.oakItems.maxLevelOakItems(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Oak Items leveled to the maximum level.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/MaxLevelOakItemRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/MaxRegionRequirement.ts": +/*!**********************************************************!*\ + !*** ./src/modules/requirements/MaxRegionRequirement.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MaxRegionRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass MaxRegionRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(maxRegion = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region.none, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(maxRegion, option);\n }\n getProgress() {\n return Math.min(player.highestRegion(), this.requiredValue);\n }\n hint() {\n return `You need to reach the ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region[this.requiredValue])} region.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/MaxRegionRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/MegaEvolveRequirement.ts": +/*!***********************************************************!*\ + !*** ./src/modules/requirements/MegaEvolveRequirement.ts ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MegaEvolveRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pokemons/PokemonList */ \"./src/modules/pokemons/PokemonList.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass MegaEvolveRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(name, megaStone) {\n super(1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal);\n this.name = name;\n this.megaStone = megaStone;\n }\n getProgress() {\n const partyPokemon = App.game.party.getPokemonByName(this.name);\n return player.hasMegaStone(this.megaStone)\n && (partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.attack) >= _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_1__.pokemonMap[this.name].attack * _GameConstants__WEBPACK_IMPORTED_MODULE_0__.MEGA_REQUIRED_ATTACK_MULTIPLIER ? 1 : 0;\n }\n hint() {\n var _a, _b;\n const attackRequired = _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_1__.pokemonMap[this.name].attack * _GameConstants__WEBPACK_IMPORTED_MODULE_0__.MEGA_REQUIRED_ATTACK_MULTIPLIER;\n if (this.getProgress()) {\n return 'Use a Key Stone to Mega Evolve.';\n }\n else {\n const hints = [];\n if (!player.hasMegaStone(this.megaStone)) {\n hints.push(`${this.name} needs the ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.MegaStoneType[this.megaStone])} Mega Stone.`);\n }\n if (((_b = (_a = App.game.party.getPokemonByName(this.name)) === null || _a === void 0 ? void 0 : _a.attack) !== null && _b !== void 0 ? _b : 0) < attackRequired) {\n hints.push(`Needs at least ${attackRequired.toLocaleString('en-US')} attack to Mega Evolve.`);\n }\n return hints.join('
');\n }\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/MegaEvolveRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/MoneyRequirement.ts": +/*!******************************************************!*\ + !*** ./src/modules/requirements/MoneyRequirement.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MoneyRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass MoneyRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(requiredValue, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(requiredValue, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Pokedollars);\n }\n getProgress() {\n return Math.min(App.game.statistics.totalMoney(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Pokédollars need to be obtained.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/MoneyRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/MoonCyclePhaseRequirement.ts": +/*!***************************************************************!*\ + !*** ./src/modules/requirements/MoonCyclePhaseRequirement.ts ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MoonCyclePhaseRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n/* harmony import */ var _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../moonCycle/MoonCyclePhase */ \"./src/modules/moonCycle/MoonCyclePhase.ts\");\n/* harmony import */ var _moonCycle_MoonCycle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../moonCycle/MoonCycle */ \"./src/modules/moonCycle/MoonCycle.ts\");\n\n\n\n\nclass MoonCyclePhaseRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(moonCyclePhases, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(1, option);\n this.moonCyclePhases = moonCyclePhases;\n }\n getProgress() {\n return Number(this.moonCyclePhases.includes(_moonCycle_MoonCycle__WEBPACK_IMPORTED_MODULE_3__[\"default\"].currentMoonCyclePhase()));\n }\n hint() {\n return `The moon phase must be ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(this.moonCyclePhases.map((moonCyclePhase) => _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_2__[\"default\"][moonCyclePhase]).join(' or '))}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/MoonCyclePhaseRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/MultiRequirement.ts": +/*!******************************************************!*\ + !*** ./src/modules/requirements/MultiRequirement.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MultiRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass MultiRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(requirements = []) {\n super(requirements.length, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more);\n this.requirements = requirements;\n }\n isCompleted() {\n return this.requirements.every((requirement) => requirement.isCompleted());\n }\n hint() {\n const output = [];\n this.requirements.forEach((requirement) => {\n if (!requirement.isCompleted()) {\n output.push(requirement.hint().replace(/\\./g, ''));\n }\n });\n return `${output.join(' and ')}.`;\n }\n getProgress() {\n const completed = this.requirements.filter((requirement) => requirement.isCompleted()).length;\n return Math.min(completed, this.requiredValue);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/MultiRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/NullRequirement.ts": +/*!*****************************************************!*\ + !*** ./src/modules/requirements/NullRequirement.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ NullRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass NullRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor() {\n super(69420, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more);\n }\n getProgress() {\n return Math.min(0, this.requiredValue);\n }\n // eslint-disable-next-line class-methods-use-this\n hint() {\n return 'This is probably still under development.';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/NullRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ObtainedPokemonRequirement.ts": +/*!****************************************************************!*\ + !*** ./src/modules/requirements/ObtainedPokemonRequirement.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ObtainedPokemonRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass ObtainedPokemonRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(pokemon, uncaught = false) {\n super(1, uncaught ? _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less : _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more);\n this.pokemon = pokemon;\n }\n getProgress() {\n return App.game.party.alreadyCaughtPokemonByName(this.pokemon) ? 1 : 0;\n }\n hint() {\n return this.option === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more\n ? `${this.pokemon} needs to be caught.`\n : `${this.pokemon} cannot be caught yet.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ObtainedPokemonRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/OneFromManyRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/OneFromManyRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ OneFromManyRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass OneFromManyRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(requirements = []) {\n super(1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more);\n this.requirements = requirements;\n }\n getProgressPercentage() {\n return ((this.getProgress() / this.requiredValue) * 100).toFixed(1);\n }\n isCompleted() {\n return this.requirements.some((requirement) => requirement.isCompleted());\n }\n hint() {\n const output = [];\n this.requirements.forEach((requirement) => {\n if (!requirement.isCompleted()) {\n output.push(requirement.hint().replace(/\\./g, ''));\n }\n });\n return `${output.join(' or ')}.`;\n }\n getProgress() {\n const completed = this.requirements.filter((requirement) => requirement.isCompleted()).length;\n return Math.min(completed, this.requiredValue);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/OneFromManyRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/PokeballRequirement.ts": +/*!*********************************************************!*\ + !*** ./src/modules/requirements/PokeballRequirement.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokeballRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass PokeballRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, pokeball, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Poke Balls\"]);\n this.pokeball = pokeball;\n }\n getProgress() {\n return Math.min(App.game.statistics.pokeballsObtained[this.pokeball](), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} ${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Pokeball[this.pokeball]} need to be obtained.`;\n }\n toString() {\n return `${super.toString()} ${this.pokeball}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/PokeballRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/PokemonDefeatedSelectNRequirement.ts": +/*!***********************************************************************!*\ + !*** ./src/modules/requirements/PokemonDefeatedSelectNRequirement.ts ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokemonDefeatedSelectNRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pokemons/PokemonHelper */ \"./src/modules/pokemons/PokemonHelper.ts\");\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\n\nclass PokemonDefeatedSelectNRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n constructor(pokemon, index, total, select) {\n super(1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal);\n this.pokemon = pokemon;\n this.index = index;\n this.total = total;\n this.select = select;\n }\n getProgress() {\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].seed(App.game.statistics.pokemonDefeated[_pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_1__.getPokemonByName(this.pokemon).id]());\n const numbersSelected = _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].shuffleArray([...Array(this.total).keys()]).slice(0, this.select);\n return +numbersSelected.includes(this.index);\n }\n // eslint-disable-next-line class-methods-use-this\n hint() {\n return 'Find it elsewhere.';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/PokemonDefeatedSelectNRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/PokemonLevelRequirement.ts": +/*!*************************************************************!*\ + !*** ./src/modules/requirements/PokemonLevelRequirement.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokemonLevelRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass PokemonLevelRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(pokemon, level, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(level, option);\n this.pokemon = pokemon;\n }\n getProgress() {\n var _a;\n return Math.min(((_a = App.game.party.getPokemonByName(this.pokemon)) === null || _a === void 0 ? void 0 : _a.level) || 0, this.requiredValue);\n }\n hint() {\n return `Your ${this.pokemon} needs to be ${this.option === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more\n ? 'at least'\n : 'below'} level ${this.requiredValue}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/PokemonLevelRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/PokerusStatusRequirement.ts": +/*!**************************************************************!*\ + !*** ./src/modules/requirements/PokerusStatusRequirement.ts ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PokerusStatusRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass PokerusStatusRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(pokemonRequired, statusRequired) {\n super(pokemonRequired, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Pokerus);\n this.statusRequired = statusRequired;\n }\n getProgress() {\n return Math.min(App.game.party.caughtPokemon.filter((p) => p.pokerus >= this.statusRequired).length, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Pokémon needs to be infected.`;\n }\n toString() {\n return `${super.toString()} ${this.statusRequired}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/PokerusStatusRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/QuestLevelRequirement.ts": +/*!***********************************************************!*\ + !*** ./src/modules/requirements/QuestLevelRequirement.ts ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ QuestLevelRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass QuestLevelRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(levelRequired) {\n super(levelRequired, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Quest);\n }\n getProgress() {\n return Math.min(App.game.quests.level(), this.requiredValue);\n }\n hint() {\n return `Needs quest level ${this.requiredValue}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/QuestLevelRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/QuestLineCompletedRequirement.ts": +/*!*******************************************************************!*\ + !*** ./src/modules/requirements/QuestLineCompletedRequirement.ts ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ QuestLineCompletedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../quests/QuestLineState */ \"./src/modules/quests/QuestLineState.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass QuestLineCompletedRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n get quest() {\n if (!this.cachedQuest) {\n this.cachedQuest = App.game.quests.getQuestLine(this.questLineName);\n }\n return this.cachedQuest;\n }\n constructor(questLineName, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal) {\n super(1, option);\n this.questLineName = questLineName;\n }\n getProgress() {\n return this.quest.state() === _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ended ? 1 : 0;\n }\n hint() {\n return `Questline ${this.questLineName} needs to be ${this.option !== _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less ? 'completed' : 'incomplete'}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/QuestLineCompletedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/QuestLineStartedRequirement.ts": +/*!*****************************************************************!*\ + !*** ./src/modules/requirements/QuestLineStartedRequirement.ts ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ QuestLineStartedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../quests/QuestLineState */ \"./src/modules/quests/QuestLineState.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass QuestLineStartedRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n get quest() {\n if (!this.cachedQuest) {\n this.cachedQuest = App.game.quests.getQuestLine(this.questLineName);\n }\n return this.cachedQuest;\n }\n constructor(questLineName, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal) {\n super(1, option);\n this.questLineName = questLineName;\n }\n getProgress() {\n return +(this.quest.state() !== _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_1__[\"default\"].inactive);\n }\n hint() {\n return `Questline ${this.questLineName} needs to ${this.option !== _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less ? 'be started' : 'not be started yet'}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/QuestLineStartedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/QuestLineStepCompletedRequirement.ts": +/*!***********************************************************************!*\ + !*** ./src/modules/requirements/QuestLineStepCompletedRequirement.ts ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ QuestLineStepCompletedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../quests/QuestLineState */ \"./src/modules/quests/QuestLineState.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass QuestLineStepCompletedRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n get quest() {\n if (!this.cachedQuest) {\n this.cachedQuest = App.game.quests.getQuestLine(this.questLineName);\n }\n return this.cachedQuest;\n }\n constructor(questLineName, questIndex, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal) {\n super(1, option);\n this.questLineName = questLineName;\n this.questIndex = questIndex;\n }\n getProgress() {\n let questIndex = typeof this.questIndex === 'number' ? this.questIndex : (typeof this.questIndex === 'function' ? this.questIndex() : 0);\n return (this.quest.state() === _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ended || this.quest.curQuest() > questIndex) ? 1 : 0;\n }\n isCompleted() {\n return this.quest.state() == _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suspended ? false : super.isCompleted();\n }\n hint() {\n return this.option !== _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less ? `Progress further in questline ${this.questLineName}.` : `Questline ${this.questLineName} has progressed past this point.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/QuestLineStepCompletedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/QuestRequirement.ts": +/*!******************************************************!*\ + !*** ./src/modules/requirements/QuestRequirement.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ QuestRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass QuestRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Quest);\n }\n getProgress() {\n return Math.min(App.game.statistics.questsCompleted(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Quests need to be completed.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/QuestRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/Requirement.ts": +/*!*************************************************!*\ + !*** ./src/modules/requirements/Requirement.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Requirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\nclass Requirement {\n constructor(requiredValue, option) {\n this.requiredValue = requiredValue;\n this.option = option;\n }\n getProgressPercentage() {\n switch (this.option) {\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less:\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal:\n return this.isCompleted() ? 100 : 0;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more:\n default:\n const fraction = this.requiredValue != 0 ? (this.getProgress() / this.requiredValue) : +this.isCompleted();\n return Math.max(fraction * 100, 100).toFixed(1);\n }\n }\n isCompleted() {\n switch (this.option) {\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.less:\n return this.getProgress() < this.requiredValue;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal:\n return this.getProgress() === this.requiredValue;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more:\n default:\n return this.getProgress() >= this.requiredValue;\n }\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/Requirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/RouteKillRequirement.ts": +/*!**********************************************************!*\ + !*** ./src/modules/requirements/RouteKillRequirement.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RouteKillRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _routes_Routes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../routes/Routes */ \"./src/modules/routes/Routes.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\n\nclass RouteKillRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(value, region, route, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Route Defeats\"]);\n this.region = region;\n this.route = route;\n }\n getProgress() {\n const routeKills = App.game.statistics.routeKills[this.region][this.route]();\n return Math.min(routeKills, this.requiredValue);\n }\n hint() {\n if (this.requiredValue !== _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ROUTE_KILLS_NEEDED) {\n return `${this.requiredValue} Pokémon need to be defeated on ${_routes_Routes__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getName(this.route, this.region, true)}.`;\n }\n return `${_routes_Routes__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getName(this.route, this.region, true)} still needs to be completed.`;\n }\n toString() {\n return `${super.toString()} ${this.region} ${this.route}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/RouteKillRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SafariBaitRequirement.ts": +/*!***********************************************************!*\ + !*** ./src/modules/requirements/SafariBaitRequirement.ts ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SafariBaitRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass SafariBaitRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Safari);\n }\n getProgress() {\n return Math.min(App.game.statistics.safariBaitThrown(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Bait needs to be thrown in a Safari Zone.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SafariBaitRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SafariCatchRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/SafariCatchRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SafariCatchRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass SafariCatchRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, shiny = false, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Safari);\n this.shiny = shiny;\n }\n getProgress() {\n if (this.shiny)\n return Math.min(App.game.statistics.safariShinyPokemonCaptured(), this.requiredValue);\n else\n return Math.min(App.game.statistics.safariPokemonCaptured(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue}${this.shiny ? ' Shiny' : ''} Pokémon needs to be captured in a Safari Zone.`;\n }\n toString() {\n return `${super.toString()} ${this.shiny}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SafariCatchRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SafariItemsRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/SafariItemsRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SafariItemsRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass SafariItemsRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Safari);\n }\n getProgress() {\n return Math.min(App.game.statistics.safariItemsObtained(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Items needs to be picked up in a Safari Zone.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SafariItemsRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SafariRocksRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/SafariRocksRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SafariRocksRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass SafariRocksRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Safari);\n }\n getProgress() {\n return Math.min(App.game.statistics.safariRocksThrown(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Rocks needs to be thrown in a Safari Zone.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SafariRocksRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SafariStepsRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/SafariStepsRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SafariStepsRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass SafariStepsRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Safari);\n }\n getProgress() {\n return Math.min(App.game.statistics.safariStepsTaken(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Steps needs to be taken in a Safari Zone.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SafariStepsRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SeededDateRequirement.ts": +/*!***********************************************************!*\ + !*** ./src/modules/requirements/SeededDateRequirement.ts ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SeededDateRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _utilities_SeededDateRand__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utilities/SeededDateRand */ \"./src/modules/utilities/SeededDateRand.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\n\nclass SeededDateRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n constructor(seededRandFunction, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal) {\n super(1, option);\n this.seededRandFunction = seededRandFunction;\n }\n getProgress() {\n _utilities_SeededDateRand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].seedWithDate(_GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].today());\n return +this.seededRandFunction();\n }\n // eslint-disable-next-line class-methods-use-this\n hint() {\n return 'Try again another day.';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SeededDateRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SeededDateSelectNRequirement.ts": +/*!******************************************************************!*\ + !*** ./src/modules/requirements/SeededDateSelectNRequirement.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SeededDateSelectNRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\n\nclass SeededDateSelectNRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(index, total, select) {\n super(1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal);\n this.index = index;\n this.total = total;\n this.select = select;\n }\n getProgress() {\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].seedWithDate(_GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].today());\n const numbersSelected = _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_1__[\"default\"].shuffleArray([...Array(this.total).keys()]).slice(0, this.select);\n return +numbersSelected.includes(this.index);\n }\n // eslint-disable-next-line class-methods-use-this\n hint() {\n return 'Try again another day.';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SeededDateSelectNRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SeviiCaughtRequirement.ts": +/*!************************************************************!*\ + !*** ./src/modules/requirements/SeviiCaughtRequirement.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SeviiCaughtRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass SeviiCaughtRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, shiny) {\n super(value, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more, shiny ? _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Shiny Pokemon\"] : _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Caught Pokemon\"]);\n this.shiny = shiny;\n }\n getProgress() {\n return Math.min(App.game.party.caughtPokemon\n .filter((p) => p.name.startsWith('Pinkan') && p.name != 'Pinkan Pikachu'\n || p.name.startsWith('Valencian')\n || p.name === 'Crystal Onix'\n || p.name === 'Ash\\'s Butterfree'\n || p.name === 'Pink Butterfree')\n .filter((p) => p.shiny || !this.shiny).length, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} unique Sevii Pokémon need to be caught.`;\n }\n toString() {\n return `${super.toString()} ${this.shiny}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SeviiCaughtRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ShadowPokemonRequirement.ts": +/*!**************************************************************!*\ + !*** ./src/modules/requirements/ShadowPokemonRequirement.ts ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ShadowPokemonRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass ShadowPokemonRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, status = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShadowStatus.Shadow, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Shadow Pokemon\"]);\n this.status = status;\n }\n getProgress() {\n return Math.min(App.game.party.caughtPokemon.filter((p) => p.shadow >= this.status).length, this.requiredValue);\n }\n hint() {\n switch (this.status) {\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShadowStatus.Shadow:\n return `${this.requiredValue} Shadow Pokémon need to be obtained.`;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShadowStatus.Purified:\n return `${this.requiredValue} Shadow Pokémon need to be purified.`;\n }\n }\n toString() {\n return `${super.toString()} ${this.status}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ShadowPokemonRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/ShinyPokemonRequirement.ts": +/*!*************************************************************!*\ + !*** ./src/modules/requirements/ShinyPokemonRequirement.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ShinyPokemonRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass ShinyPokemonRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Shiny Pokemon\"]);\n }\n getProgress() {\n return Math.min(App.game.party.caughtPokemon.filter((p) => p.shiny).length, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Shiny Pokémon need to be obtained.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/ShinyPokemonRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SpecialEventRandomRequirement.ts": +/*!*******************************************************************!*\ + !*** ./src/modules/requirements/SpecialEventRandomRequirement.ts ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SpecialEventRandomRequirement)\n/* harmony export */ });\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n/* harmony import */ var _SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SpecialEventRequirement */ \"./src/modules/requirements/SpecialEventRequirement.ts\");\n\n\nclass SpecialEventRandomRequirement extends _SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(specialEventName) {\n super(specialEventName);\n this.isAvailable = false;\n this.isAvailable = _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_0__[\"default\"].boolean();\n }\n getProgress() {\n return +(this.isAvailable && super.getProgress());\n }\n hint() {\n return this.isAvailable ? super.hint() : 'The Pokémon seems to be avoiding the area this year.';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SpecialEventRandomRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SpecialEventRequirement.ts": +/*!*************************************************************!*\ + !*** ./src/modules/requirements/SpecialEventRequirement.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SpecialEventRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\nclass SpecialEventRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(specialEventName) {\n super(1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal);\n this.specialEventName = specialEventName;\n }\n getProgress() {\n return +(App.game.specialEvents.getEvent(this.specialEventName).isActive());\n }\n hint() {\n return `${this.specialEventName} must be started.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SpecialEventRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/StarterRequirement.ts": +/*!********************************************************!*\ + !*** ./src/modules/requirements/StarterRequirement.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ StarterRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pokemons/PokemonList */ \"./src/modules/pokemons/PokemonList.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass StarterRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(region, starter) {\n super(starter, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal);\n this.region = region;\n this.starter = starter;\n }\n getProgress() {\n const starter = player.regionStarters[this.region]();\n return starter === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Starter.None ? _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Starter.Grass : starter;\n }\n hint() {\n const starter = _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_1__.pokemonList.find((p) => p.id === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.RegionalStarters[this.region][this.starter]).name;\n return `Requires ${starter} to be chosen as your ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region[this.region])} starter Pokémon.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/StarterRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/StatisticRequirement.ts": +/*!**********************************************************!*\ + !*** ./src/modules/requirements/StatisticRequirement.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ StatisticRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n// Requires a later version of TypeScript\n// Method to handle retrieving statistics with better type safety.\n// Provided by Jessica\n/*\ntype GetNested\n = T extends readonly [first: infer F extends keyof O, ...rest: infer R]\n ? GetNested\n : T extends []\n ? O\n : never;\n\nconst getStat = <\n T extends ReadonlyArray,\n>(keys: T): GetNested => keys.reduce((s, p) => s[p], App.game.statistics);\n\n// Example: getStat(['secondsPlayed'] as const);\n// Example: getStat(['pokemonEncountered', PokemonHelper.getPokemonByName('Gengar').id] as const)\n*/\n/*\nCan be used in two ways:\n\n\"Top-level\" statistics:\nnew StatisticRequirement('secondsPlayed', 86400) // 24 hours of play time\n\nNested statistics:\nnew StatisticRequirement(['pokemonEncountered', PokemonHelper.getPokemonByName('Gengar').id], 666) // encounter 666 Gengar\n*/\nclass StatisticRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(statistic, requiredAmount, hintText = undefined, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(requiredAmount, option);\n this.statistic = statistic;\n this.hintText = hintText;\n }\n getProgress() {\n if (!this.focus) {\n this.focus = Array.isArray(this.statistic)\n ? this.statistic.reduce((s, p) => s[p], App.game.statistics)\n : App.game.statistics[this.statistic];\n }\n return Math.min(this.focus(), this.requiredValue);\n }\n hint() {\n return this.hintText || 'Come back when you have more experience.';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/StatisticRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/SubregionRequirement.ts": +/*!**********************************************************!*\ + !*** ./src/modules/requirements/SubregionRequirement.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SubregionRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _subRegion_SubRegions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../subRegion/SubRegions */ \"./src/modules/subRegion/SubRegions.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\nclass SubregionRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(region, subregion, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal) {\n super(subregion, option);\n this.region = region;\n this.subregion = subregion;\n }\n getProgress() {\n return this.region === player.region && this.subregion === player.subregion ? 100 : 0;\n }\n hint() {\n return `You need to be in the ${_subRegion_SubRegions__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSubRegionById(this.region, this.subregion)} subregion of ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString)(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region[this.region])}.`;\n }\n getProgressPercentage() {\n return this.region === player.region && this.subregion === player.subregion ? '100' : '0';\n }\n isCompleted() {\n return this.region === player.region && this.subregion === player.subregion;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/SubregionRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/TemporaryBattleRequirement.ts": +/*!****************************************************************!*\ + !*** ./src/modules/requirements/TemporaryBattleRequirement.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TemporaryBattleRequirement)\n/* harmony export */ });\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\n\nclass TemporaryBattleRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(battleName, defeatsRequired = 1, option = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementOption.more) {\n super(defeatsRequired, option);\n this.battleName = battleName;\n }\n getProgress() {\n return App.game.statistics.temporaryBattleDefeated[_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getTemporaryBattlesIndex(this.battleName)]();\n }\n hint() {\n const tempBattle = TemporaryBattleList[this.battleName];\n const locationHint = ` ${tempBattle.parent ? 'in' : 'near'} ${tempBattle.getTown().name.replace(/\\.$/, '')}`;\n return `Requires beating ${tempBattle.getDisplayName()}${locationHint}.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/TemporaryBattleRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/TokenRequirement.ts": +/*!******************************************************!*\ + !*** ./src/modules/requirements/TokenRequirement.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TokenRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass TokenRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Dungeon Token\"]);\n }\n getProgress() {\n return Math.min(App.game.statistics.totalDungeonTokens(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Dungeon Tokens need to be obtained.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/TokenRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/TotalMegaStoneObtainedRequirement.ts": +/*!***********************************************************************!*\ + !*** ./src/modules/requirements/TotalMegaStoneObtainedRequirement.ts ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TotalMegaStoneObtainedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _items_MegaStoneItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../items/MegaStoneItem */ \"./src/modules/items/MegaStoneItem.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\n\n\nclass TotalMegaStoneObtainedRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n constructor(value) {\n super(value, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType[\"Mega Stone\"]);\n }\n getProgress() {\n return Math.min(Object.values(_items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList).filter((i) => i instanceof _items_MegaStoneItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"] && player.itemList[i.name]()).length, this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Mega Stones need to be obtained.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/TotalMegaStoneObtainedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/UndergroundItemsFoundRequirement.ts": +/*!**********************************************************************!*\ + !*** ./src/modules/requirements/UndergroundItemsFoundRequirement.ts ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundItemsFoundRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass UndergroundItemsFoundRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Underground);\n }\n getProgress() {\n return Math.min(App.game.statistics.undergroundItemsFound(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} items need to be found in the Underground.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/UndergroundItemsFoundRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/UndergroundLayersMinedRequirement.ts": +/*!***********************************************************************!*\ + !*** ./src/modules/requirements/UndergroundLayersMinedRequirement.ts ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundLayersMinedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass UndergroundLayersMinedRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Underground);\n }\n getProgress() {\n return Math.min(App.game.statistics.undergroundLayersMined(), this.requiredValue);\n }\n hint() {\n const suffix = (this.requiredValue > 1) ? 's' : '';\n return `${this.requiredValue} layer${suffix} need to be mined in the Underground.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/UndergroundLayersMinedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/UniqueItemOwnedRequirement.ts": +/*!****************************************************************!*\ + !*** ./src/modules/requirements/UniqueItemOwnedRequirement.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UniqueItemOwnedRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ItemOwnedRequirement */ \"./src/modules/requirements/ItemOwnedRequirement.ts\");\n\n\n\nclass UniqueItemOwnedRequirement extends _ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(itemName, obtainText) {\n super(itemName, 1, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more);\n this.itemName = itemName;\n this.obtainText = obtainText;\n }\n hint() {\n var _a;\n return `You must ${(_a = this.obtainText) !== null && _a !== void 0 ? _a : 'obtain'} ${_items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[this.itemName].displayName} first.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/UniqueItemOwnedRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/VitaminObtainRequirement.ts": +/*!**************************************************************!*\ + !*** ./src/modules/requirements/VitaminObtainRequirement.ts ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ VitaminObtainRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n\n\nclass VitaminObtainRequirement extends _AchievementRequirement__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(value, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.more) {\n super(value, option, _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementType.Vitamins);\n }\n getProgress() {\n return Math.min(App.game.statistics.totalVitaminsObtained(), this.requiredValue);\n }\n hint() {\n return `${this.requiredValue} Proteins need to be obtained.`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/VitaminObtainRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/requirements/WeatherRequirement.ts": +/*!********************************************************!*\ + !*** ./src/modules/requirements/WeatherRequirement.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ WeatherRequirement)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _weather_Weather__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../weather/Weather */ \"./src/modules/weather/Weather.ts\");\n/* harmony import */ var _weather_WeatherType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../weather/WeatherType */ \"./src/modules/weather/WeatherType.ts\");\n/* harmony import */ var _Requirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Requirement */ \"./src/modules/requirements/Requirement.ts\");\n\n\n\n\nclass WeatherRequirement extends _Requirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n constructor(weather, option = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.AchievementOption.equal) {\n super(1, option);\n this.weather = weather;\n }\n getProgress() {\n return +this.weather.includes(_weather_Weather__WEBPACK_IMPORTED_MODULE_1__[\"default\"].currentWeather());\n }\n hint() {\n return `The weather needs to be ${this.weather.map((weather) => (0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(_weather_WeatherType__WEBPACK_IMPORTED_MODULE_2__[\"default\"][weather])).join(' or ')}`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/requirements/WeatherRequirement.ts?"); + +/***/ }), + +/***/ "./src/modules/routes/RegionRoute.ts": +/*!*******************************************!*\ + !*** ./src/modules/routes/RegionRoute.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RegionRoute)\n/* harmony export */ });\nclass RegionRoute {\n constructor(routeName, region, number, pokemon, requirements = [], orderNumber, subRegion, ignoreRouteInCalculations = false, routeHealth = undefined) {\n this.routeName = routeName;\n this.region = region;\n this.number = number;\n this.pokemon = pokemon;\n this.requirements = requirements;\n this.orderNumber = orderNumber;\n this.subRegion = subRegion;\n this.ignoreRouteInCalculations = ignoreRouteInCalculations;\n this.routeHealth = routeHealth;\n this.orderNumber = orderNumber || number;\n }\n isUnlocked() {\n return this.requirements.every((requirement) => requirement.isCompleted());\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/routes/RegionRoute.ts?"); + +/***/ }), + +/***/ "./src/modules/routes/RouteData.ts": +/*!*****************************************!*\ + !*** ./src/modules/routes/RouteData.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _enums_Badges__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/Badges */ \"./src/modules/enums/Badges.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../requirements/ClearDungeonRequirement */ \"./src/modules/requirements/ClearDungeonRequirement.ts\");\n/* harmony import */ var _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../requirements/GymBadgeRequirement */ \"./src/modules/requirements/GymBadgeRequirement.ts\");\n/* harmony import */ var _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../requirements/MultiRequirement */ \"./src/modules/requirements/MultiRequirement.ts\");\n/* harmony import */ var _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../requirements/ObtainedPokemonRequirement */ \"./src/modules/requirements/ObtainedPokemonRequirement.ts\");\n/* harmony import */ var _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../requirements/OneFromManyRequirement */ \"./src/modules/requirements/OneFromManyRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../requirements/QuestLineStartedRequirement */ \"./src/modules/requirements/QuestLineStartedRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../requirements/QuestLineCompletedRequirement */ \"./src/modules/requirements/QuestLineCompletedRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../requirements/QuestLineStepCompletedRequirement */ \"./src/modules/requirements/QuestLineStepCompletedRequirement.ts\");\n/* harmony import */ var _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../requirements/RouteKillRequirement */ \"./src/modules/requirements/RouteKillRequirement.ts\");\n/* harmony import */ var _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../requirements/TemporaryBattleRequirement */ \"./src/modules/requirements/TemporaryBattleRequirement.ts\");\n/* harmony import */ var _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../requirements/WeatherRequirement */ \"./src/modules/requirements/WeatherRequirement.ts\");\n/* harmony import */ var _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../requirements/DayOfWeekRequirement */ \"./src/modules/requirements/DayOfWeekRequirement.ts\");\n/* harmony import */ var _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../requirements/DevelopmentRequirement */ \"./src/modules/requirements/DevelopmentRequirement.ts\");\n/* harmony import */ var _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../weather/WeatherType */ \"./src/modules/weather/WeatherType.ts\");\n/* harmony import */ var _RegionRoute__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./RegionRoute */ \"./src/modules/routes/RegionRoute.ts\");\n/* harmony import */ var _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./RoutePokemon */ \"./src/modules/routes/RoutePokemon.ts\");\n/* harmony import */ var _Routes__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./Routes */ \"./src/modules/routes/Routes.ts\");\n/* harmony import */ var _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./SpecialRoutePokemon */ \"./src/modules/routes/SpecialRoutePokemon.ts\");\n/* harmony import */ var _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../requirements/SpecialEventRandomRequirement */ \"./src/modules/requirements/SpecialEventRandomRequirement.ts\");\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n/* harmony import */ var _requirements_ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../requirements/ItemOwnedRequirement */ \"./src/modules/requirements/ItemOwnedRequirement.ts\");\n/* harmony import */ var _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../requirements/SpecialEventRequirement */ \"./src/modules/requirements/SpecialEventRequirement.ts\");\n/* harmony import */ var _requirements_StatisticRequirement__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../requirements/StatisticRequirement */ \"./src/modules/requirements/StatisticRequirement.ts\");\n/* harmony import */ var _requirements_PokemonLevelRequirement__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../requirements/PokemonLevelRequirement */ \"./src/modules/requirements/PokemonLevelRequirement.ts\");\n/* harmony import */ var _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../pokemons/PokemonHelper */ \"./src/modules/pokemons/PokemonHelper.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\nKANTO\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 1', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 1, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Rattata'],\n}), undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 22', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 22, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Spearow', 'Mankey'],\n water: ['Psyduck', 'Poliwag', 'Slowpoke', 'Goldeen', 'Magikarp'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 1)], 1.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 2', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 2, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Rattata', 'Caterpie', 'Weedle'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 1)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 3', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 3, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Spearow', 'Nidoran(F)', 'Nidoran(M)', 'Jigglypuff', 'Mankey'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 2),\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Boulder),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 4', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 4, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Spearow', 'Ekans', 'Sandshrew', 'Mankey'],\n water: ['Tentacool', 'Krabby', 'Horsea', 'Magikarp'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 3),\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Mt. Moon')),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 24', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 24, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Caterpie', 'Metapod', 'Weedle', 'Kakuna', 'Pidgey', 'Oddish', 'Abra', 'Bellsprout'],\n water: ['Tentacool', 'Krabby', 'Horsea', 'Magikarp'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sunkern'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Sunkern'), new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_JohtoChampion)]))],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Blue 2')], 4.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 25', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 25, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Caterpie', 'Metapod', 'Weedle', 'Kakuna', 'Pidgey', 'Oddish', 'Abra', 'Bellsprout'],\n water: ['Psyduck', 'Poliwag', 'Tentacool', 'Slowpoke', 'Goldeen', 'Magikarp'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 24)], 4.2, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 5', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 5, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Meowth', 'Oddish', 'Bellsprout'],\n}), [\n // Need to reach bills house\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 25),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 6', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 6, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Meowth', 'Oddish', 'Bellsprout'],\n water: ['Psyduck', 'Poliwag', 'Slowpoke', 'Goldeen', 'Magikarp'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 5)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 11', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 11, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Ekans', 'Sandshrew', 'Drowzee'],\n water: ['Tentacool', 'Krabby', 'Horsea', 'Magikarp'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 6)], 6.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 9', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 9, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Spearow', 'Ekans', 'Sandshrew'],\n}), [\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Blue 3'),\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Cascade),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 10', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 10, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Ekans', 'Sandshrew', 'Voltorb'],\n water: ['Tentacool', 'Krabby', 'Horsea', 'Magikarp'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 9)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 8', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 8, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Ekans', 'Sandshrew', 'Vulpix', 'Meowth', 'Growlithe'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Rock Tunnel'))], 10.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 7', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 7, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Vulpix', 'Oddish', 'Meowth', 'Growlithe', 'Bellsprout'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Houndour'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Houndour'), new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_JohtoChampion)]))],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 8)], 10.2, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 12', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 12, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Oddish', 'Gloom', 'Venonat', 'Bellsprout', 'Weepinbell', 'Farfetch\\'d'],\n water: ['Poliwag', 'Slowpoke', 'Slowbro', 'Goldeen', 'Magikarp'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Rock Tunnel'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 13', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 13, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Pidgeotto', 'Oddish', 'Gloom', 'Venonat', 'Bellsprout', 'Weepinbell', 'Farfetch\\'d', 'Ditto'],\n water: ['Tentacool', 'Krabby', 'Horsea', 'Magikarp'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Snorlax route 12'),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 14),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 14', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 14, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Pidgeotto', 'Oddish', 'Gloom', 'Venonat', 'Bellsprout', 'Weepinbell', 'Ditto'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 13),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 15),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 15', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 15, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Pidgeotto', 'Oddish', 'Gloom', 'Venonat', 'Bellsprout', 'Weepinbell', 'Ditto'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 18),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 14),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 16', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 16, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Raticate', 'Spearow', 'Doduo'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Slugma'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Slugma'), new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_JohtoChampion)]))],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Snorlax route 16'),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 17),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 17', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 17, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Raticate', 'Spearow', 'Fearow', 'Doduo'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Slugma'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Slugma'), new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_JohtoChampion)]))],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 16),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 18),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 18', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 18, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Raticate', 'Spearow', 'Fearow', 'Doduo'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Slugma'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Slugma'), new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_JohtoChampion)]))],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 17),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 15),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 19', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 19, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Krabby', 'Horsea', 'Magikarp'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Soul)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 20', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 20, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Krabby', 'Horsea', 'Shellder', 'Staryu', 'Magikarp'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 21),\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Seafoam Islands')),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 21', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 21, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Tangela'],\n water: ['Tentacool', 'Krabby', 'Horsea', 'Shellder', 'Staryu', 'Magikarp'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Soul)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kanto Route 23', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 23, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Fearow', 'Ekans', 'Arbok', 'Sandshrew', 'Sandslash', 'Mankey', 'Primeape'],\n water: ['Psyduck', 'Poliwag', 'Slowpoke', 'Goldeen', 'Magikarp'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 22),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Blue 6'),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Treasure Beach', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 26, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Fearow', 'Meowth', 'Persian', 'Psyduck', 'Slowpoke', 'Tangela'],\n water: ['Tentacool', 'Tentacruel', 'Krabby', 'Horsea', 'Magikarp'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Volcano)], 21.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii123, true, 37487));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kindle Road', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 27, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Fearow', 'Meowth', 'Persian', 'Psyduck', 'Geodude', 'Ponyta', 'Rapidash', 'Slowpoke'],\n water: ['Tentacool', 'Tentacruel', 'Krabby', 'Horsea', 'Magikarp'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Volcano)], 21.2, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii123, true, 37487));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Cape Brink', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 28, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Fearow', 'Oddish', 'Gloom', 'Meowth', 'Persian', 'Psyduck', 'Golduck', 'Bellsprout', 'Weepinbell', 'Slowpoke', 'Slowbro'],\n water: ['Poliwag', 'Goldeen', 'Magikarp'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Bill\\'s Errand', 0)], 21.3, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii123, true, 37487));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Bond Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 29, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Pidgeotto', 'Oddish', 'Gloom', 'Venonat', 'Meowth', 'Persian', 'Psyduck', 'Bellsprout', 'Weepinbell', 'Slowpoke'],\n water: ['Tentacool', 'Tentacruel', 'Krabby', 'Horsea', 'Magikarp'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Bill\\'s Errand', 3)], 21.4, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii123, true, 37487));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Five Isle Meadow', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 30, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sentret', 'Pidgey', 'Pidgeotto', 'Hoppip', 'Meowth', 'Persian', 'Psyduck', 'Slowpoke'],\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Kingler'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Celio\\'s Errand', 5)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Memorial Pillar', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 31, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Hoppip', 'Tentacool', 'Tentacruel', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Kingler', 'Psyduck', 'Slowpoke'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 30)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Water Labyrinth', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 32, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Hoppip', 'Tentacool', 'Tentacruel', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Kingler', 'Psyduck', 'Slowpoke'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Celio\\'s Errand', 5)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Resort Gorgeous', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 33, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Hoppip', 'Tentacool', 'Tentacruel', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Kingler', 'Psyduck', 'Slowpoke'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 32)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Water Path', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 34, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sentret', 'Spearow', 'Fearow', 'Oddish', 'Bellsprout', 'Meowth', 'Gloom', 'Weepinbell', 'Persian', 'Psyduck', 'Slowpoke'],\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Kingler'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Celio\\'s Errand', 5)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Green Path', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 35, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Kingler', 'Psyduck', 'Slowpoke'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Pattern Bush'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Outcast Island', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 36, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Kingler', 'Psyduck', 'Slowpoke'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 35)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Ruin Valley', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 37, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Natu', 'Spearow', 'Fearow', 'Meowth', 'Yanma', 'Wooper', 'Marill', 'Persian', 'Psyduck', 'Slowpoke', 'Wobbuffet'],\n water: ['Magikarp', 'Poliwag', 'Goldeen', 'Poliwhirl', 'Gyarados'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 34)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Canyon Entrance', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 38, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sentret', 'Spearow', 'Fearow', 'Phanpy', 'Meowth', 'Persian', 'Psyduck', 'Slowpoke'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Celio\\'s Errand', 5)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sevault Canyon', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 39, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Geodude', 'Phanpy', 'Fearow', 'Meowth', 'Cubone', 'Marowak', 'Persian', 'Onix', 'Skarmory', 'Larvitar'],\n headbutt: ['Graveler'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 38)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1050000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Valencia Island', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 40, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Valencian Butterfree', 'Valencian Raticate', 'Valencian Vileplume', 'Valencian Paras', 'Valencian Weepinbell', 'Nidoran(M)', 'Nidoran(F)', 'Nidorina'],\n water: ['Gyarados', 'Cloyster', 'Poliwhirl'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Jade_Star)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1250000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Pinkan Forest', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 41, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pinkan Caterpie', 'Pinkan Weedle', 'Pinkan Pidgey', 'Pinkan Vileplume', 'Pinkan Paras', 'Pinkan Venonat', 'Pinkan Mankey', 'Pinkan Exeggutor'],\n}), [\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Altering Cave')),\n new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Celio\\'s Errand'),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1250000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Pinkan Plains', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 42, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pinkan Pidgey', 'Pinkan Rattata', 'Pinkan Nidoran(M)', 'Pinkan Nidoran(F)', 'Pinkan Diglett', 'Pinkan Bellsprout'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, 41)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, true, 1250000));\n/*\nJOHTO\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 29', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 29, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Rattata', 'Sentret', 'Hoothoot'],\n headbutt: ['Exeggcute', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_KantoChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 30', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 30, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Rattata', 'Caterpie', 'Metapod', 'Weedle', 'Kakuna', 'Zubat', 'Hoothoot', 'Ledyba', 'Spinarak'],\n water: ['Poliwag', 'Poliwhirl', 'Magikarp'],\n headbutt: ['Exeggcute', 'Pineco'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 29)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 31', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 31, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Rattata', 'Caterpie', 'Metapod', 'Weedle', 'Kakuna', 'Zubat', 'Poliwag', 'Hoothoot', 'Ledyba', 'Spinarak', 'Bellsprout'],\n water: ['Poliwhirl', 'Magikarp'],\n headbutt: ['Spearow', 'Exeggcute', 'Aipom', 'Pineco', 'Heracross'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Silver 1')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 32', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 32, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Ekans', 'Zubat', 'Bellsprout', 'Mareep', 'Hoppip', 'Wooper'],\n water: ['Tentacool', 'Tentacruel', 'Quagsire', 'Magikarp', 'Qwilfish'],\n headbutt: ['Exeggcute', 'Hoothoot', 'Pineco'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Zephyr)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 33', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 33, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Rattata', 'Ekans', 'Zubat', 'Hoppip'],\n headbutt: ['Aipom', 'Heracross'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Union Cave'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 34', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 34, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Abra', 'Drowzee', 'Ditto'],\n water: ['Tentacool', 'Tentacruel', 'Krabby', 'Magikarp', 'Staryu', 'Corsola', 'Kingler'],\n headbutt: ['Exeggcute', 'Hoothoot', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Ilex Forest'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 35', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 35, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Nidoran(F)', 'Nidoran(M)', 'Abra', 'Drowzee', 'Ditto', 'Hoothoot', 'Yanma'],\n water: ['Psyduck', 'Golduck', 'Poliwag', 'Magikarp'],\n headbutt: ['Exeggcute', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 34)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 36', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 36, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Nidoran(M)', 'Nidoran(F)', 'Vulpix', 'Growlithe', 'Hoothoot', 'Stantler'],\n headbutt: ['Exeggcute', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 35),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Sudowoodo'),\n ]),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 37', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 37, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Pidgeotto', 'Vulpix', 'Growlithe', 'Hoothoot', 'Ledyba', 'Spinarak', 'Stantler'],\n headbutt: ['Exeggcute', 'Pineco'],\n}), [\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Sudowoodo'),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 36),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 38', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 38, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Raticate', 'Meowth', 'Magnemite', 'Farfetch\\'d', 'Tauros', 'Snubbull', 'Miltank'],\n headbutt: ['Exeggcute', 'Hoothoot', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 37)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 39', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 39, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Raticate', 'Meowth', 'Magnemite', 'Farfetch\\'d', 'Tauros', 'Miltank'],\n headbutt: ['Exeggcute', 'Hoothoot', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 38)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 40', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 40, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Tentacruel', 'Krabby', 'Magikarp', 'Staryu', 'Corsola', 'Kingler'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 39),\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fog),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 41', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 41, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Tentacruel', 'Mantine', 'Magikarp', 'Chinchou', 'Shellder'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 40)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 42', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 42, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Zubat', 'Mankey', 'Mareep', 'Flaaffy'],\n water: ['Goldeen', 'Seaking', 'Magikarp'],\n headbutt: ['Aipom', 'Heracross'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meowth (Phanpy)'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_StatisticRequirement__WEBPACK_IMPORTED_MODULE_24__[\"default\"](['pokemonHatched', (0,_pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_26__.getPokemonByName)('Phanpy').id], 1, 'Hatch Phanpy first.'),\n new _requirements_PokemonLevelRequirement__WEBPACK_IMPORTED_MODULE_25__[\"default\"]('Phanpy', 21, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementOption.less),\n ]))],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Mt. Mortar')),\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fog),\n ]),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 43', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 43, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgeotto', 'Venonat', 'Noctowl', 'Mareep', 'Flaaffy', 'Girafarig'],\n water: ['Magikarp', 'Poliwag'],\n headbutt: ['Exeggcute', 'Hoothoot', 'Pineco'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 42)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 44', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 44, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bellsprout', 'Weepinbell', 'Lickitung', 'Tangela'],\n water: ['Poliwag', 'Poliwhirl', 'Magikarp', 'Remoraid'],\n headbutt: ['Spearow', 'Aipom', 'Heracross'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Radio Tower'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 45', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 45, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Geodude', 'Graveler', 'Gligar', 'Teddiursa', 'Skarmory', 'Phanpy'],\n water: ['Magikarp', 'Poliwag', 'Dratini', 'Dragonair'],\n headbutt: ['Spearow', 'Aipom', 'Heracross'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Ice Path'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 46', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 46, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Rattata', 'Geodude'],\n headbutt: ['Aipom', 'Heracross'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 29)], 29.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 47', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 47, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Raticate', 'Spearow', 'Fearow', 'Gloom', 'Farfetch\\'d', 'Ditto', 'Noctowl', 'Miltank'],\n water: ['Tentacool', 'Seel', 'Staryu', 'Magikarp', 'Shellder', 'Chinchou', 'Lanturn'],\n headbutt: ['Metapod', 'Butterfree', 'Kakuna', 'Beedrill', 'Exeggcute', 'Hoothoot', 'Ledyba', 'Spinarak', 'Pineco', 'Heracross'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Mineral)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 48', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 48, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Fearow', 'Vulpix', 'Gloom', 'Diglett', 'Growlithe', 'Farfetch\\'d', 'Tauros', 'Hoppip', 'Girafarig'],\n headbutt: ['Exeggcute', 'Hoothoot', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 47)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 26', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 26, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Raticate', 'Arbok', 'Sandslash', 'Ponyta', 'Doduo', 'Dodrio', 'Quagsire'],\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Shellder', 'Chinchou', 'Lanturn'],\n headbutt: ['Exeggcute', 'Hoothoot', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 27)], 50));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 27', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 27, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Raticate', 'Arbok', 'Sandslash', 'Ponyta', 'Doduo', 'Dodrio', 'Quagsire'],\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Shellder', 'Chinchou', 'Lanturn'],\n headbutt: ['Exeggcute', 'Hoothoot', 'Ledyba', 'Spinarak', 'Pineco'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Tohjo Falls'))], 49));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Johto Route 28', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, 28, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Ponyta', 'Tangela', 'Donphan', 'Ursaring', 'Rapidash', 'Doduo', 'Dodrio', 'Sneasel', 'Murkrow'],\n water: ['Poliwag', 'Poliwhirl', 'Magikarp'],\n headbutt: ['Natu', 'Aipom', 'Heracross'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_JohtoChampion)], 51));\n/*\nHOENN\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 101', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 101, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Wurmple', 'Poochyena', 'Zigzagoon'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_JohtoChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 102', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 102, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Surskit', 'Poochyena', 'Wurmple', 'Lotad', 'Zigzagoon', 'Ralts', 'Seedot'],\n water: ['Marill', 'Goldeen', 'Magikarp', 'Corphish'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('May 1')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 103', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 103, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Poochyena', 'Wingull', 'Zigzagoon'],\n water: ['Tentacool', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 101)], 101.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 104', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 104, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Poochyena', 'Wurmple', 'Marill', 'Taillow', 'Wingull'],\n water: ['Pelipper', 'Magikarp'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 102)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 105', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 105, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Balance)], 115.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 106', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 106, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 105),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 107),\n ]),\n], 115.2));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 107', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 107, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 106),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 108),\n ]),\n], 115.3));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 108', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 108, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 107),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 109),\n ]),\n], 115.4));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 109', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 109, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Balance)], 115.5));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 110', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 110, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Poochyena', 'Gulpin', 'Minun', 'Oddish', 'Wingull', 'Plusle'],\n water: ['Tentacool', 'Pelipper', 'Magikarp', 'Wailmer'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electrike'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Electrike'))],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Granite Cave'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 111', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 111, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandshrew', 'Trapinch', 'Baltoy', 'Cacnea'],\n water: ['Marill', 'Goldeen', 'Magikarp', 'Barboach'],\n headbutt: ['Geodude'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Dynamo)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 112', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 112, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Numel', 'Marill'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 111)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 113', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 113, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spinda', 'Slugma', 'Skarmory'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Fiery Path'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 114', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 114, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zangoose', 'Surskit', 'Swablu', 'Lotad', 'Lombre', 'Seviper', 'Nuzleaf'],\n water: ['Marill', 'Goldeen', 'Magikarp', 'Barboach'],\n headbutt: ['Geodude'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 113)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 115', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 115, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Swablu', 'Taillow', 'Swellow', 'Jigglypuff', 'Wingull'],\n water: ['Tentacool', 'Pelipper', 'Magikarp', 'Wailmer'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Meteor Falls'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 116', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 116, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Poochyena', 'Whismur', 'Nincada', 'Abra', 'Taillow', 'Skitty'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Petalburg Woods'))], 104.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 117', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 117, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Surskit', 'Poochyena', 'Oddish', 'Marill', 'Illumise', 'Volbeat', 'Seedot'],\n water: ['Goldeen', 'Magikarp', 'Corphish'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Roselia'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Roselia'))],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('May 3')], 110.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 118', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 118, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zigzagoon', 'Linoone', 'Wingull', 'Kecleon'],\n water: ['Tentacool', 'Pelipper', 'Magikarp', 'Carvanha', 'Sharpedo'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electrike'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Electrike')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Manectric'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Manectric')),\n ],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Balance)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 119', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 119, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zigzagoon', 'Linoone', 'Oddish', 'Tropius', 'Kecleon'],\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Carvanha'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 118)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 120', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 120, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Surskit', 'Poochyena', 'Mightyena', 'Oddish', 'Marill', 'Absol', 'Kecleon', 'Seedot'],\n water: ['Goldeen', 'Magikarp', 'Barboach'],\n}), [\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Weather Institute')),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Kecleon 1'),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 121', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 121, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Poochyena', 'Shuppet', 'Mightyena', 'Oddish', 'Gloom', 'Wingull', 'Kecleon'],\n water: ['Tentacool', 'Pelipper', 'Magikarp', 'Wailmer'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 120)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 122', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 122, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 121)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 123', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 123, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Poochyena', 'Shuppet', 'Mightyena', 'Oddish', 'Gloom', 'Wingull', 'Kecleon'],\n water: ['Tentacool', 'Pelipper', 'Magikarp', 'Wailmer'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 122)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 124', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 124, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo', 'Clamperl', 'Relicanth'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Aqua Hideout'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 125', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 125, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 124)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 126', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 126, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo', 'Clamperl', 'Relicanth'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 124)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 127', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 127, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 125),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 126),\n ]),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 128', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 128, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Luvdisc', 'Wailmer', 'Corsola'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 127)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 129', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 129, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Wailord', 'Magikarp', 'Wailmer', 'Sharpedo'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 128)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 130', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 130, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Wynaut'],\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 129)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 131', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 131, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 130)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 132', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 132, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo', 'Horsea'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 131)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 133', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 133, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo', 'Horsea'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 132)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hoenn Route 134', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 134, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Wingull', 'Pelipper', 'Magikarp', 'Wailmer', 'Sharpedo', 'Horsea'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 133)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Rock Poké Spot', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 135, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandshrew', 'Gligar', 'Trapinch'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Shadows in the Desert', 1)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.HoennSubRegions.Orre, true, 1500000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Oasis Poké Spot', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 136, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Hoppip', 'Phanpy', 'Surskit'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Shadows in the Desert', 14)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.HoennSubRegions.Orre, true, 1500000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Cave Poké Spot', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, 137, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Aron', 'Wooper'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Shadows in the Desert', 17)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.HoennSubRegions.Orre, true, 1500000));\n/*\nSINNOH\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 201', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 201, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Starly', 'Bidoof', 'Kricketot'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_HoennChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 202', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 202, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Starly', 'Bidoof', 'Kricketot', 'Shinx'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 201),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Barry 1'),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 203', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 203, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Abra', 'Starly', 'Bidoof', 'Kricketot', 'Shinx'],\n water: ['Psyduck', 'Golduck', 'Magikarp', 'Goldeen', 'Seaking', 'Gyarados'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Barry 2')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 204', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 204, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Wurmple', 'Starly', 'Bidoof', 'Kricketot', 'Shinx', 'Budew'],\n water: ['Psyduck', 'Golduck', 'Magikarp', 'Goldeen', 'Seaking', 'Gyarados'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 202)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 205', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 205, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Hoothoot', 'Wurmple', 'Silcoon', 'Beautifly', 'Cascoon', 'Dustox', 'Bidoof', 'Kricketot', 'Budew', 'Buizel', 'Shellos (West)'],\n water: ['Psyduck', 'Golduck', 'Tentacool', 'Tentacruel', 'Shellder', 'Magikarp', 'Gyarados', 'Gastrodon (West)', 'Finneon', 'Lumineon', 'Barboach', 'Whiscash'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Valley Windworks'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 206', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 206, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Machop', 'Geodude', 'Ponyta', 'Gligar', 'Kricketune', 'Stunky'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Team Galactic Eterna Building'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 207', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 207, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Machop', 'Geodude', 'Ponyta', 'Kricketot'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 206)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 208', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 208, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Ralts', 'Roselia', 'Bidoof', 'Bibarel', 'Budew'],\n water: ['Psyduck', 'Golduck', 'Goldeen', 'Seaking', 'Magikarp', 'Gyarados', 'Barboach', 'Whiscash'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Mt. Coronet South'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 209', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 209, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Chansey', 'Ralts', 'Roselia', 'Duskull', 'Staravia', 'Bibarel'],\n water: ['Psyduck', 'Golduck', 'Goldeen', 'Seaking', 'Magikarp', 'Gyarados'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Barry 3')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 210', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 210, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Psyduck', 'Machop', 'Machoke', 'Geodude', 'Ponyta', 'Chansey', 'Scyther', 'Hoothoot', 'Noctowl', 'Roselia', 'Meditite', 'Swablu', 'Bibarel', 'Staravia'],\n water: ['Golduck', 'Magikarp', 'Gyarados', 'Barboach', 'Whiscash'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 209)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 215', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 215, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Abra', 'Kadabra', 'Lickitung', 'Scyther', 'Marill', 'Staravia'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 210)], 210.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 214', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 214, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Geodude', 'Graveler', 'Rhyhorn', 'Houndour', 'Stunky'],\n water: ['Psyduck', 'Golduck', 'Goldeen', 'Seaking', 'Magikarp', 'Gyarados'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 215)], 210.2));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 213', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 213, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Wingull', 'Buizel', 'Shellos (East)', 'Chatot'],\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Gyarados', 'Remoraid', 'Octillery', 'Gastrodon (East)'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 214)], 210.3));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 212', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 212, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Marill', 'Quagsire', 'Ralts', 'Kirlia', 'Roselia', 'Staravia', 'Buizel', 'Shellos (East)', 'Croagunk'],\n water: ['Psyduck', 'Golduck', 'Goldeen', 'Seaking', 'Magikarp', 'Gyarados', 'Remoraid', 'Octillery', 'Gastrodon (East)'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 213)], 210.4));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 211', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 211, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Machop', 'Machoke', 'Graveler', 'Hoothoot', 'Noctowl', 'Meditite', 'Bidoof', 'Chingling', 'Bronzor'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fen)], 210.5));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 218', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 218, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Mr. Mime', 'Floatzel', 'Gastrodon (West)', 'Glameow', 'Chatot'],\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Gyarados', 'Shellos (West)', 'Finneon', 'Lumineon'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Galactic Boss Cyrus')], 210.6));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 216', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 216, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zubat', 'Graveler', 'Sneasel', 'Meditite', 'Snorunt', 'Snover'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Mt. Coronet North'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 217', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 217, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sneasel', 'Swinub', 'Snorunt', 'Snover'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 216)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 219', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 219, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Gyarados', 'Wingull', 'Pelipper', 'Clamperl', 'Finneon', 'Lumineon'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Galactic Boss Cyrus')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 220', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 220, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Gyarados', 'Chinchou', 'Wingull', 'Pelipper', 'Finneon', 'Lumineon'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 219)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 221', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 221, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sudowoodo', 'Girafarig', 'Roselia', 'Floatzel', 'Shellos (West)', 'Gastrodon (West)', 'Stunky', 'Skuntank'],\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Gyarados', 'Pelipper', 'Clamperl', 'Finneon', 'Lumineon'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 220)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 222', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 222, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Magnemite', 'Magneton', 'Electabuzz', 'Wingull', 'Pelipper', 'Luxio', 'Floatzel', 'Gastrodon (East)', 'Glameow', 'Purugly', 'Chatot'],\n water: ['Tentacool', 'Tentacruel', 'Magikarp', 'Gyarados', 'Remoraid', 'Octillery', 'Sharpedo'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Distortion World'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 223', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 223, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacruel', 'Magikarp', 'Gyarados', 'Remoraid', 'Octillery', 'Pelipper', 'Wailmer', 'Wailord', 'Mantyke'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Beacon)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 224', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 224, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Oddish', 'Gloom', 'Bellsprout', 'Weepinbell', 'Beautifly', 'Dustox', 'Roselia', 'Floatzel', 'Gastrodon (East)', 'Chatot'],\n water: ['Tentacruel', 'Magikarp', 'Gyarados', 'Remoraid', 'Octillery', 'Pelipper', 'Luvdisc'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_SinnohChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 225', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 225, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Raticate', 'Spearow', 'Fearow', 'Machoke', 'Graveler', 'Skuntank', 'Banette'],\n water: ['Psyduck', 'Golduck', 'Magikarp', 'Gyarados', 'Barboach', 'Whiscash'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_SinnohChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 226', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 226, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rattata', 'Raticate', 'Fearow', 'Machoke', 'Graveler', 'Wingull', 'Banette'],\n water: ['Tentacruel', 'Horsea', 'Seadra', 'Magikarp', 'Gyarados', 'Pelipper', 'Relicanth'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 225)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 227', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 227, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Fearow', 'Golbat', 'Graveler', 'Weezing', 'Rhyhorn', 'Rhydon', 'Skarmory', 'Numel', 'Camerupt'],\n water: ['Poliwag', 'Poliwhirl', 'Magikarp', 'Gyarados', 'Barboach', 'Whiscash'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 226)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 228', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 228, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Diglett', 'Dugtrio', 'Rhydon', 'Cacnea', 'Cacturne', 'Hippowdon'],\n water: ['Poliwag', 'Poliwhirl', 'Magikarp', 'Gyarados', 'Barboach', 'Whiscash'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 226)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 229', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 229, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Ledian', 'Ariados', 'Beautifly', 'Dustox', 'Volbeat', 'Illumise', 'Roselia', 'Purugly'],\n water: ['Surskit', 'Masquerain', 'Goldeen', 'Seaking', 'Magikarp', 'Gyarados'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 228)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sinnoh Route 230', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 230, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Oddish', 'Gloom', 'Bellsprout', 'Weepinbell', 'Wingull', 'Pelipper', 'Roselia', 'Floatzel'],\n water: ['Tentacruel', 'Magikarp', 'Gyarados', 'Remoraid', 'Octillery', 'Wailmer', 'Wailord', 'Sealeo'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, 229)]));\n/*\nUNOVA\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 19', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 19, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Patrat', 'Purrloin'],\n water: ['Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_SinnohChampion)], 0.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 20', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 20, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sunkern', 'Pidove', 'Venipede', 'Patrat', 'Purrloin', 'Sewaddle'],\n water: ['Azurill', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 19),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Hugh 1'),\n], 0.2));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 4', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 4, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandile', 'Darumaka', 'Trubbish', 'Minccino', 'Scraggy'],\n water: ['Frillish'],\n}), [\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Toxic),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Team Plasma Grunt 1'),\n new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Hollow Truth and Ideals', 1),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Desert Resort', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 25, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandshrew', 'Trapinch', 'Maractus', 'Darumaka', 'Dwebble', 'Scraggy', 'Sigilyph', 'Sandile'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 4),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Colress 1'),\n new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Hollow Truth and Ideals', 2),\n], 4));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 5', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 5, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Gothita', 'Minccino', 'Trubbish', 'Liepard', 'Solosis'],\n}), [\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Colress 1'),\n new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Hollow Truth and Ideals', 2),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 16', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 16, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Gothita', 'Minccino', 'Trubbish', 'Liepard', 'Solosis'],\n}), [\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Colress 1'),\n new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Hollow Truth and Ideals', 2),\n], 5));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 6', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 6, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Marill', 'Deerling (Spring)', 'Deerling (Autumn)', 'Karrablast', 'Tranquill', 'Foongus', 'Swadloon', 'Vanillite', 'Shelmet'],\n water: ['Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 5),\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Bolt),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Team Plasma Grunt 2'),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Team Plasma Grunt 3'),\n new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Hollow Truth and Ideals', 4),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 7', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 7, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Zangoose', 'Seviper', 'Cubchoo', 'Deerling (Summer)', 'Deerling (Winter)', 'Watchog', 'Tranquill', 'Foongus'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Zebstrika'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Zebstrika'))],\n}), [\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Chargestone Cave')),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Colress 2'),\n new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Hollow Truth and Ideals', 7),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 13', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 13, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Tangela', 'Pelipper', 'Drifblim', 'Absol', 'Lunatone', 'Solrock'],\n water: ['Staryu', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Frillish'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Hugh 4')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Undella Bay', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 24, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Frillish', 'Mantyke', 'Spheal', 'Remoraid', 'Jellicent', 'Wailmer', 'Chinchou', 'Ducklett'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Reversal Mountain'))], 13));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 14', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 14, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Golduck', 'Swablu', 'Mienfoo', 'Drifblim', 'Absol', 'Altaria'],\n water: ['Buizel', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Reversal Mountain'))], 13));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 12', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 12, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pinsir', 'Heracross', 'Roselia', 'Combee', 'Vespiquen', 'Tranquill', 'Sewaddle'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cherrim (Overcast)'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Cherrim (Overcast)'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy])])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cherrim (Sunshine)'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Cherrim (Sunshine)'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])])),\n ],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 13),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Zinzolin 1'),\n new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Hollow Truth and Ideals', 10),\n], 13.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 11', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 11, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Golduck', 'Marill', 'Gligar', 'Zangoose', 'Seviper', 'Karrablast', 'Amoonguss', 'Shelmet'],\n water: ['Buizel', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 12)], 13.2));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 9', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 9, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Muk', 'Swalot', 'Liepard', 'Garbodor', 'Minccino', 'Gothorita', 'Duosion', 'Pawniard'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 11)], 13.3));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 21', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 21, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Mantyke', 'Remoraid', 'Spheal', 'Luvdisc'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Seaside Cave'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 22', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 22, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Golduck', 'Marill', 'Delibird', 'Pelipper', 'Lunatone', 'Solrock', 'Amoonguss', 'Mienfoo'],\n water: ['Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 21)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 23', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 23, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Golduck', 'Gligar', 'Amoonguss', 'Mienfoo', 'Bouffalant', 'Rufflet', 'Vullaby'],\n water: ['Buizel', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sawk'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Sawk')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Throh'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Throh')),\n ],\n}), [\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Giant Chasm')),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Ghetsis 2'),\n new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Hollow Truth and Ideals'),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 8', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 8, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Croagunk', 'Tympole', 'Palpitoad', 'Karrablast', 'Shelmet', 'Stunfisk'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Twist Mountain')),\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 9),\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_UnovaChampion),\n ]),\n ]),\n], 23.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 15', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 15, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandslash', 'Gligar', 'Pupitar', 'Swanna'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sawk'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Sawk')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Throh'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Throh')),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 14),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 16),\n ]),\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_UnovaChampion),\n], 23.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 3', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 3, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Yanma', 'Yanmega', 'Watchog', 'Herdier', 'Purrloin', 'Tranquill'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Zebstrika'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Zebstrika')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blitzle'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Blitzle')),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Pinwheel Forest'))], 23.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 2', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 2, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Jigglypuff', 'Lickitung', 'Watchog', 'Herdier', 'Liepard'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 3)], 23.2));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 1', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 1, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Jigglypuff', 'Watchog', 'Herdier', 'Scrafty'],\n water: ['Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 2)], 23.3));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 17', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 17, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Frillish', 'Alomomola'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 1)], 23.4));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Unova Route 18', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 18, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Tropius', 'Carnivine', 'Watchog', 'Crustle', 'Scrafty'],\n water: ['Frillish', 'Alomomola'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sawk'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Sawk')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Throh'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Throh')),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, 17)], 23.5));\n/*\nKALOS\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 1', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 1, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bunnelby', 'Fletchling'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_UnovaChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 2', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 2, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Caterpie', 'Weedle', 'Pidgey', 'Zigzagoon', 'Fletchling', 'Bunnelby', 'Scatterbug'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 1)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 3', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 3, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pidgey', 'Pikachu', 'Dunsparce', 'Azurill', 'Bidoof', 'Burmy (Plant)', 'Bunnelby', 'Fletchling'],\n water: ['Magikarp', 'Goldeen', 'Marill', 'Masquerain'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Santalune Forest'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 22', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 22, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Psyduck', 'Farfetch\\'d', 'Azumarill', 'Dunsparce', 'Azurill', 'Bidoof', 'Bibarel', 'Riolu', 'Bunnelby', 'Diggersby', 'Litleo'],\n water: ['Magikarp', 'Goldeen', 'Carvanha'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 3)], 3.1));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 4', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 4, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Ledyba', 'Ralts', 'Skitty', 'Budew', 'Combee', 'Flabébé (Red)', 'Flabébé (Orange)', 'Flabébé (White)'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Bug)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 5', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 5, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Abra', 'Doduo', 'Plusle', 'Minun', 'Gulpin', 'Bunnelby', 'Skiddo', 'Pancham', 'Furfrou'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('A Beautiful World', 1)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 6', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 6, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Oddish', 'Sentret', 'Nincada', 'Kecleon', 'Espurr', 'Honedge'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Tierno 1')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 7', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 7, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Smeargle', 'Volbeat', 'Illumise', 'Roselia', 'Croagunk', 'Ducklett', 'Flabébé (Orange)', 'Flabébé (White)', 'Spritzee', 'Swirlix'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 6)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 8', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 8, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spoink', 'Zangoose', 'Seviper', 'Absol', 'Bagon', 'Drifloon', 'Mienfoo', 'Inkay'],\n water: ['Tentacool', 'Shellder', 'Staryu', 'Wailmer', 'Luvdisc', 'Skrelp', 'Clauncher'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Connecting Cave'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 9', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 9, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Hippopotas', 'Sandile', 'Helioptile'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 8)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 10', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 10, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Eevee', 'Snubbull', 'Houndour', 'Electrike', 'Sigilyph', 'Emolga', 'Golett', 'Hawlucha'],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Glittering Cave'))]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 11', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 11, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Nidorina', 'Nidorino', 'Hariyama', 'Staravia', 'Chingling', 'Stunky', 'Throh', 'Sawk', 'Dedenne'],\n}), [\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Cliff),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 10),\n new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('A Beautiful World', 8),\n]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 12', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 12, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Slowpoke', 'Exeggcute', 'Pinsir', 'Tauros', 'Heracross', 'Miltank', 'Pachirisu', 'Chatot'],\n water: ['Tentacool', 'Lapras', 'Remoraid', 'Clamperl', 'Mantyke'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rumble)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 13', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 13, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Dugtrio', 'Trapinch', 'Gible'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 12)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 14', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 14, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Weepinbell', 'Haunter', 'Quagsire', 'Skorupi', 'Carnivine', 'Karrablast', 'Shelmet', 'Goomy'],\n water: ['Poliwag', 'Poliwhirl', 'Barboach', 'Stunfisk'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Calem 3')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 15', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 15, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Mightyena', 'Skorupi', 'Watchog', 'Liepard', 'Foongus', 'Pawniard', 'Klefki'],\n water: ['Poliwag', 'Poliwhirl', 'Lombre', 'Floatzel', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('A Beautiful World', 15)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 16', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 16, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Weepinbell', 'Floatzel', 'Skorupi', 'Foongus', 'Klefki', 'Phantump', 'Pumpkaboo (Average)', 'Pumpkaboo (Small)', 'Pumpkaboo (Large)', 'Pumpkaboo (Super Size)'],\n water: ['Poliwag', 'Poliwhirl', 'Lombre', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 15)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 17', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 17, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sneasel', 'Delibird', 'Snover', 'Abomasnow'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('A Beautiful World', 17)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 18', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 18, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandslash', 'Graveler', 'Pupitar', 'Lairon', 'Torkoal', 'Gurdurr', 'Heatmor', 'Durant'],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('A Beautiful World', 32)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 19', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 19, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Weepinbell', 'Haunter', 'Quagsire', 'Drapion', 'Carnivine', 'Karrablast', 'Shelmet', 'Sliggoo'],\n water: ['Poliwag', 'Poliwhirl', 'Barboach', 'Stunfisk', 'Politoed'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Sycamore 2')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 20', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 20, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Jigglypuff', 'Noctowl', 'Zoroark', 'Gothorita', 'Amoonguss', 'Trevenant'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Trevor')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kalos Route 21', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 21, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Scyther', 'Ursaring', 'Spinda', 'Altaria', 'Floatzel'],\n water: ['Poliwag', 'Poliwhirl', 'Lombre', 'Basculin (Red-Striped)', 'Dratini', 'Dragonair'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Trevor')]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Azure Bay', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 23, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Slowpoke', 'Exeggcute', 'Chatot', 'Inkay'],\n water: ['Tentacool', 'Lapras', 'Chinchou', 'Remoraid', 'Luvdisc', 'Mantyke'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, 12)], 12));\n// From here down :\n// - No named routes\n// - Missing numbered route\n// - No requirements\n/*\nALOLA\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 1', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 1, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Caterpie', 'Alolan Rattata', 'Ledyba', 'Spinarak', 'Pichu', 'Buneary', 'Pikipek', 'Yungoos', 'Grubbin'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_KalosChampion)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MelemeleIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Route 1 Hau\\'oli Outskirts', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 18, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Slowpoke', 'Wingull', 'Inkay'],\n water: ['Tentacool', 'Mantyke', 'Finneon'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Hau 2')], 1.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MelemeleIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 2', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 2, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Rattata', 'Spearow', 'Ekans', 'Alolan Meowth', 'Growlithe', 'Abra', 'Drowzee', 'Smeargle', 'Makuhita', 'Furfrou', 'Yungoos', 'Cutiefly'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bulbasaur', 'Chikorita'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Friday)),\n ],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Ilima')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MelemeleIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 3', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 3, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spearow', 'Mankey', 'Bagon', 'Rufflet', 'Vullaby', 'Hawlucha', 'Cutiefly'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Charmander', 'Cyndaquil'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Sunday)),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Verdant Cavern'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MelemeleIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Melemele Sea', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 19, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Magikarp', 'Corsola', 'Remoraid', 'Wingull', 'Clamperl', 'Luvdisc', 'Mantyke', 'Finneon', 'Wishiwashi (Solo)'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Brooklet Hill'))], 5.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MelemeleIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Kala\\'e Bay', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 20, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Rattata', 'Slowpoke', 'Wingull', 'Bagon', 'Yungoos'],\n water: ['Tentacool', 'Shellder', 'Magikarp', 'Remoraid', 'Shelgon', 'Finneon', 'Mantyke', 'Wishiwashi (Solo)'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Horsea'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Wednesday)),\n ],\n}), [\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Seaward Cave')),\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Brooklet Hill')),\n], 5.2, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MelemeleIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 4', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 4, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Rattata', 'Eevee', 'Igglybuff', 'Lillipup', 'Pikipek', 'Yungoos', 'Grubbin', 'Mudbray'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Beedrill', 'Venipede'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Thursday)),\n ],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Symbiotic Relations', 0)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 5', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 5, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Caterpie', 'Metapod', 'Butterfree', 'Bonsly', 'Lillipup', 'Pikipek', 'Trumbeak', 'Grubbin', 'Fomantis'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bellsprout', 'Grovyle'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Friday)),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Paniola Ranch'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 6', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 6, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Rattata', 'Eevee', 'Igglybuff', 'Lillipup', 'Pikipek', 'Yungoos', 'Grubbin', 'Mudbray'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ralts', 'Gothita'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Sunday)),\n ],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Recon Squad 2')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 7', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 7, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Staryu', 'Magikarp', 'Wingull', 'Finneon', 'Wishiwashi (Solo)', 'Pyukumuku'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Spheal'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Monday)),\n ],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Battle Royal')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 8', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 8, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Rattata', 'Fletchling', 'Trumbeak', 'Yungoos', 'Stufful'],\n water: ['Tentacool', 'Magikarp', 'Chinchou', 'Remoraid', 'Finneon', 'Mantyke', 'Wishiwashi (Solo)'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Salandit'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Salandit')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wimpod'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Wimpod')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Combusken', 'Luxio'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Tuesday)),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Wela Volcano Park'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 9', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 9, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Corsola', 'Luvdisc', 'Wishiwashi (Solo)', 'Mareanie'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Diglett\\'s Tunnel'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Akala Outskirts', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 21, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Raticate', 'Natu', 'Wingull', 'Nosepass', 'Gumshoos', 'Stufful'],\n water: ['Magikarp', 'Chinchou', 'Wishiwashi (Solo)'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Honedge'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Wednesday)),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Memorial Hill'))], 9.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 10', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 10, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Raticate', 'Fearow', 'Ledian', 'Ariados', 'Skarmory', 'Pancham', 'Gumshoos'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pidgeot', 'Staravia'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Thursday)),\n ],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Hau 5')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Mount Hokulani', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 22, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Fearow', 'Ditto', 'Cleffa', 'Skarmory', 'Elekid', 'Beldum', 'Elgyem', 'Minior (Meteor)', 'Minior (Blue Core)', 'Minior (Green Core)', 'Minior (Indigo Core)', 'Minior (Orange Core)', 'Minior (Red Core)', 'Minior (Violet Core)', 'Minior (Yellow Core)'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Axew'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Saturday)),\n ],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 10),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Skull 4'),\n], 10.1, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 11', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 11, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Parasect', 'Ledian', 'Ariados', 'Pancham', 'Trumbeak', 'Toucannon', 'Komala'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shiinotic'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Shiinotic')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vigoroth', 'Monferno'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Friday)),\n ],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Hau 5')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 12', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 12, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Geodude', 'Alolan Graveler', 'Houndoom', 'Manectric', 'Torkoal', 'Mudbray'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 11),\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Hokulani Observatory')),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 13', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 13, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Wishiwashi (Solo)', 'Bruxish'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 12)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 14', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 14, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacruel', 'Magikarp', 'Pelipper', 'Finneon', 'Frillish', 'Wishiwashi (Solo)', 'Bruxish'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 13)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Haina Desert', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 23, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Dugtrio', 'Trapinch', 'Baltoy', 'Gabite', 'Krokorok', 'Golett'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Celesteela'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Ultra Beast Hunt', 11)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Thrifty Megamart'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 15', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 15, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Raticate', 'Slowpoke', 'Pelipper', 'Gumshoos', 'Sandygast'],\n water: ['Tentacruel', 'Magikarp', 'Clamperl', 'Finneon', 'Wishiwashi (Solo)', 'Bruxish'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 13)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 16', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 16, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Raticate', 'Slowpoke', 'Pelipper', 'Scraggy', 'Gumshoos'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Prinplup', 'Duosion'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Tuesday)),\n ],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Plumeria 2')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Alola Route 17', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 17, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Raticate', 'Fearow', 'Alolan Graveler', 'Ledian', 'Ariados', 'Scraggy', 'Bisharp', 'Gumshoos'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Kartana'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Ultra Beast Hunt', 11)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Ula\\'ula Meadow'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Poni Wilds', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 24, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Granbull', 'Pelipper', 'Gastrodon (East)', 'Furfrou', 'Inkay'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Samurott', 'Greninja'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Friday)),\n ],\n}), [new _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Emissary of Light')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Ancient Poni Path', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 25, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Granbull', 'Pelipper', 'Gastrodon (East)', 'Furfrou', 'Inkay'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Emboar', 'Delphox'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Saturday)),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 24)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Poni Breaker Coast', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 26, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacruel', 'Lapras', 'Magikarp', 'Pelipper', 'Carvanha', 'Wailmer', 'Relicanth', 'Gastrodon (East)', 'Lumineon'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wimpod'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Wimpod')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 25)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Poni Grove', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 27, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pinsir', 'Heracross', 'Buneary', 'Riolu', 'Zoroark', 'Trumbeak', 'Toucannon'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blacephalon'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Ultra Beast Hunt', 15)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Stakataka'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Ultra Beast Hunt', 15)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eelektross'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Sunday)),\n ],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Champion_Stamp)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Poni Plains', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 28, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Raticate', 'Fearow', 'Hypno', 'Tauros', 'Miltank', 'Pelipper', 'Hariyama', 'Ambipom', 'Cottonee', 'Petilil', 'Trumbeak', 'Toucannon', 'Gumshoos', 'Mudsdale', 'Pyroar'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Aggron', 'Conkeldurr'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Monday)),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 27)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Poni Coast', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 29, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Alolan Dugtrio'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9))],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 28)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Poni Gauntlet', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 30, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pelipper', 'Lickitung', 'Golduck', 'Granbull', 'Inkay', 'Bewear'],\n water: ['Magikarp', 'Dratini', 'Dragonair', 'Barboach'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Meltan'], new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('Let\\'s Go, Meltan!', 9)),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Togekiss', 'Rotom'], new _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.DayOfWeek.Tuesday)),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 29)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Friend League Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 31, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp'],\n}), [new _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_8__[\"default\"]('Magikarp Jump')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 33750));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Quick League Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 32, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Friend_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 67500));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Heavy League Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 33, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Magikarp', 'Magikarp', 'Magikarp Calico (Orange, White)', 'Magikarp Orange Orca'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Quick_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 168750));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Great League Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 34, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Magikarp', 'Magikarp', 'Magikarp Orange Two-Tone', 'Magikarp Orange Dapples'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Heavy_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 270000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Fast League Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 35, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Magikarp', 'Magikarp', 'Magikarp Calico (Orange, White, Black)', 'Magikarp Orange Two-Tone', 'Magikarp Calico (Orange, White)'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Great_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 506250));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Luxury League Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 36, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Magikarp', 'Magikarp', 'Magikarp Pink Two-Tone', 'Magikarp Calico (Orange, White, Black)', 'Magikarp Orange Dapples'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fast_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 675000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Heal League Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 37, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Magikarp', 'Magikarp', 'Magikarp Grey Bubbles', 'Magikarp Grey Patches', 'Magikarp Orange Dapples'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Luxury_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 1012500));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Ultra League Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 38, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Magikarp', 'Magikarp', 'Magikarp Calico (Orange, White, Black)', 'Magikarp Orange Two-Tone', 'Magikarp Calico (Orange, White)', 'Magikarp Apricot Tiger', 'Magikarp Apricot Zebra', 'Magikarp Brown Zebra'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Heal_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 1350000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Elite Four League Pier', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 39, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Magikarp', 'Magikarp', 'Magikarp Black Forehead', 'Magikarp Pink Orca', 'Magikarp Grey Patches'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Ultra_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 2025000));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Master League Pier', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, 40, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Magikarp', 'Magikarp', 'Magikarp', 'Magikarp Orange Mask', 'Magikarp Calico (Orange, Gold)', 'Magikarp Grey Bubbles'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].E4_League)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, true, 2700000));\n/*\nGALAR\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 1', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 1, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Skwovet', 'Rookidee', 'Blipbug', 'Wooloo', 'Nickit', 'Caterpie', 'Hoothoot', 'Grubbin'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Champion_Stamp)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 2', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 2, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Skwovet', 'Rookidee', 'Nickit', 'Chewtle', 'Yamper', 'Galarian Zigzagoon', 'Blipbug', 'Seedot', 'Hoothoot', 'Lotad', 'Purrloin'],\n water: ['Magikarp', 'Arrokuda'],\n}), [\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 1),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Mirages'),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Rolling Fields', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Diglett', 'Butterfree', 'Pidove', 'Roggenrola', 'Tyrogue', 'Metapod', 'Pancham', 'Bunnelby', 'Onix', 'Ninjask', 'Diggersby', 'Dubwool'],\n headbutt: ['Cherubi', 'Skwovet'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Combee', 'Vespiquen', 'Bounsweet'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Mudsdale'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pangoro'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Roselia'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Minccino'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ralts'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Budew', 'Oddish'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lotad', 'Nuzleaf', 'Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wingull', 'Haunter'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electrike', 'Pikachu', 'Manectric', 'Joltik'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanillite', 'Piloswine', 'Swinub'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Delibird', 'Snorunt', 'Mime Jr.'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe', 'Mudbray'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Baltoy'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dwebble', 'Golett', 'Crustle'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Natu', 'Munna', 'Kirlia', 'Gardevoir'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Hop 2')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Dappled Grove', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 4, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Lombre', 'Nuzleaf', 'Orbeetle', 'Bewear'],\n headbutt: ['Cherubi', 'Skwovet'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shiftry', 'Ludicolo', 'Oddish', 'Seedot', 'Lotad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vileplume'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bunnelby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hoothoot'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bounsweet'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Budew'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tyrogue', 'Stufful', 'Stunky'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tympole', 'Grubbin', 'Seismitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electrike', 'Joltik'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorunt', 'Vanillite', 'Delibird', 'Vanillish'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snover'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pangoro'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Klink'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe', 'Mudbray'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Baltoy', 'Claydol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Golett'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Mudsdale', 'Natu', 'Munna', 'Ralts', 'Kirlia', 'Roselia', 'Gardevoir'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('West Lake Axewell', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 5, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Goldeen', 'Magikarp', 'Remoraid', 'Wishiwashi (Solo)', 'Drednaw', 'Gyarados'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Krabby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wooper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wingull'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bounsweet', 'Kingler'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Purrloin'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tympole'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Frillish'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Quagsire'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cloyster'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lapras'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seaking'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tyrogue', 'Lotad', 'Seedot', 'Budew'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pancham'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Palpitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electrike', 'Joltik', 'Chinchou', 'Lanturn'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Delibird', 'Vanillite', 'Vanilluxe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorunt', 'Shellder'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Diggersby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Klink'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bunnelby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Baltoy', 'Dwebble'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Nincada', 'Mudbray'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Natu', 'Ralts'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Grapploct'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Grapploct'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('East Lake Axewell', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 6, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Stufful', 'Butterfree', 'Pidove'],\n water: ['Shellder', 'Magikarp', 'Goldeen', 'Wishiwashi (Solo)', 'Gyarados', 'Wingull'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Oddish', 'Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bounsweet', 'Bunnelby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Frillish'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Xatu'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Garbodor'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seaking'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lanturn'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cloyster'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Budew'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Minccino'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pancham'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Grubbin'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electrike', 'Joltik', 'Chinchou'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorunt', 'Snover', 'Vanillite', 'Piloswine', 'Vanilluxe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Onix', 'Mudbray', 'Mudsdale'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Baltoy', 'Dwebble'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Purrloin', 'Munna', 'Bronzong'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Giant\\'s Seat', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 7, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bewear', 'Bronzor', 'Steelix', 'Duraludon', 'Bisharp'],\n water: ['Shellder', 'Cloyster', 'Gyarados', 'Pyukumuku'],\n headbutt: ['Cherubi', 'Greedent'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Onix', 'Vikavolt'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tranquill', 'Diggersby', 'Rhydon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Machop'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Machoke'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lombre', 'Nuzleaf'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Stufful'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Haunter', 'Tyrogue'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gastly'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bronzong'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Quagsire', 'Wooper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galvantula'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Crawdaunt', 'Manectric', 'Electrike', 'Palpitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swinub', 'Delibird', 'Snorunt', 'Snover', 'Abomasnow', 'Glalie'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dwebble', 'Mudsdale'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe', 'Mudbray'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Golett', 'Golurk'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Xatu', 'Liepard', 'Natu', 'Duskull', 'Munna', 'Dusclops', 'Musharna'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 8),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 9),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('South Lake Miloch', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 8, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Machop', 'Tyrogue', 'Galvantula', 'Machoke', 'Thievul', 'Wingull', 'Drifloon'],\n water: ['Magikarp', 'Remoraid', 'Barboach', 'Pyukumuku', 'Goldeen'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Corphish'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tympole'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Stunky'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Krabby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lombre', 'Nuzleaf'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Skuntank'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Kingler', 'Crawdaunt'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drifblim'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seaking'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gyarados'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Octillery'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Roselia'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Palpitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electrike', 'Joltik', 'Lanturn'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorunt'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanillite', 'Snover', 'Vanilluxe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Klink', 'Delibird'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe', 'Crustle'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Nincada', 'Baltoy', 'Mudbray', 'Whiscash'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wooper', 'Dwebble'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Natu', 'Ralts', 'Bronzor', 'Milotic'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 3)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('North Lake Miloch', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 9, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Stunky', 'Boltund', 'Liepard', 'Corviknight'],\n headbutt: ['Skwovet', 'Cherubi'],\n water: ['Frillish', 'Magikarp', 'Basculin (Blue-Striped)', 'Basculin (Red-Striped)', 'Barboach'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pidove', 'Diggersby', 'Lucario'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Stufful'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bunnelby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drifloon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wingull'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Xatu'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lapras'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drifblim'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Whiscash'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Machop', 'Gastly'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Purrloin'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seismitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gyarados'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tympole'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Grubbin', 'Palpitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Skuntank'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seaking'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Joltik'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Delibird', 'Snorunt', 'Snover', 'Vanillite', 'Vanillish', 'Vanilluxe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Klink'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Baltoy', 'Dwebble', 'Mudbray'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Golett'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Natu', 'Ralts'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 6),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 7),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 8),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Axew\\'s Eye', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 10, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Diggersby', 'Bewear'],\n headbutt: ['Greedent', 'Cherubi'],\n water: ['Octillery', 'Magikarp', 'Wishiwashi (Solo)', 'Gyarados'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Kingler'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Axew'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Machoke'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Unfezant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Steenee'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Haxorus'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Roselia', 'Gloom'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Crawdaunt', 'Seismitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper', 'Charjabug', 'Cramorant (Gulping)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Manectric', 'Cramorant (Gorging)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snover', 'Vanillish', 'Delibird', 'Abomasnow'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bronzong', 'Klink'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Crustle', 'Mudsdale'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Claydol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Baltoy'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drifblim', 'Munna', 'Liepard'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 6),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 25),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Watchtower Ruins', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 11, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Duskull', 'Corviknight', 'Woobat', 'Noibat'],\n headbutt: ['Skwovet', 'Cherubi'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Golett'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drifloon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bounsweet'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pidove'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drifblim'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Golurk'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gastly', 'Haunter'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Oddish', 'Machop'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dusclops'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wingull', 'Tympole'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Purrloin'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electrike', 'Grubbin'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Delibird', 'Snorunt', 'Snover', 'Glalie'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shuckle'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dwebble'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ralts'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 4),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 5),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 6),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 3', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 12, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Gossifleur', 'Corvisquire', 'Rookidee', 'Rolycoly', 'Sizzlipede', 'Vulpix', 'Growlithe', 'Tyrogue', 'Galarian Zigzagoon', 'Stunky', 'Trubbish', 'Cherubi', 'Mudbray', 'Pancham', 'Klink', 'Machop'],\n headbutt: ['Skwovet'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Hop 3')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 4', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 13, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Yamper', 'Cutiefly', 'Wooloo', 'Milcery', 'Galarian Meowth', 'Budew', 'Ferroseed', 'Joltik', 'Pikachu', 'Eevee', 'Electrike', 'Pumpkaboo (Average)', 'Pumpkaboo (Small)', 'Pumpkaboo (Large)', 'Pumpkaboo (Super Size)', 'Diglett'],\n water: ['Magikarp', 'Goldeen', 'Chewtle'],\n headbutt: ['Skwovet'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Bede 1')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 5', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 14, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Dottler', 'Drifloon', 'Applin', 'Eldegoss', 'Galarian Farfetch\\'d', 'Wobbuffet', 'Minccino', 'Spritzee', 'Swirlix', 'Stufful', 'Espurr', 'Nincada', 'Dewpider', 'Nuzleaf', 'Lombre'],\n water: ['Magikarp', 'Chewtle', 'Goldeen'],\n headbutt: ['Skwovet'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Galar_Grass)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Motostoke Outskirts', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 15, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Impidimp', 'Chewtle', 'Koffing', 'Hatenna', 'Noctowl', 'Throh', 'Sawk', 'Sudowoodo', 'Salandit', 'Pawniard', 'Scraggy', 'Croagunk', 'Roggenrola'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Bede 2')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Motostoke Riverbank', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 16, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Purrloin', 'Corvisquire', 'Eldegoss', 'Sigilyph'],\n water: ['Arrokuda', 'Barraskewda', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Mareanie', 'Mantyke', 'Wailmer'],\n headbutt: ['Greedent', 'Skwovet', 'Cherubi'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Skorupi'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gossifleur', 'Munchlax'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wooloo'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Noctowl'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dubwool'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorlax'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drapion'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Conkeldurr'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Koffing', 'Rookidee', 'Sawk', 'Throh'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cutiefly'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ribombee'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wimpod', 'Chewtle'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dewpider', 'Karrablast', 'Shelmet', 'Binacle'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Yamper', 'Shellos (East)', 'Boltund'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sneasel', 'Vanillite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pawniard', 'Ferroseed'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rhyhorn', 'Rolycoly', 'Rhydon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Salandit', 'Torkoal', 'Litwick'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sudowoodo', 'Onix'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Clefairy', 'Wobbuffet', 'Duskull', 'Espurr', 'Elgyem', 'Clefable'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxel'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Toxel'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])])),\n ],\n}), [\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 9),\n new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Galar_Fire),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Bridge Field', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 17, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Galarian Zigzagoon', 'Noibat', 'Palpitoad', 'Ferroseed', 'Garbodor', 'Galarian Linoone', 'Ferrothorn', 'Obstagoon', 'Woobat', 'Tranquill'],\n water: ['Drednaw', 'Lanturn', 'Qwilfish', 'Gyarados', 'Magikarp', 'Goldeen', 'Inkay'],\n headbutt: ['Greedent', 'Cherubi'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cutiefly', 'Ribombee'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wobbuffet'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Liepard'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Togepi'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Golisopod'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bewear'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seismitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Beheeyem'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Noivern'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gallade'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seaking'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cufant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Scraggy', 'Croagunk'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sawk', 'Throh', 'Karrablast', 'Diggersby', 'Shelmet', 'Drapion'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Elgyem'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Thievul'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pangoro'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Stufful'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant (Gulping)', 'Wimpod'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bronzor', 'Binacle', 'Shellos (East)', 'Bronzong'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Frillish'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cubchoo', 'Sneasel', 'Vanillite', 'Vanilluxe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Noctowl', 'Beartic'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Mawile', 'Weavile'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Maractus', 'Carkol', 'Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Baltoy', 'Rhydon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Litwick'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bonsly', 'Rhyhorn', 'Rufflet', 'Sudowoodo', 'Claydol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Munna', 'Milcery', 'Mimikyu', 'Musharna'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxel'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Toxel'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 16)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Stony Wilderness', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 18, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Baltoy', 'Golett', 'Rhydon', 'Dusknoir', 'Golurk', 'Grimmsnarl', 'Tranquill', 'Sigilyph'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galarian Zigzagoon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ninjask'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tyrogue', 'Eldegoss'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gurdurr'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Boldore'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ribombee'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Impidimp'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Claydol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tsareena', 'Crustle'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Machoke', 'Scraggy', 'Croagunk', 'Cottonee', 'Swirlix', 'Spritzee', 'Unfezant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dewpider'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant (Gulping)', 'Barboach', 'Shellos (East)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bronzor', 'Bronzong'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pikachu', 'Araquanid'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Yamper', 'Applin'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cubchoo', 'Sneasel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ferroseed', 'Pawniard'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Maractus', 'Salandit', 'Carkol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drilbur'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bonsly', 'Dwebble', 'Rhyhorn', 'Shuckle'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hatenna', 'Munna', 'Nickit', 'Thievul', 'Dottler', 'Togetic'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxel'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Toxel'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 17)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Giant\\'s Mirror', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 19, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Koffing', 'Machop', 'Steelix', 'Perrserker', 'Shellos (East)', 'Gastrodon (East)', 'Dugtrio', 'Galarian Corsola', 'Boldore', 'Excadrill', 'Tranquill', 'Corvisquire'],\n water: ['Drednaw', 'Mareanie', 'Chinchou', 'Gyarados'],\n headbutt: ['Greedent', 'Cherubi'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Woobat', 'Pumpkaboo (Average)', 'Pumpkaboo (Small)', 'Pumpkaboo (Large)', 'Pumpkaboo (Super Size)', 'Nickit', 'Budew', 'Bellossom'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gloom'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Skorupi'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dottler'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Machamp'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Unfezant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Frillish'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Butterfree', 'Sawk', 'Throh', 'Galarian Farfetch\\'d', 'Roselia'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vileplume'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wimpod', 'Palpitoad', 'Chewtle', 'Seismitoad'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Natu'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Xatu'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Helioptile', 'Joltik', 'Yamper', 'Applin'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanillite', 'Cubchoo', 'Swinub', 'Snover'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Delibird', 'Abomasnow', 'Inkay'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vikavolt'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pawniard'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Durant', 'Heatmor', 'Diglett', 'Torkoal'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sudowoodo'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rhyhorn', 'Drilbur', 'Hippowdon', 'Diggersby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swirlix', 'Spritzee', 'Morelull', 'Cutiefly', 'Impidimp', 'Milcery', 'Mimikyu'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 18),\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Dusty Bowl')),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Giant\\'s Cap', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 20, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Minccino', 'Drednaw', 'Orbeetle', 'Corviknight', 'Coalossal', 'Rolycoly', 'Boldore', 'Rhydon'],\n water: ['Goldeen', 'Krabby', 'Corphish', 'Gyarados'],\n headbutt: ['Greedent', 'Cherubi'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Noctowl'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galarian Linoone'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Liepard', 'Nuzleaf', 'Lombre', 'Stunky'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Scraggy', 'Croagunk'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dottler'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eldegoss'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Doublade'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cinccino'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gengar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gloom', 'Karrablast', 'Shelmet'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Munna'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Quagsire', 'Shellos (East)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Palpitoad', 'Seismitoad', 'Golisopod'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Manectric', 'Joltik', 'Galvantula'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanillite', 'Sneasel', 'Snorunt', 'Delibird', 'Glalie'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snover', 'Beartic'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Riolu', 'Pawniard'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Carkol', 'Diggersby', 'Golett', 'Drilbur', 'Excadrill'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Torkoal', 'Baltoy', 'Dugtrio'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shuckle', 'Mudbray'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gothita', 'Solosis', 'Clefairy', 'Duskull', 'Aegislash (Shield)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxel'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Toxel'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])])),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 18),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 21),\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Dusty Bowl')),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Lake of Outrage', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 21, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Golurk', 'Ditto', 'Corviknight', 'Hatterene'],\n water: ['Mantyke', 'Mantine', 'Barraskewda', 'Lanturn', 'Qwilfish', 'Gyarados'],\n headbutt: ['Greedent', 'Cherubi'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Beheeyem', 'Braviary', 'Mandibuzz', 'Sigilyph', 'Bewear', 'Orbeetle', 'Leafeon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Obstagoon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gardevoir'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seaking'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lapras'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Garbodor', 'Drapion', 'Galarian Weezing', 'Hitmontop', 'Skuntank', 'Grimmsnarl', 'Pangoro', 'Falinks', 'Espeon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jangmo-o'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shiinotic'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seismitoad', 'Araquanid', 'Golisopod', 'Cramorant (Gulping)', 'Quagsire', 'Barbaracle', 'Deino', 'Goomy', 'Vaporeon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rotom'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galvantula', 'Noivern', 'Haxorus', 'Morpeko', 'Boltund', 'Drampa', 'Sliggoo', 'Hakamo-o', 'Jolteon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Zweilous'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Glalie', 'Abomasnow', 'Bergmite', 'Snom', 'Piloswine', 'Galarian Mr. Mime'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanilluxe', 'Eiscue (Ice Face)', 'Glaceon', 'Avalugg'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Klinklang', 'Bisharp', 'Copperajah', 'Perrserker', 'Doublade', 'Togedemaru', 'Duraludon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ninetales', 'Arcanine', 'Durant', 'Heatmor', 'Lampent', 'Flygon', 'Coalossal', 'Sandaconda', 'Turtonator', 'Larvitar', 'Flareon', 'Chandelure'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rhydon', 'Stonjourner'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Excadrill', 'Boldore', 'Pupitar', 'Dugtrio', 'Hippowdon', 'Umbreon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wobbuffet', 'Gothitelle', 'Reuniclus', 'Claydol', 'Bronzong', 'Sylveon', 'Milotic'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dreepy'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Dreepy'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drakloak'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Drakloak'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Grapploct'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Grapploct')),\n ],\n}), [\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 20),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 25),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hammerlocke Hills', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 22, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pumpkaboo (Average)', 'Pumpkaboo (Small)', 'Pumpkaboo (Large)', 'Pumpkaboo (Super Size)', 'Klink', 'Unfezant', 'Corvisquire', 'Hawlucha', 'Corviknight', 'Copperajah', 'Gourgeist (Average)', 'Gourgeist (Small)', 'Gourgeist (Large)', 'Gourgeist (Super Size)'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Espurr'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Inkay'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dubwool'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Machoke'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sudowoodo'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Wobbuffet'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Stufful'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vileplume'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Klang'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Thievul'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Roserade'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Palpitoad', 'Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shelmet', 'Karrablast'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Charjabug', 'Wimpod'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Klinklang'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sneasel', 'Snorunt', 'Abomasnow'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cubchoo'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Honedge'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanillite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vulpix', 'Growlithe', 'Baltoy', 'Maractus'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dugtrio', 'Drilbur', 'Dwebble', 'Trapinch', 'Axew'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Morelull', 'Gastly', 'Impidimp', 'Hatenna'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxel'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Toxel'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])])),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 19),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 20),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 6', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 23, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Silicobra', 'Torkoal', 'Duskull', 'Hippopotas', 'Skorupi', 'Heatmor', 'Durant', 'Hawlucha', 'Dugtrio', 'Trapinch', 'Axew', 'Maractus', 'Galarian Yamask', 'Helioptile'],\n water: ['Goldeen', 'Magikarp', 'Drednaw'],\n headbutt: ['Greedent'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Galar_Fire)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 7', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 24, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Thievul', 'Corviknight', 'Perrserker', 'Morpeko', 'Liepard', 'Seismitoad', 'Karrablast', 'Shelmet', 'Meowstic', 'Galvantula', 'Inkay'],\n headbutt: ['Greedent'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxel'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Toxel'))],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Hop 6')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 8', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 25, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandaconda', 'Haunter', 'Rhyhorn', 'Dusclops', 'Bronzong', 'Hippowdon', 'Drapion', 'Solrock', 'Lunatone', 'Boldore', 'Gurdurr', 'Golett', 'Pawniard', 'Rufflet', 'Vullaby', 'Togedemaru', 'Crustle', 'Falinks'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 24)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Steamdrift Way', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 26, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sneasel', 'Delibird', 'Snover', 'Galarian Darumaka', 'Snorunt', 'Snom', 'Throh', 'Sawk', 'Vanillish'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 25)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 2 Lakeside', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 27, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Lotad', 'Seedot', 'Purrloin', 'Blipbug', 'Gossifleur', 'Chewtle', 'Galarian Zigzagoon', 'Nickit', 'Yamper', 'Obstagoon'],\n water: ['Lapras', 'Drednaw', 'Gyarados', 'Arrokuda', 'Barraskewda', 'Magikarp', 'Feebas'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 25)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 9', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 28, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Octillery', 'Kingler', 'Pyukumuku', 'Gastrodon (East)', 'Jellicent', 'Mareanie', 'Glalie', 'Pelipper', 'Pincurchin'],\n water: ['Wishiwashi (Solo)', 'Qwilfish', 'Mantyke'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant (Gulping)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant (Gorging)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Clobbopus'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Clobbopus')),\n ],\n}), [new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_9__[\"default\"]('The Darkest Day', 5)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Circhester Bay', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 29, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Gastrodon (East)', 'Inkay', 'Octillery', 'Barbaracle', 'Bergmite', 'Toxapex', 'Dhelmise', 'Pincurchin'],\n water: ['Lapras', 'Mantine', 'Mantyke', 'Wailmer', 'Wailord', 'Remoraid'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant (Gulping)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant (Gorging)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Clobbopus'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Clobbopus')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Grapploct'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Grapploct')),\n ],\n headbutt: ['Greedent'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 28)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Outer Spikemuth', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 30, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Liepard', 'Thievul', 'Perrserker', 'Morpeko', 'Jellicent', 'Bergmite', 'Mareanie', 'Toxapex', 'Dhelmise'],\n headbutt: ['Greedent'],\n special: [new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Clobbopus'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Clobbopus'))],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 29)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('White Hill Station', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 31, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Snom', 'Rhydon', 'Galarian Darumaka', 'Galarian Mr. Mime', 'Vanillish', 'Klang', 'Glalie', 'Snover', 'Vanilluxe', 'Cubchoo'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Galar_Dragon)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Galar Route 10', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 32, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Snom', 'Duraludon', 'Stonjourner', 'Beartic', 'Vanillish', 'Abomasnow', 'Galarian Darumaka', 'Galarian Mr. Mime', 'Sneasel', 'Snover', 'Cubchoo'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eiscue (Ice Face)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eiscue (Noice Face)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 31)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar));\n/*\nISLE OF ARMOR\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Fields of Honor', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 33, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Galarian Slowpoke', 'Buneary', 'Jigglypuff', 'Abra', 'Klefki', 'Blipbug', 'Happiny'],\n water: ['Magikarp', 'Remoraid', 'Octillery', 'Tentacool', 'Wingull', 'Mantyke'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Comfey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Kingler'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Starmie'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxapex'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lopunny', 'Rockruff'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Inkay', 'Tentacruel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Malamar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Zorua'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Marill'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Krabby', 'Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pikachu', 'Luxio'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fomantis', 'Drednaw', 'Fletchinder'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Ralts', 'Blissey', 'Wigglytuff', 'Kadabra', 'Drifloon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n headbutt: ['Skwovet', 'Applin'],\n}), [\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Klara 1'),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Avery 1'),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Soothing Wetlands', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 34, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Skorupi', 'Dunsparce', 'Bouffalant', 'Lickitung', 'Shelmet', 'Happiny'],\n water: ['Magikarp', 'Barboach', 'Whiscash', 'Wooper', 'Chewtle'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rockruff', 'Lopunny'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drapion'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Quagsire'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drednaw'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lickilicky'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Comfey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pawniard', 'Croagunk', 'Scraggy'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Malamar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Zorua'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Marill'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Corphish', 'Goomy', 'Politoed'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Poliwhirl'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Luxray', 'Luxio', 'Raichu', 'Pikachu'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fomantis', 'Talonflame', 'Lilligant', 'Fletchinder'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Kadabra', 'Wigglytuff', 'Azumarill'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n headbutt: ['Skwovet', 'Applin'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 33)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Forest of Focus', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 35, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Venipede', 'Foongus', 'Tangela', 'Pikachu', 'Passimian', 'Oranguru', 'Happiny', 'Karrablast'],\n water: ['Magikarp', 'Goldeen', 'Arrokuda', 'Corphish'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Amoonguss'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tangrowth'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pawniard', 'Croagunk', 'Scolipede'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Crawdaunt'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Accelgor', 'Golduck', 'Cramorant (Gulping)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shelmet', 'Goomy'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Raichu', 'Luxray', 'Pichu', 'Cramorant (Gorging)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fomantis', 'Pinsir', 'Heracross', 'Lurantis', 'Larvesta'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Comfey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Silicobra', 'Sandslash', 'Escavalier', 'Cubone'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Zorua', 'Wigglytuff', 'Azumarill', 'Gardevoir'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n headbutt: ['Skwovet', 'Applin', 'Emolga'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 34),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 36),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 38),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Challenge Beach', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 36, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Magnemite', 'Psyduck', 'Dedenne', 'Morpeko', 'Blipbug', 'Buneary', 'Jigglypuff', 'Happiny'],\n water: ['Magikarp', 'Wishiwashi (Solo)', 'Dhelmise', 'Staryu', 'Tentacool', 'Wingull', 'Arrokuda', 'Corphish'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gyarados', 'Octillery'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper', 'Starmie'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drednaw'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Barraskewda'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Comfey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Marill'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lopunny'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Inkay', 'Swoobat', 'Tentacruel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drapion', 'Malamar', 'Crawdaunt', 'Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxapex'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drifblim'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Golisopod', 'Cramorant (Gulping)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shinx'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magneton', 'Magnezone', 'Cramorant (Gorging)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Golduck'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fomantis', 'Volcarona'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Wigglytuff', 'Azumarill', 'Drifloon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n headbutt: ['Skwovet', 'Applin'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 34),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 35),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 42),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 44),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Loop Lagoon', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 37, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandygast', 'Wingull', 'Mareanie', 'Pincurchin', 'Dwebble', 'Blipbug', 'Happiny'],\n water: ['Magikarp', 'Shellder', 'Cloyster', 'Tentacool'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rockruff'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Alakazam'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drednaw'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Inkay', 'Tentacruel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Malamar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Toxapex'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Palossand', 'Zoroark'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Krabby', 'Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Luxio', 'Magnezone', 'Luxray'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fletchling', 'Fletchinder', 'Talonflame', 'Larvesta'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Drifloon', 'Wigglytuff'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Grapploct'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Grapploct'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Clobbopus'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Clobbopus')),\n ],\n headbutt: ['Skwovet', 'Applin'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Courageous Cavern')),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 42),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Training Lowlands', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 38, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Lillipup', 'Tauros', 'Miltank', 'Scyther', 'Pinsir', 'Heracross', 'Blipbug', 'Happiny'],\n water: ['Magikarp', 'Carvanha', 'Sharpedo', 'Corphish', 'Arrokuda', 'Staryu'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Stoutland'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Kangaskhan'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Kingler'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cramorant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Barraskewda'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Herdier'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Inkay', 'Bisharp', 'Swoobat', 'Karrablast', 'Crawdaunt'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Malamar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drapion'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper', 'Shelmet', 'Cramorant (Gulping)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shinx', 'Scrafty', 'Toxicroak'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Luxray', 'Luxio', 'Magneton', 'Accelgor', 'Cramorant (Gorging)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fletchinder', 'Fomantis', 'Lilligant', 'Talonflame'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Silicobra', 'Scizor', 'Crustle', 'Skarmory', 'Escavalier', 'Jangmo-o'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Wigglytuff', 'Comfey', 'Drifblim', 'Azumarill', 'Gardevoir'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n headbutt: ['Skwovet', 'Applin'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 35),\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Brawlers\\' Cave')),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 44),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Potbottom Desert', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 39, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sandile', 'Rhyhorn', 'Torkoal', 'Rufflet', 'Vullaby', 'Braviary', 'Mandibuzz'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rhydon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rhyperior'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Marowak', 'Sandaconda'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pawniard', 'Jangmo-o'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Krookodile', 'Krokorok'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shinx'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fletchling', 'Volcarona'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Silicobra', 'Scraggy', 'Sandslash'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Warm-Up Tunnel'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Challenge Road', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 40, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Blipbug', 'Happiny', 'Mienfoo', 'Rockruff', 'Roggenrola', 'Salandit', 'Skarmory'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lycanroc (Midday)', 'Mienshao'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bisharp', 'Braviary', 'Lycanroc (Midnight)', 'Mandibuzz', 'Pawniard'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jangmo-o'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Scrafty', 'Shinx', 'Toxicroak'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magneton'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Salazzle', 'Pinsir', 'Heracross', 'Fletchling'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Crustle', 'Scizor', 'Scraggy', 'Silicobra'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Drifblim', 'Gallade'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 38),\n new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Brawlers\\' Cave')),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Workout Sea', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 41, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Blipbug', 'Ditto', 'Exeggcute', 'Happiny'],\n water: ['Magikarp', 'Remoraid', 'Octillery', 'Sharpedo', 'Mantyke', 'Wingull', 'Tentacool', 'Clauncher', 'Skrelp', 'Gyarados', 'Clawitzer', 'Dragalge', 'Wailord'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rotom (Mow)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Exeggutor'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rotom (Fan)', 'Tentacruel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rotom (Frost)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rotom (Wash)', 'Chinchou', 'Lanturn'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rotom (Heat)', 'Fletchinder'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Drifloon', 'Rotom'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Rotom (Discord)'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Rotom (Discord)'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])])),\n ],\n headbutt: ['Skwovet', 'Applin'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 33)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Stepping-Stone Sea', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 42, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Blipbug', 'Exeggcute', 'Happiny', 'Wingull'],\n water: ['Magikarp', 'Wishiwashi (Solo)', 'Sharpedo', 'Tentacool', 'Frillish', 'Gyarados', 'Clauncher', 'Skrelp', 'Clawitzer', 'Dragalge'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Mantyke'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tentacruel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chinchou', 'Lanturn'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fletchinder'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Drifloon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n headbutt: ['Skwovet', 'Applin', 'Appletun', 'Flapple'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 36),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 37),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 41),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 43),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 44),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Insular Sea', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 43, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Blipbug', 'Wingull', 'Exeggcute', 'Happiny'],\n water: ['Magikarp', 'Wishiwashi (Solo)', 'Sharpedo', 'Tentacool', 'Horsea', 'Gyarados', 'Clauncher', 'Skrelp', 'Clawitzer', 'Dragalge'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Exeggutor'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Mantyke'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Zoroark', 'Tentacruel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magnezone', 'Chinchou', 'Lanturn'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Volcarona', 'Fletchinder'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Alakazam', 'Blissey', 'Comfey', 'Drifloon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n headbutt: ['Skwovet', 'Applin'],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 42),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 44),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Honeycalm Sea', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 44, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Magikarp', 'Wishiwashi (Solo)', 'Sharpedo', 'Wingull', 'Wailmer', 'Clauncher', 'Skrelp', 'Gyarados', 'Clawitzer', 'Dragalge'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Mantyke'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Seadra'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tentacruel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chinchou', 'Lanturn', 'Kingdra'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fletchinder'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Drifloon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [\n new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 36),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 38),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 42),\n new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 43),\n ]),\n], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Honeycalm Island', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 45, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Blipbug', 'Combee', 'Petilil', 'Happiny'],\n water: ['Magikarp', 'Wishiwashi (Solo)', 'Wingull', 'Tentacool', 'Wailmer', 'Gyarados', 'Clauncher', 'Skrelp', 'Clawitzer', 'Dragalge'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lilligant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chansey'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Mantyke'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tentacruel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jellicent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pelipper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Chinchou', 'Lanturn'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Fletchinder'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Blissey', 'Comfey', 'Drifloon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 44)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor));\n// Crown Tundra\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Slippery Slope', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 46, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Audino', 'Mime Jr.'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Mamoswine'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jynx'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Piloswine', 'Smoochum', 'Snom', 'Swinub'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dubwool', 'Wooloo', 'Snorlax'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sneasel', 'Phantump'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Trevenant', 'Weavile'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swablu'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cryogonal'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Abomasnow'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Glalie', 'Froslass'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magmar', 'Magby', 'Magmortar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hatenna', 'Impidimp', 'Gothorita', 'Mimikyu', 'Duosion', 'Gothita', 'Solosis', 'Hattrem', 'Grimmsnarl', 'Gothitelle', 'Reuniclus'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Amaura'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Amaura')),\n ],\n headbutt: ['Skwovet', 'Greedent'],\n}), [new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Peony')], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Frostpoint Field', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 47, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Audino', 'Mime Jr.'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Nidoran(M)', 'Nidoran(F)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorlax'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Abomasnow'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Jynx', 'Smoochum', 'Snover'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dubwool', 'Wooloo'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Sneasel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swablu', 'Weavile'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cryogonal'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanillish', 'Vanillite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanilluxe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Absol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eevee'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magmar', 'Magby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hattrem', 'Gothorita', 'Duosion', 'Mimikyu', 'Hatenna', 'Gothita', 'Solosis', 'Hatterene', 'Gothitelle', 'Reuniclus'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Amaura'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Amaura'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])])),\n ],\n headbutt: ['Skwovet', 'Greedent'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 46)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Giant\\'s Bed', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 48, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Nidoran(M)', 'Stonjourner', 'Bronzong', 'Audino', 'Mime Jr.', 'Nidorino', 'Nidorina', 'Snorlax'],\n water: ['Magikarp', 'Barboach', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Gyarados', 'Whiscash'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gurdurr', 'Eevee', 'Conkeldurr', 'Leafeon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Feebas', 'Nidoran(F)', 'Shelmet'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Nidoking'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Nidoqueen'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dubwool', 'Wooloo'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swablu', 'Galarian Linoone', 'Umbreon', 'Altaria'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Obstagoon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lampent', 'Chandelure'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vaporeon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Araquanid', 'Dewpider'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galvantula', 'Electabuzz', 'Elekid', 'Electivire', 'Jolteon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Espeon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorunt', 'Vanillish', 'Vanillite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cryogonal', 'Vanilluxe', 'Glalie', 'Froslass'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Absol', 'Glaceon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magmar', 'Heatmor', 'Durant', 'Magby', 'Flareon', 'Magmortar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hattrem', 'Morgrem', 'Clefairy', 'Mimikyu', 'Hatenna', 'Grimmsnarl', 'Hatterene', 'Clefable', 'Sylveon', 'Milotic'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Aerodactyl'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Aerodactyl')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lileep'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Lileep')),\n ],\n headbutt: ['Skwovet', 'Greedent'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 47)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Old Cemetery', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 49, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Mime Jr.', 'Drakloak'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Audino', 'Karrablast', 'Nidoran(M)', 'Nidoran(F)', 'Sinistea'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dragapult'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Polteageist'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Phantump', 'Trevenant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lampent'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dewpider', 'Araquanid'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galvantula', 'Electabuzz', 'Elekid'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cryogonal', 'Vanillish', 'Vanillite', 'Froslass'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Absol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magmar', 'Heatmor', 'Durant', 'Magby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hattrem', 'Galarian Ponyta', 'Mimikyu', 'Hatenna', 'Galarian Rapidash'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 48)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Giant\\'s Foot', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 50, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Copperajah', 'Audino', 'Claydol', 'Mime Jr.'],\n water: ['Magikarp', 'Barboach', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Gyarados', 'Whiscash'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gurdurr', 'Conkeldurr'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Bronzong', 'Bronzor', 'Cufant', 'Feebas', 'Stonjourner'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Centiskorch', 'Sizzlipede'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swablu', 'Phantump', 'Altaria'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Araquanid', 'Dewpider'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electabuzz', 'Galvantula', 'Elekid'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorunt', 'Cryogonal', 'Vanillish', 'Vanillite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Absol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magmar', 'Magby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hattrem', 'Morgrem', 'Mimikyu', 'Hatenna'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Omanyte'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Omanyte')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Kabuto'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Kabuto')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Lileep'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Lileep')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Archen'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Archen')),\n ],\n headbutt: ['Skwovet', 'Greedent'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 48)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Frigid Sea', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 51, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Mime Jr.'],\n water: ['Magikarp', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Wailmer', 'Gyarados', 'Dhelmise', 'Spheal', 'Avalugg', 'Sealeo'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eiscue (Ice Face)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Hail, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Windy, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Audino', 'Bergmite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Walrein'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swablu', 'Sneasel', 'Altaria'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Araquanid', 'Dewpider'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Electabuzz', 'Pincurchin', 'Elekid', 'Electivire'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanillish', 'Vanillite', 'Cryogonal', 'Lapras'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Beartic'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Absol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eiscue (Noice Face)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magmortar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hattrem', 'Mimikyu', 'Hatenna', 'Hatterene'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tirtouga'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Tirtouga')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Carracosta'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Carracosta'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])])),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Roaring-Sea Caves'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Three-Point Pass', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 52, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bronzong', 'Golurk', 'Mime Jr.'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Audino', 'Avalugg', 'Claydol', 'Bergmite', 'Bronzor'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dragapult'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dubwool', 'Wooloo'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swablu', 'Phantump'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Araquanid', 'Dewpider'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galvantula', 'Electabuzz', 'Elekid', 'Electivire'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cryogonal', 'Vanillish', 'Vanillite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Absol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magmar', 'Druddigon', 'Heatmor', 'Durant', 'Magby'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hattrem', 'Mimikyu', 'Hatenna'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 51)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Ballimere Lake', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 53, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Boltund', 'Audino', 'Mime Jr.', 'Aron'],\n water: ['Magikarp', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Barboach', 'Gyarados', 'Whiscash', 'Feebas', 'Dratini', 'Relicanth'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eevee'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Yamper'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cottonee', 'Whimsicott'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Coalossal'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Corvisquire'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Corviknight'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gossifleur', 'Shuckle'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Indeedee (Female)', 'Indeedee (Male)'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swablu', 'Galarian Linoone', 'Altaria', 'Obstagoon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Noivern'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Morpeko'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Araquanid', 'Dewpider', 'Dragonite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Eldegoss'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galvantula', 'Electabuzz', 'Elekid', 'Electivire'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dragonair'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Vanillish', 'Vanillite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cryogonal', 'Vanilluxe'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Carkol', 'Magmar', 'Magby', 'Magmortar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Hattrem', 'Mimikyu', 'Hatenna', 'Hatterene'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Anorith'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Anorith')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Armaldo'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Armaldo'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tyrunt'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Tyrunt')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Tyrantrum'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Tyrantrum')),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Spiritomb'], new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Spiritomb')),\n ],\n headbutt: ['Skwovet', 'Greedent', 'Munchlax'],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 48)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Snowslide Slope', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 54, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Beldum', 'Mime Jr.', 'Metang', 'Metagross'],\n water: ['Magikarp', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Gyarados'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snom'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Audino'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Dubwool', 'Wooloo', 'Druddigon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Phantump', 'Sneasel'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Weavile', 'Trevenant'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Delibird'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snorunt', 'Vanillish', 'Vanillite'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Cryogonal', 'Beartic', 'Glalie', 'Vanilluxe', 'Froslass'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Galarian Darumaka'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Absol', 'Galarian Darmanitan'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Magmar', 'Magby', 'Magmortar'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Morgrem', 'Mimikyu', 'Clefairy', 'Clefable', 'Grimmsnarl'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Amaura'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Amaura'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Aurorus'], new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Aurorus'), new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Rain, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Thunderstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])])),\n ],\n}), [new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_10__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 48)], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Path to the Peak', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 55, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Frosmoth'],\n special: [\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Snom', 'Audino'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Snow, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Fog])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Druddigon'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Clear, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Swablu', 'Altaria'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Overcast])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Absol'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Blizzard, _weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Sandstorm])),\n new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Salamence', 'Garchomp'], new _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_12__[\"default\"]([_weather_WeatherType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].Harsh_Sunlight])),\n ],\n}), [new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.getDungeonIndex)('Tunnel to the Top'))], undefined, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra));\n/*\nHisui\n*/\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Aspiration Hill', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 1, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bidoof', 'Starly', 'Shinx', 'Drifloon'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_GalarChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Horseshoe Plains', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 2, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bidoof', 'Starly', 'Eevee', 'Drifloon', 'Buizel', 'Wurmple', 'Silcoon', 'Cascoon', 'Mime Jr.', 'Ponyta', 'Rapidash'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sandgem Flats', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 3, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Mime Jr.', 'Mr. Mime', 'Drifblim', 'Abra', 'Kadabra', 'Luxio', 'Luxray', 'Shellos (West)', 'Gastrodon (West)', 'Alakazam', 'Staravia'],\n headbutt: ['Wormadam (Plant)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Deertrack Path', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 4, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Kricketot', 'Zubat', 'Munchlax', 'Starly', 'Drifloon'],\n headbutt: ['Burmy (Plant)', 'Geodude'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Deertrack Heights', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 5, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Geodude', 'Zubat', 'Golbat', 'Shinx', 'Stantler', 'Starly', 'Staravia', 'Chimchar', 'Monferno'],\n headbutt: ['Burmy (Plant)', 'Geodude'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Windswept Run', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 6, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Abra', 'Drifloon', 'Kricketot', 'Kricketune', 'Zubat', 'Buizel', 'Starly', 'Staravia'],\n headbutt: ['Burmy (Plant)', 'Geodude'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Nature\\'s Pantry', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 7, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Kricketot', 'Kricketune', 'Pichu', 'Pikachu', 'Zubat', 'Paras', 'Parasect', 'Starly', 'Staravia'],\n headbutt: ['Burmy (Plant)', 'Geodude'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Worn Bridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 8, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Geodude', 'Zubat'],\n headbutt: ['Burmy (Plant)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Gruelling Grove', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 9, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Combee', 'Heracross', 'Beautifly', 'Dustox', 'Mothim'],\n headbutt: ['Burmy (Plant)', 'Wormadam (Plant)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Tidewater Dam', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 10, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bidoof', 'Bibarel', 'Zubat', 'Golbat', 'Kricketot', 'Kricketune', 'Starly', 'Staravia'],\n headbutt: ['Burmy (Plant)', 'Geodude'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Obsidian Falls', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 11, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Gyarados'],\n water: ['Magikarp'],\n headbutt: ['Burmy (Plant)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n// Basculegion\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Ramanas Island', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 12, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Shellos (West)', 'Gastrodon (West)', 'Aipom', 'Drifloon', 'Drifblim', 'Chimchar', 'Monferno', 'Infernape', 'Starly', 'Staravia'],\n headbutt: ['Combee', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Golden Lowlands', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 13, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Psyduck', 'Gastly', 'Budew', 'Kricketot', 'Kricketune', 'Paras', 'Parasect', 'Carnivine'],\n headbutt: ['Burmy (Sand)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Scarlet Bog', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 14, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Hippopotas', 'Hippowdon', 'Gastly', 'Haunter', 'Stunky', 'Skuntank', 'Croagunk', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Cloudpool Ridge', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 15, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Combee', 'Zubat', 'Golbat', 'Roselia', 'Kricketot', 'Kricketune', 'Paras', 'Parasect', 'Murkrow', 'Honchkrow', 'Roserade', 'Carnivine'],\n headbutt: ['Burmy (Sand)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Diamond Heath', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 16, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Paras', 'Parasect', 'Zubat', 'Golbat', 'Rhyhorn'],\n headbutt: ['Geodude', 'Graveler', 'Bonsly'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Cottonsedge Prairie', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 17, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pachirisu', 'Togepi', 'Gastly', 'Haunter', 'Petilil'],\n headbutt: ['Combee', 'Vespiquen', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Droning Meadow', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 18, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Paras', 'Parasect', 'Gastly', 'Haunter', 'Bidoof', 'Bibarel', 'Yanma'],\n headbutt: ['Combee', 'Vespiquen', 'Pachirisu', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Bolderoll Slope', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 19, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rhyhorn', 'Zubat', 'Zubat', 'Golbat', 'Geodude', 'Graveler'],\n headbutt: ['Burmy (Sand)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Gapejaw Bog', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 20, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bidoof', 'Bibarel', 'Gastly', 'Haunter', 'Croagunk', 'Tangela', 'Budew', 'Roselia', 'Geodude', 'Graveler', 'Ralts', 'Psyduck', 'Hippopotas', 'Tangrowth', 'Hippowdon', 'Carnivine', 'Yanma'],\n water: ['Barboach', 'Whiscash'],\n headbutt: ['Burmy (Sand)', 'Pachirisu'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Ursa\\'s Ring', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 21, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Geodude', 'Graveler', 'Gastly', 'Haunter', 'Teddiursa', 'Ursaring', 'Yanma'],\n headbutt: ['Burmy (Sand)', 'Pachirisu'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n//Basculegion\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Holm of Trials', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 22, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Psyduck', 'Golduck', 'Gastly', 'Haunter', 'Croagunk', 'Toxicroak', 'Petilil', 'Goomy', 'Hisuian Sliggoo', 'Torterra', 'Carnivine'],\n headbutt: ['Burmy (Sand)', 'Pachirisu', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Crossing Slope', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 23, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Glameow', 'Purugly', 'Murkrow', 'Starly', 'Staravia', 'Drifloon', 'Drifblim'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Ginkgo Landing', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 24, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Skorupi', 'Murkrow', 'Spheal', 'Drifloon', 'Buizel', 'Floatzel', 'Walrein', 'Machoke'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Aipom Hill', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 25, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Aipom', 'Ambipom', 'Murkrow', 'Buizel', 'Floatzel', 'Combee', 'Mothim'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Bathers\\' Lagoon', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 26, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Starly', 'Staravia', 'Togepi', 'Drifloon', 'Drifblim', 'Buizel', 'Floatzel', 'Psyduck', 'Golduck', 'Murkrow', 'Beautifly', 'Dustox'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Hideaway Bay', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 27, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Spheal', 'Sealeo', 'Murkrow', 'Happiny', 'Chansey', 'Aipom'],\n water: ['Remoraid'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Deadwood Haunt', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 28, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Duskull', 'Dusclops', 'Dusknoir', 'Chatot', 'Starly', 'Staravia', 'Staraptor', 'Drifloon', 'Drifblim'],\n headbutt: ['Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sand\\'s Reach', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 29, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Starly', 'Staravia', 'Drifloon', 'Drifblim'],\n water: ['Remoraid'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Castaway Shore', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 30, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Machop', 'Machoke', 'Murkrow', 'Skorupi', 'Drapion', 'Octillery'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Windbreak Stand', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 31, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Parasect', 'Stantler', 'Hisuian Growlithe'],\n headbutt: ['Wormadam (Trash)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Spring Path', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 32, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bibarel', 'Toxicroak', 'Mothim'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Islespy Shore', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 33, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Sealeo', 'Walrein', 'Murkrow', 'Empoleon'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Tranquility Cove', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 34, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Shellos (East)', 'Staravia', 'Staraptor', 'Togepi', 'Togetic', 'Drifloon', 'Drifblim'],\n water: ['Mantyke', 'Mantine', 'Basculin (White-Striped)', 'Remoraid', 'Hisuian Qwilfish'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Geodude', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Lunker\\'s Lair', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 35, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n water: ['Tentacool', 'Tentacruel', 'Drifloon', 'Drifblim', 'Hisuian Qwilfish'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Seagrass Haven', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 36, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Shellos (East)', 'Gastrodon (East)'],\n water: ['Finneon', 'Lumineon', 'Drifloon', 'Drifblim', 'Tentacool', 'Tentacruel'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Tombolo Walk', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 37, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Happiny', 'Chansey'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Heavenward Lookout', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 38, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Luxio', 'Luxray', 'Paras', 'Parasect', 'Zubat', 'Golbat', 'Yanma', 'Yanmega'],\n headbutt: ['Burmy (Sand)', 'Wormadam (Sand)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Wayward Wood', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 39, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Stantler', 'Zubat', 'Golbat', 'Heracross', 'Paras', 'Parasect', 'Mothim'],\n water: ['Psyduck', 'Golduck'],\n headbutt: ['Bronzor'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Lonely Spring', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 40, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Carnivine'],\n water: ['Psyduck', 'Golduck'],\n headbutt: ['Cherubi', 'Cherrim (Overcast)', 'Bronzor'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Sonorous Path', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 41, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Shinx', 'Luxio', 'Luxray', 'Teddiursa', 'Ursaring'],\n headbutt: ['Heracross', 'Bronzor'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Celestica Trail', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 42, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Rhyhorn', 'Rhydon', 'Onix', 'Steelix', 'Hippopotas', 'Hippowdon', 'Chimecho', 'Hisuian Sneasel'],\n headbutt: ['Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Fabled Spring', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 43, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Cleffa', 'Clefairy', 'Clefable', 'Budew', 'Roselia'],\n water: ['Basculin (White-Striped)'],\n headbutt: ['Burmy (Sand)', 'Wormadam (Sand)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Bolderoll Ravine', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 44, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Geodude', 'Graveler', 'Golem', 'Gastly', 'Haunter', 'Machop', 'Machoke'],\n headbutt: ['Cherubi', 'Cherrim (Overcast)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Stonetooth Rows', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 45, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Bronzor', 'Bronzong', 'Rotom', 'Misdreavus', 'Mismagius'],\n headbutt: ['Burmy (Sand)', 'Wormadam (Sand)', 'Graveler'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Cloudcap Pass', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 46, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Elekid', 'Electabuzz', 'Electivire', 'Luxio', 'Luxray'],\n headbutt: ['Burmy (Sand)', 'Wormadam (Sand)', 'Nosepass'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Whiteout Valley', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 47, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Aipom', 'Snorunt'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Bonechill Wastes', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 48, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Swinub', 'Buneary', 'Lopunny', 'Gastly', 'Haunter', 'Glalie', 'Froslass', 'Bergmite', 'Snover', 'Abomasnow', 'Drifloon', 'Drifblim', 'Snorunt', 'Aipom', 'Piloswine'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Arena\\'s Approach', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 49, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Machop', 'Machoke', 'Bergmite', 'Gligar', 'Duskull', 'Dusclops', 'Elekid', 'Electabuzz', 'Lickitung', 'Snorlax', 'Lucario', 'Lopunny', 'Aipom', 'Buneary', 'Munchlax', 'Riolu', 'Machamp', 'Piloswine'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Bergmite', 'Snorunt', 'Glalie'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Avalanche Slopes', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 50, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Aipom', 'Ambipom', 'Happiny', 'Chansey', 'Swinub', 'Piloswine', 'Gible', 'Gabite', 'Duskull', 'Dusclops', 'Snorunt', 'Glalie', 'Froslass', 'Lickitung', 'Lickilicky', 'Blissey', 'Garchomp'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Icebound Falls', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 51, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Machop', 'Machoke', 'Riolu', 'Lucario', 'Elekid', 'Electabuzz', 'Crobat'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Snorunt', 'Glalie'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Heart\\'s Crag', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 52, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Ralts', 'Kirlia', 'Drifloon', 'Drifblim', 'Aipom', 'Ambipom', 'Gardevoir', 'Rufflet'],\n water: ['Basculin (White-Striped)'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Snorunt', 'Glalie'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Snowfall Hot Spring', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 53, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Machoke', 'Lickitung', 'Snorlax', 'Lucario', 'Lopunny', 'Machop', 'Aipom', 'Buneary', 'Munchlax', 'Riolu'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Glacier Terrace', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, 54, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Gligar', 'Drifloon', 'Drifblim', 'Aipom', 'Snover', 'Hisuian Sneasel', 'Abomasnow'],\n headbutt: ['Burmy (Trash)', 'Wormadam (Trash)', 'Snorunt', 'Glalie'],\n}), [new _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"]()]));\n/*\nPaldea\n*/\n// I am currently unsure if fixed encounter only pokemon should be included. They have been for now, and are clearly separated.\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('Poco Path', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.paldea, 1, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Lechonk', 'Pawmi', 'Tarountula', 'Hoppip', 'Fletchling', 'Scatterbug', 'Wingull', 'Buizel'],\n water: ['Magikarp', 'Arrokuda'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Azure)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('South Province (Area One)', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.paldea, 2, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Hoppip', 'Paldean Wooper', 'Wingull', 'Ralts', 'Combee', 'Sunkern', 'Buizel', 'Pawmi', 'Gastly', 'Fletchling', 'Scatterbug', 'Spewpa', 'Oricorio (Pom-Pom)', 'Lechonk', 'Tarountula', 'Fidough', 'Happiny', 'Pichu', 'Bonsly', 'Skwovet', 'Shroodle', 'Bounsweet', 'Igglybuff', 'Drowzee', /*Fixed encounter only:*/ 'Wiglett', 'Pachirisu', 'Flamigo', 'Gimmighoul (Chest)'],\n water: ['Magikarp', 'Arrokuda', 'Azurill', 'Chewtle', 'Psyduck', 'Surskit'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_GalarChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('South Province (Area Two)', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.paldea, 3, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Pikachu', 'Jigglypuff', 'Eevee', 'Mareep', 'Hoppip', 'Starly', 'Fletchling', 'Smoliv', 'Fidough', 'Maschiff', 'Happiny', 'Pichu', 'Bonsly', 'Bounsweet', 'Skwovet', 'Shroodle', 'Applin', 'Igglybuff', 'Rockruff', 'Misdreavus', 'Makuhita', 'Skiddo', 'Yungoos', 'Nacli', 'Sunkern', 'Combee', 'Flabébé (Red)', 'Flabébé (Yellow)', 'Flabébé (Orange)', 'Flabébé (Blue)', 'Flabébé (White)', 'Kricketot', 'Diglett', 'Gastly', 'Drowzee', 'Bronzor', 'Tinkatink', 'Squawkabilly (Green)', 'Squawkabilly (Blue)', 'Squawkabilly (Yellow)', 'Squawkabilly (White)', /*Fixed encounter only:*/ 'Staravia', 'Vespiquen', 'Gimmighoul (Chest)'],\n water: ['Psyduck', 'Magikarp', 'Azurill', 'Buizel', 'Chewtle', 'Arrokuda', 'Tadbulb'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_GalarChampion)]));\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].add(new _RegionRoute__WEBPACK_IMPORTED_MODULE_16__[\"default\"]('South Province (Area Three)', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.paldea, 4, new _RoutePokemon__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n land: ['Growlithe', 'Gulpin', 'Spoink', 'Shuppet', 'Shinx', 'Oricorio (Baile)', 'Rookidee', 'Nymble', 'Pawmi', 'Klawf', 'Murkrow', 'Dunsparce', 'Happiny', 'Tandemaus', 'Squawkabilly (Green)', 'Squawkabilly (Blue)', 'Squawkabilly (Yellow)', 'Squawkabilly (White)', 'Drifloon', 'Makuhita', 'Yungoos', 'Skiddo', 'Nacli', 'Gastly', 'Drowzee', 'Bronzor', 'Tinkatink', /*Fixed encounter only:*/ 'Talonflame', 'Staraptor', 'Gimmighoul (Chest)'],\n}), [new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_GalarChampion)]));\n// Halloween Event\n_utilities_SeededRand__WEBPACK_IMPORTED_MODULE_21__[\"default\"].seed(new Date().getFullYear());\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].getRoutesByRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto).forEach((route) => {\n route.pokemon.special.push(new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Spooky Bulbasaur'], new _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Halloween!')), new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Gastly'], new _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Halloween!')));\n});\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].getRoutesByRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto).forEach(route => {\n route.pokemon.special.push(new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Spooky Togepi'], new _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Halloween!')), new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Misdreavus'], new _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Halloween!')));\n});\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].getRoutesByRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn).forEach(route => {\n route.pokemon.special.push(new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Pikachu (Gengar)'], new _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Halloween!')), new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Shuppet'], new _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Halloween!')), new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Duskull'], new _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_20__[\"default\"]('Halloween!')));\n});\n// Christmas Event\n_Routes__WEBPACK_IMPORTED_MODULE_18__[\"default\"].getRoutesByRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto).forEach(route => {\n route.pokemon.special.push(new _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_19__[\"default\"](['Santa Jynx'], new _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_22__[\"default\"]('Christmas_present', 11, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementOption.less),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Santa Jynx 1'),\n new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]('Merry Christmas!'),\n ]),\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_22__[\"default\"]('Christmas_present', 27, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementOption.less),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Santa Jynx 2'),\n new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]('Merry Christmas!'),\n ]),\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_22__[\"default\"]('Christmas_present', 49, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementOption.less),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Santa Jynx 3'),\n new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]('Merry Christmas!'),\n ]),\n new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"]([\n new _requirements_ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_22__[\"default\"]('Christmas_present', 150, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AchievementOption.less),\n new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Santa Jynx 4'),\n new _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_23__[\"default\"]('Merry Christmas!'),\n ]),\n ])));\n});\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/routes/RouteData.ts?"); + +/***/ }), + +/***/ "./src/modules/routes/RoutePokemon.ts": +/*!********************************************!*\ + !*** ./src/modules/routes/RoutePokemon.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RoutePokemon)\n/* harmony export */ });\n/**\n * Datalist of all Pokémon that are encountered on the routes\n * No need to ever use this list, use RouteHelper instead\n * If you ever need to use this list, request changes in RouteHelper instead.\n */\nclass RoutePokemon {\n constructor({ land = [], water = [], headbutt = [], special = [], }) {\n this.land = land;\n this.water = water;\n this.headbutt = headbutt;\n this.special = special;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/routes/RoutePokemon.ts?"); + +/***/ }), + +/***/ "./src/modules/routes/Routes.ts": +/*!**************************************!*\ + !*** ./src/modules/routes/Routes.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Routes)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\nclass Routes {\n static add(route) {\n this.regionRoutes.push(route);\n // Sort the routes so we can normalize the route number\n this.sortRegionRoutes();\n }\n static sortRegionRoutes() {\n this.regionRoutes\n .sort((routeA, routeB) => routeA.orderNumber - routeB.orderNumber)\n .sort((routeA, routeB) => routeA.region - routeB.region);\n }\n static getRoute(region, route) {\n return this.regionRoutes.find((routeData) => routeData.region === region && routeData.number === route);\n }\n static getRoutesByRegion(region) {\n return this.regionRoutes.filter((routeData) => routeData.region === region);\n }\n static getRegionByRoute(route) {\n return this.regionRoutes.find((routeData) => routeData.number === route).region;\n }\n static getName(route, region, alwaysIncludeRegionName = false) {\n var _a, _b;\n const regionName = _GameConstants__WEBPACK_IMPORTED_MODULE_0__.camelCaseToString(_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region[region]);\n let routeName = (_b = (_a = this.regionRoutes.find((routeData) => routeData.region === region && routeData.number === route)) === null || _a === void 0 ? void 0 : _a.routeName) !== null && _b !== void 0 ? _b : 'Unknown Route';\n if (alwaysIncludeRegionName && !routeName.includes(regionName)) {\n routeName += ` in ${regionName}`;\n }\n return routeName;\n }\n static unnormalizeRoute(normalizedRoute) {\n return this.regionRoutes[normalizedRoute - 1].number;\n }\n static normalizedNumber(region, route, skipIgnoredRoutes) {\n var _a;\n if (region === _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Region.none) {\n return route;\n }\n // For some numbers, like pokemon hp, we want to be able to add a new route, without changing the balance of the whole game\n // For those numbers, skipIgnoredRoutes == true. If It's false, filteredRegionRoutes will just be all routes and the if will never happen\n const filteredRegionRoutes = this.regionRoutes.filter((r) => !skipIgnoredRoutes || !r.ignoreRouteInCalculations);\n // If this route is ignored, we will find the index of the route before this, which is not ignored\n // This is done by looping backwards, and checking all routes\n if (skipIgnoredRoutes && ((_a = this.regionRoutes.find((routeData) => routeData.region === region && routeData.number === route)) === null || _a === void 0 ? void 0 : _a.ignoreRouteInCalculations)) {\n for (let i = this.regionRoutes.findIndex((routeData) => routeData.region === region && routeData.number === route) - 1; i >= 0; i--) {\n if (!this.regionRoutes[i].ignoreRouteInCalculations) {\n return i + 1;\n }\n if (i === 0) {\n throw new Error('Not implemented for ignoreRouteInCalculations = true on first region route');\n }\n }\n }\n return filteredRegionRoutes.findIndex((routeData) => routeData.region === region && routeData.number === route) + 1;\n }\n}\nRoutes.regionRoutes = [];\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/routes/Routes.ts?"); + +/***/ }), + +/***/ "./src/modules/routes/SpecialRoutePokemon.ts": +/*!***************************************************!*\ + !*** ./src/modules/routes/SpecialRoutePokemon.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SpecialRoutePokemon)\n/* harmony export */ });\nclass SpecialRoutePokemon {\n constructor(pokemon, req) {\n this.pokemon = pokemon;\n this.req = req;\n }\n isAvailable() {\n return this.req.isCompleted();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/routes/SpecialRoutePokemon.ts?"); + +/***/ }), + +/***/ "./src/modules/routes/index.ts": +/*!*************************************!*\ + !*** ./src/modules/routes/index.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RegionRoute\": () => (/* reexport safe */ _RegionRoute__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"RoutePokemon\": () => (/* reexport safe */ _RoutePokemon__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"Routes\": () => (/* reexport safe */ _Routes__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"SpecialRoutePokemon\": () => (/* reexport safe */ _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_4__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _RouteData__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RouteData */ \"./src/modules/routes/RouteData.ts\");\n/* harmony import */ var _Routes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Routes */ \"./src/modules/routes/Routes.ts\");\n/* harmony import */ var _RegionRoute__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./RegionRoute */ \"./src/modules/routes/RegionRoute.ts\");\n/* harmony import */ var _RoutePokemon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./RoutePokemon */ \"./src/modules/routes/RoutePokemon.ts\");\n/* harmony import */ var _SpecialRoutePokemon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./SpecialRoutePokemon */ \"./src/modules/routes/SpecialRoutePokemon.ts\");\n\n\n\n\n\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/routes/index.ts?"); + +/***/ }), + +/***/ "./src/modules/saveReminder/SaveReminder.ts": +/*!**************************************************!*\ + !*** ./src/modules/saveReminder/SaveReminder.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SaveReminder)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n\n\n\n\nclass SaveReminder {\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor, @typescript-eslint/no-empty-function\n constructor() {\n this.saveKey = 'saveReminder';\n this.defaults = {};\n this.lastDownloaded = ko.observable(0).extend({ numeric: 0 });\n this.lastReminder = ko.observable(0).extend({ numeric: 0 });\n }\n static tick() {\n this.counter = 0;\n // Check if reminders are disabled\n if (!+_settings__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getSetting('saveReminder').value)\n return;\n let timeSinceSaveReminder = App.game.statistics.secondsPlayed() - Math.max(App.game.saveReminder.lastDownloaded(), App.game.saveReminder.lastReminder());\n // Adjust to measure against ms\n timeSinceSaveReminder *= 1000;\n const saveReminderInterval = +_settings__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getSetting('saveReminder').value;\n if (timeSinceSaveReminder >= saveReminderInterval) {\n // Show reminder notification\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_2__[\"default\"].notify({\n title: 'Save Reminder',\n message: `It has been ${_GameConstants__WEBPACK_IMPORTED_MODULE_1__.formatTimeShortWords(saveReminderInterval)} since your last save download. Would you like to download a backup now?\n\n `,\n // Timeout either the reminder interval or 3 hours, whichever is lower\n timeout: Math.min(saveReminderInterval, 3 * _GameConstants__WEBPACK_IMPORTED_MODULE_1__.HOUR),\n });\n App.game.saveReminder.lastReminder(App.game.statistics.secondsPlayed());\n }\n }\n fromJSON(json) {\n if (!json) {\n return;\n }\n if (json.lastDownloaded)\n this.lastDownloaded(json.lastDownloaded);\n if (json.lastReminder)\n this.lastReminder(json.lastReminder);\n }\n toJSON() {\n return {\n lastDownloaded: this.lastDownloaded(),\n lastReminder: this.lastReminder(),\n };\n }\n}\nSaveReminder.counter = 0;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/saveReminder/SaveReminder.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/BooleanSetting.ts": +/*!************************************************!*\ + !*** ./src/modules/settings/BooleanSetting.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BooleanSetting)\n/* harmony export */ });\n/* harmony import */ var _Setting__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Setting */ \"./src/modules/settings/Setting.ts\");\n/* harmony import */ var _SettingOption__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SettingOption */ \"./src/modules/settings/SettingOption.ts\");\n\n\nclass BooleanSetting extends _Setting__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(name, displayName, defaultValue, requirement = undefined, saveAsDefault = true) {\n super(name, displayName, [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('On', true),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('Off', false),\n ], defaultValue, requirement, saveAsDefault);\n }\n set(value) {\n // Enforce boolean values\n super.set(!!value);\n }\n toggle() {\n this.set(!this.value);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/BooleanSetting.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/CssVariableSetting.ts": +/*!****************************************************!*\ + !*** ./src/modules/settings/CssVariableSetting.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CssVariableSetting)\n/* harmony export */ });\n/* harmony import */ var _Setting__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Setting */ \"./src/modules/settings/Setting.ts\");\n\nclass CssVariableSetting extends _Setting__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(name, displayName, options = [], defaultValue = '', requirement = undefined) {\n // Get the default value from our css\n const defValue = defaultValue || getComputedStyle(document.documentElement).getPropertyValue(`--${name}`) || '';\n super(`--${name}`, displayName, options, defValue, requirement);\n }\n set(value) {\n const newVal = value === '#ffffff' ? 'transparent' : value;\n super.set(newVal);\n document.documentElement.style.setProperty(this.name, newVal);\n }\n validValue(value) {\n return CSS.supports('color', value) && super.validValue(value);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/CssVariableSetting.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/HotkeySetting.ts": +/*!***********************************************!*\ + !*** ./src/modules/settings/HotkeySetting.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HotkeySetting)\n/* harmony export */ });\n/* harmony import */ var _Setting__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Setting */ \"./src/modules/settings/Setting.ts\");\n\nclass HotkeySetting extends _Setting__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(name, displayName, defaultValue = '', settings = { prefix: '', suffix: '' }) {\n super(name, displayName, [], defaultValue);\n this.prefix = '';\n this.suffix = '';\n this.prefix = settings.prefix || '';\n this.suffix = settings.suffix || '';\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/HotkeySetting.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/NotificationSetting.ts": +/*!*****************************************************!*\ + !*** ./src/modules/settings/NotificationSetting.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ NotificationSetting)\n/* harmony export */ });\n/* harmony import */ var _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../notifications/NotificationOption */ \"./src/modules/notifications/NotificationOption.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _BooleanSetting__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BooleanSetting */ \"./src/modules/settings/BooleanSetting.ts\");\n\n\n\nclass NotificationSetting {\n constructor(name, defaultDisplayName, defaultValueInGame, lockInGame = false) {\n this.name = name;\n this.defaultDisplayName = defaultDisplayName;\n if (!lockInGame) {\n this.inGameNotification = new _BooleanSetting__WEBPACK_IMPORTED_MODULE_2__[\"default\"](name, defaultDisplayName, defaultValueInGame !== null && defaultValueInGame !== void 0 ? defaultValueInGame : false);\n }\n this.desktopNotification = new _BooleanSetting__WEBPACK_IMPORTED_MODULE_2__[\"default\"](`${name}.desktop`, defaultDisplayName, false);\n this.desktopNotification.observableValue.subscribe((changedTo) => {\n if (changedTo) {\n if (!('Notification' in window)) {\n this.desktopNotification.observableValue(false);\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__[\"default\"].notify({\n title: 'Desktop notifications blocked',\n message: 'Your browser does not support desktop notifications.',\n type: _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning,\n });\n return;\n }\n if (Notification.permission !== 'granted' && Notification.permission !== 'denied') {\n Notification.requestPermission();\n }\n if (Notification.permission !== 'granted') {\n this.desktopNotification.observableValue(false);\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__[\"default\"].notify({\n title: 'Desktop notifications blocked',\n message: 'Your browser is blocking desktop notifications.',\n type: _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"].warning,\n });\n }\n }\n });\n }\n get displayName() {\n if (!this.cachedTranslatedName) {\n this.cachedTranslatedName = App.translation.get(this.name, 'settings', { defaultValue: this.defaultDisplayName });\n }\n return this.cachedTranslatedName();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/NotificationSetting.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/RangeSetting.ts": +/*!**********************************************!*\ + !*** ./src/modules/settings/RangeSetting.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RangeSetting)\n/* harmony export */ });\n/* harmony import */ var _Setting__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Setting */ \"./src/modules/settings/Setting.ts\");\n\nclass RangeSetting extends _Setting__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(name, displayName, minValue, maxValue, step, defaultValue) {\n super(name, displayName, undefined, defaultValue);\n this.minValue = minValue;\n this.maxValue = maxValue;\n this.step = step;\n }\n validValue(value) {\n if (!this.isValueUnlocked(value)) {\n return false;\n }\n return (this.minValue === undefined || value >= this.minValue) && (this.maxValue === undefined || value <= this.maxValue);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/RangeSetting.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/SearchSetting.ts": +/*!***********************************************!*\ + !*** ./src/modules/settings/SearchSetting.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SearchSetting)\n/* harmony export */ });\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _Setting__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Setting */ \"./src/modules/settings/Setting.ts\");\n\n\nclass SearchSetting extends _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(name, displayName, defaultValue, requirement = undefined, saveAsDefault = true) {\n super(name, displayName, [], defaultValue, requirement, saveAsDefault);\n this.regex = ko.pureComputed(() => {\n return _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].safelyBuildRegex(this.observableValue());\n });\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/SearchSetting.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/Setting.ts": +/*!*****************************************!*\ + !*** ./src/modules/settings/Setting.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Setting)\n/* harmony export */ });\n/* harmony import */ var _utilities_GameLoadState__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utilities/GameLoadState */ \"./src/modules/utilities/GameLoadState.ts\");\n\nclass Setting {\n // Leave options array empty to allow all options.\n constructor(name, _defaultDisplayName, _options, defaultValue, requirement = undefined, saveAsDefault = true) {\n this.name = name;\n this._defaultDisplayName = _defaultDisplayName;\n this._options = _options;\n this.defaultValue = defaultValue;\n this.requirement = requirement;\n this.saveAsDefault = saveAsDefault;\n this._observable = ko.observable(this.defaultValue);\n this.set(defaultValue);\n // Redirects writes to the observable to this.set()\n this.observableValue = ko.pureComputed({\n read: this._observable,\n write: (value) => {\n this.set(value);\n },\n owner: this,\n });\n if (typeof this._options === 'function') {\n this.computedOptions = ko.pureComputed(this._options);\n }\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.set(value);\n }\n get options() {\n var _a;\n return ((_a = this.computedOptions) === null || _a === void 0 ? void 0 : _a.call(this)) || this._options;\n }\n set(value) {\n var _a;\n if (this.validValue(value)) {\n this._value = value;\n this._observable(value);\n }\n else {\n let stringified = typeof value === 'string' ? `\\\"${value}\\\"` : value.toString();\n if (stringified == '[object Object]' && ((_a = value.constructor) === null || _a === void 0 ? void 0 : _a.name)) {\n stringified = `${value.constructor.name} object`;\n }\n // eslint-disable-next-line no-console\n console.warn(`${stringified} is not a valid value for setting ${this.name}`);\n }\n }\n validValue(value) {\n if (this.options.length === 0) {\n return true;\n }\n for (let i = 0; i < this.options.length; i += 1) {\n if (this.options[i].value === value) {\n return this.options[i].isUnlocked();\n }\n }\n if (this.computedOptions && !_utilities_GameLoadState__WEBPACK_IMPORTED_MODULE_0__[\"default\"].reachedLoadState(_utilities_GameLoadState__WEBPACK_IMPORTED_MODULE_0__[\"default\"].states.initialized)) {\n // computedOptions might depend on game data that hasn't been loaded yet\n // assume it's fine for now, we'll check it again after initialization\n return true;\n }\n return false;\n }\n isSelected(value) {\n return ko.pureComputed(() => (this._observable() === value), this);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this\n isValueUnlocked(value) {\n return true;\n }\n isUnlocked() {\n return this.requirement ? this.requirement.isCompleted() : true;\n }\n getValidOptions() {\n return this.options.filter((opt) => opt.isUnlocked());\n }\n get displayName() {\n if (!this.cachedTranslatedName) {\n this.cachedTranslatedName = App.translation.get(this.name, 'settings', { defaultValue: this._defaultDisplayName });\n }\n return this.cachedTranslatedName();\n }\n get defaultDisplayName() {\n return this._defaultDisplayName;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/Setting.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/SettingOption.ts": +/*!***********************************************!*\ + !*** ./src/modules/settings/SettingOption.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SettingOption)\n/* harmony export */ });\n/* harmony import */ var _utilities_GameLoadState__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utilities/GameLoadState */ \"./src/modules/utilities/GameLoadState.ts\");\n\nclass SettingOption {\n constructor(text, value, requirement) {\n this.text = text;\n this.value = value;\n this.requirement = requirement;\n }\n isUnlocked() {\n if (!this.requirement) {\n return true;\n }\n if (!_utilities_GameLoadState__WEBPACK_IMPORTED_MODULE_0__[\"default\"].reachedLoadState(_utilities_GameLoadState__WEBPACK_IMPORTED_MODULE_0__[\"default\"].states.initialized)) {\n // Requirements will error, assume the value is fine\n return true;\n }\n return this.requirement.isCompleted();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/SettingOption.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/Settings.ts": +/*!******************************************!*\ + !*** ./src/modules/settings/Settings.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Settings)\n/* harmony export */ });\n/* harmony import */ var _SettingOption__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SettingOption */ \"./src/modules/settings/SettingOption.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\nclass Settings {\n static add(setting) {\n if (!setting.name) {\n // eslint-disable-next-line no-console\n console.warn(`Cannot add settings with no name (display name: '${setting.defaultDisplayName}')`);\n }\n else if (!this.getSetting(setting.name)) {\n this.list.push(setting);\n }\n }\n static setSettingByName(name, value) {\n const setting = this.getSetting(name);\n if (setting) {\n setting.set(value);\n }\n else {\n console.warn(`Setting ${name} does not exist`);\n }\n }\n static getSetting(name) {\n return this.list.find((setting) => setting.name === name) || null;\n }\n static toJSON(saveAsDefaultsOnly = false) {\n const json = {};\n this.list.filter((setting) => !saveAsDefaultsOnly || setting.saveAsDefault).forEach((setting) => {\n json[setting.name] = setting.value;\n });\n return json;\n }\n static fromJSON(dict) {\n var _a;\n (_a = Object.entries(dict || {})) === null || _a === void 0 ? void 0 : _a.forEach(([name, value]) => {\n this.setSettingByName(name, value);\n });\n }\n static checkAndFix() {\n this.list.forEach((setting) => {\n if (!setting.validValue(setting.value)) {\n console.warn(`Resetting ${setting.name} to default from invalid value ${setting.value}`);\n setting.set(setting.defaultValue);\n }\n });\n }\n static enumToSettingOptionArray(obj, filter = () => true, displayNames) {\n return _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].enumStrings(obj).filter(filter).map((val) => new _SettingOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"](displayNames ? displayNames[val] : (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.camelCaseToString)(val), `${obj[val]}`));\n }\n static enumToNumberSettingOptionArray(obj, filter = () => true) {\n return _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].enumStrings(obj).filter(filter).map((val) => new _SettingOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"]((0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.camelCaseToString)(val), obj[val]));\n }\n static selectOptionsToSettingOptions(opts) {\n return opts.map(({ name, value }) => new _SettingOption__WEBPACK_IMPORTED_MODULE_0__[\"default\"]((0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.camelCaseToString)(name), value));\n }\n static saveDefault() {\n localStorage.setItem('settings', JSON.stringify(Settings.toJSON(true)));\n }\n static loadDefault() {\n const settings = JSON.parse(localStorage.getItem('settings') || '{}');\n this.list.forEach((setting) => {\n var _a;\n settings[setting.name] = (_a = settings[setting.name]) !== null && _a !== void 0 ? _a : setting.defaultValue;\n });\n this.fromJSON(settings);\n }\n static resetDefault() {\n localStorage.removeItem('settings');\n }\n}\nSettings.list = [];\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/Settings.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/SortOptions.ts": +/*!*********************************************!*\ + !*** ./src/modules/settings/SortOptions.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SortOptionConfigs\": () => (/* binding */ SortOptionConfigs),\n/* harmony export */ \"SortOptions\": () => (/* binding */ SortOptions)\n/* harmony export */ });\nvar SortOptions;\n(function (SortOptions) {\n SortOptions[SortOptions[\"id\"] = 0] = \"id\";\n SortOptions[SortOptions[\"name\"] = 1] = \"name\";\n SortOptions[SortOptions[\"attack\"] = 2] = \"attack\";\n SortOptions[SortOptions[\"level\"] = 3] = \"level\";\n SortOptions[SortOptions[\"shiny\"] = 4] = \"shiny\";\n SortOptions[SortOptions[\"attackMaxLevel\"] = 5] = \"attackMaxLevel\";\n SortOptions[SortOptions[\"baseAttack\"] = 6] = \"baseAttack\";\n SortOptions[SortOptions[\"attackBonus\"] = 7] = \"attackBonus\";\n SortOptions[SortOptions[\"breedingEfficiency\"] = 8] = \"breedingEfficiency\";\n SortOptions[SortOptions[\"eggCycles\"] = 9] = \"eggCycles\";\n SortOptions[SortOptions[\"timesHatched\"] = 10] = \"timesHatched\";\n SortOptions[SortOptions[\"category\"] = 11] = \"category\";\n SortOptions[SortOptions[\"vitaminsUsed\"] = 12] = \"vitaminsUsed\";\n SortOptions[SortOptions[\"evs\"] = 13] = \"evs\";\n})(SortOptions || (SortOptions = {}));\nconst SortOptionConfigs = {\n [SortOptions.id]: {\n text: 'Pokémon ID #',\n getValue: (p) => p.id,\n },\n [SortOptions.name]: {\n text: 'Name',\n getValue: (p) => p.displayName,\n },\n [SortOptions.attack]: {\n text: 'Attack',\n getValue: (p) => p.attack,\n },\n [SortOptions.level]: {\n text: 'Level',\n getValue: (p) => p.level,\n },\n [SortOptions.shiny]: {\n text: 'Shiny',\n getValue: (p) => p.shiny,\n },\n [SortOptions.attackMaxLevel]: {\n text: 'Attack at Level 100',\n getValue: (p) => p.calculateAttack(true),\n },\n [SortOptions.baseAttack]: {\n text: 'Base Attack',\n getValue: (p) => p.baseAttack,\n },\n [SortOptions.attackBonus]: {\n text: 'Attack Bonus',\n getValue: (p) => p.getBreedingAttackBonus(),\n },\n [SortOptions.breedingEfficiency]: {\n text: 'Breeding Efficiency',\n getValue: (p) => p.breedingEfficiency(),\n },\n [SortOptions.eggCycles]: {\n text: 'Egg Steps',\n getValue: (p) => p.getEggSteps(),\n },\n [SortOptions.timesHatched]: {\n text: 'Times Hatched',\n getValue: (p) => App.game.statistics.pokemonHatched[p.id]() || 0,\n },\n [SortOptions.category]: {\n text: 'Category',\n getValue: (p) => p.getCategorySortValues(),\n invert: true,\n },\n [SortOptions.vitaminsUsed]: {\n text: 'Vitamins Used',\n getValue: (p) => p.totalVitaminsUsed() || 0,\n },\n [SortOptions.evs]: {\n text: 'EVs',\n getValue: (p) => p.evs() || 0,\n },\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/SortOptions.ts?"); + +/***/ }), + +/***/ "./src/modules/settings/index.ts": +/*!***************************************!*\ + !*** ./src/modules/settings/index.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"breedingFilterSettingKeys\": () => (/* binding */ breedingFilterSettingKeys),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"pokedexFilterSettingKeys\": () => (/* binding */ pokedexFilterSettingKeys)\n/* harmony export */ });\n/* harmony import */ var _Settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Settings */ \"./src/modules/settings/Settings.ts\");\n/* harmony import */ var _Setting__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Setting */ \"./src/modules/settings/Setting.ts\");\n/* harmony import */ var _SettingOption__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SettingOption */ \"./src/modules/settings/SettingOption.ts\");\n/* harmony import */ var _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./BooleanSetting */ \"./src/modules/settings/BooleanSetting.ts\");\n/* harmony import */ var _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CssVariableSetting */ \"./src/modules/settings/CssVariableSetting.ts\");\n/* harmony import */ var _SearchSetting__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./SearchSetting */ \"./src/modules/settings/SearchSetting.ts\");\n/* harmony import */ var _RangeSetting__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./RangeSetting */ \"./src/modules/settings/RangeSetting.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _background_DynamicBackground__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../background/DynamicBackground */ \"./src/modules/background/DynamicBackground.ts\");\n/* harmony import */ var _SortOptions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./SortOptions */ \"./src/modules/settings/SortOptions.ts\");\n/* harmony import */ var _achievements_AchievementSortOptions__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../achievements/AchievementSortOptions */ \"./src/modules/achievements/AchievementSortOptions.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./HotkeySetting */ \"./src/modules/settings/HotkeySetting.ts\");\n/* harmony import */ var _translation_Language__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../translation/Language */ \"./src/modules/translation/Language.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../logbook/LogBookTypes */ \"./src/modules/logbook/LogBookTypes.ts\");\n/* harmony import */ var _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../requirements/QuestLineStartedRequirement */ \"./src/modules/requirements/QuestLineStartedRequirement.ts\");\n/* harmony import */ var _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../requirements/ClearDungeonRequirement */ \"./src/modules/requirements/ClearDungeonRequirement.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* harmony import */ var _party_Category__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../party/Category */ \"./src/modules/party/Category.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n/* SettingOptions that can be reused by multiple settings */\n// Region SettingOptions that unlock when the player reaches each region\nconst regionOptionsNoneFirst = _Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_GameConstants__WEBPACK_IMPORTED_MODULE_11__.Region, (r) => r !== 'final')\n .map(o => {\n o.requirement = o.value > _GameConstants__WEBPACK_IMPORTED_MODULE_11__.Region.kanto ? new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_19__[\"default\"](o.value) : undefined;\n return o;\n});\nconst regionOptionsNoneLast = [...regionOptionsNoneFirst.filter(o => o.value !== _GameConstants__WEBPACK_IMPORTED_MODULE_11__.Region.none), regionOptionsNoneFirst.find(o => o.value === _GameConstants__WEBPACK_IMPORTED_MODULE_11__.Region.none)];\n/*\n * THESE SETTINGS SHOULD ALL BE PUT IN SETTINGS MENU\n */\n// Display settings\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('theme', 'Theme', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Cerulean', 'cerulean'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Cosmo', 'cosmo'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Cyborg', 'cyborg'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Darkly', 'darkly'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Flatly', 'flatly'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Journal', 'journal'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Litera', 'litera'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Lumen', 'lumen'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Lux', 'lux'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Materia', 'materia'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Minty', 'minty'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Pulse', 'pulse'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Sandstone', 'sandstone'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Simplex', 'simplex'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Sketchy', 'sketchy'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Slate', 'slate'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Solar', 'solar'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Spacelab', 'spacelab'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Superhero', 'superhero'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('United', 'united'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Yeti (default)', 'yeti'),\n], 'yeti'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingDisplay', 'Breeding progress display', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Percentage', 'percentage'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Step count', 'stepCount'),\n], 'stepCount'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('shopButtons', 'Shop amount buttons', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('+10, +100', 'original'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('+100, +1000', 'bigplus'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('×10, ÷10', 'multiplication'),\n], 'original'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('resetShopAmountOnPurchase', 'Reset buy quantity after each purchase', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('showCurrencyGainedAnimation', 'Show currency gained animation', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('showCurrencyLostAnimation', 'Show currency lost animation', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('hideChallengeRelatedModules', 'Hide challenge related modules', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('disableRightClickMenu', 'Disable the right click menu', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('backgroundImage', 'Background image', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Day', 'background-day'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Night', 'background-night'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Dynamic', 'background-dynamic'),\n], 'background-day'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('eggAnimation', 'Egg Hatching Animation', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('None', 'none'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Almost & fully ready', 'almost'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Fully ready', 'full'),\n], 'full'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('hideHatchery', 'Hide Hatchery Modal', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Never', 'never'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Egg Slots Full', 'egg'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Queue Slots Full', 'queue'),\n], 'queue'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('hideQuestsOnFull', 'Hide Quest Menu on full questslots', true));\n// Settings.add(new BooleanSetting('showFarmModule', 'Show Farm module on main screen', true));\n// Settings.add(new BooleanSetting('showFarmModuleControls', 'Show Farm module extended controls', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('showFarmModule', 'Show Farm module on main screen', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Never', 'never'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Limited Controls', 'limited'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Extended Controls', 'extended'),\n], 'extended'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('farmDisplay', 'Farm timer display', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('To Next Stage', 'nextStage'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Ripe/Death', 'ripeDeath'),\n], 'ripeDeath'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('farmBoostDisplay', 'Include base farm timer during altered berry growth times', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('berryDexMode', 'Berrydex Display', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Classic Mode', 'classic'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Preview Mode', 'preview'),\n], 'classic'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('sizeUnits', 'Berry size units', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Inches', 'inch'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Centimeters', 'cm'),\n], 'cm'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('showUndergroundModule', 'Show Underground module on main screen', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('showUndergroundModuleMineControls', 'Show Underground module mine controls', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('showUndergroundModuleDailyTrades', 'Show Underground module daily trades', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('currencyMainDisplayReduced', 'Shorten currency amount shown on main screen', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('currencyMainDisplayExtended', 'Show Diamonds, Farm Points, Battle Points, and Contest Tokens on main screen', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('confirmLeaveDungeon', 'Confirm before leaving dungeons', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('confirmBeformeMulchingAllPlots', 'Confirm before mulching all plots', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('breedingQueueClearConfirmation', 'Confirm before clearing the hatchery queue', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('confirmChangeHeldItem', 'Confirm before removing or replacing a Held Item', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('showGymGoAnimation', 'Show Gym GO animation', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('gameDisplayStyle', 'Game display style', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Standard (3 columns)', 'standard3'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Full width (3 columns)', 'fullWidth3'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Full width (5 columns)', 'fullWidth5'),\n], 'standard3'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('showMuteButton', 'Show mute/unmute button', true));\n// CSS variable settings\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('locked', 'Locked Location', [], '#000000'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('incomplete', 'Incomplete Area', [], '#ff9100'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('questAtLocation', 'Quest at Location', [], '#55ff00'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('uncaughtPokemon', 'Uncaught Pokemon', [], '#3498db'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('uncaughtShadowPokemon', 'Uncaught Shadow Pokemon', [], '#a11131', new _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('Shadows in the Desert')));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('uncaughtShinyPokemonAndMissingAchievement', 'Uncaught Shiny Pokemon and Missing Achievement', [], '#c939fe'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('uncaughtShinyPokemon', 'Uncaught Shiny Pokemon', [], '#ffee00'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('missingAchievement', 'Missing Achievement', [], '#57e3ff'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('missingResistant', 'Missing Resistant', [], '#ab1707', new _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_18__[\"default\"](1, (0,_GameConstants__WEBPACK_IMPORTED_MODULE_11__.getDungeonIndex)('Distortion World'))));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _CssVariableSetting__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('completed', 'Completed Location', [], '#ffffff'));\n// Other settings\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('disableAutoDownloadBackupSaveOnUpdate', 'Disable automatic backup save downloading when game updates', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('useWebWorkerForGameTicks', 'Make use of web workers for game ticks (more consistent game speed)', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('disableOfflineProgress', 'Disable offline progress', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('saveReminder', 'Save reminder interval (in game time)', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Never', '0'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('1 Hour', (1 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.HOUR).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('3 Hours', (3 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.HOUR).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('6 Hours', (6 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.HOUR).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('12 Hours', (12 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.HOUR).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('24 Hours', (24 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.HOUR).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('2 Days', (2 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.DAY).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('3 Days', (3 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.DAY).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('4 Days', (4 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.DAY).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('5 Days', (5 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.DAY).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('6 Days', (6 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.DAY).toString()),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('7 Days', (7 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.DAY).toString()),\n], (12 * _GameConstants__WEBPACK_IMPORTED_MODULE_11__.HOUR).toString()));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('disableBlinking', 'Disable blinking animation after completing a Region', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('disableAutoSave', 'Disable Auto Save', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingQueueSizeSetting', 'Breeding Queue Size', [], -1, undefined, false));\n// Sound settings\nObject.values(_notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_7__[\"default\"].NotificationSound).forEach((soundGroup) => {\n Object.values(soundGroup).forEach((sound) => {\n _Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"](`sound.${sound.name}`, sound.name, true));\n });\n});\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _RangeSetting__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('sound.volume', 'Volume', 0, 100, 1, 100));\n// Notification settings\nObject.values(_notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_7__[\"default\"].NotificationSetting).forEach((settingsGroup) => {\n Object.values(settingsGroup).forEach((setting) => {\n if (setting.inGameNotification !== undefined) {\n _Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(setting.inGameNotification);\n }\n _Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(setting.desktopNotification);\n });\n});\n/*\n * THESE SETTINGS ARE NOT SUPPOSED TO BE IN THE SETTINGS MENU\n */\n// Underground\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('underground.Reduced_Shards', 'Reduced Shards', true, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('underground.Reduced_Plates', 'Reduced Plates', true, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('underground.Reduced_Evolution_Items', 'Reduced Evolution Items', true, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('underground.Reduced_Fossil_Pieces', 'Reduced Fossil Pieces', true, undefined, false));\n// Party\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('partyHideShinySprites', 'Hide party shiny sprites', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('partyShowPurifiedShadowSprites', 'Show party shadow sprites', false));\n// Party Sorting\nconst partySortSettings = Object.keys(_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs).map((opt) => (new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs[opt].text, parseInt(opt, 10))));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('partySort', 'Sort', partySortSettings, _SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptions.id));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('partySortDirection', 'reverse', false));\n// Hatchery Sorting\nconst hatcherySortSettings = Object.keys(_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs).map((opt) => (new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs[opt].text, parseInt(opt, 10)))).filter((opt) => ![_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptions.level, _SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptions.attack].includes(opt.value));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('hatcherySort', 'Sort', hatcherySortSettings, _SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptions.id));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('hatcherySortDirection', 'reverse', false));\n// Vitamin Sorting\nconst vitaminSortSettings = Object.keys(_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs).map((opt) => (new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs[opt].text, parseInt(opt, 10))));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('vitaminSort', 'Sort', vitaminSortSettings, _SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptions.id, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('vitaminSortDirection', 'reverse', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('vitaminHideMaxedPokemon', 'Hide Pokémon with max vitamin', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('vitaminHideShinyPokemon', 'Hide shiny Pokémon', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _SearchSetting__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('vitaminSearchFilter', 'Search', '', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('vitaminRegionFilter', 'Region', [new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -2), ...regionOptionsNoneLast], -2, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('vitaminTypeFilter', 'Type', [new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -2), ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"], (t) => t !== 'None')], -2, undefined, false));\n// Consumable Sorting\nconst consumableSortSettings = Object.keys(_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs).map((opt) => (new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs[opt].text, parseInt(opt, 10))));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('consumableSort', 'Sort', consumableSortSettings, _SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptions.id, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('consumableSortDirection', 'reverse', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('consumableHideShinyPokemon', 'Hide shiny Pokémon', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _SearchSetting__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('consumableSearchFilter', 'Search', '', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('consumableRegionFilter', 'Region', [new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -2), ...regionOptionsNoneLast], -2, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('consumableTypeFilter', 'Type', [new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -2), ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"], (t) => t !== 'None')], -2, undefined, false));\n// Held Item Sorting\nconst heldItemSortSettings = Object.keys(_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs).map((opt) => (new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptionConfigs[opt].text, parseInt(opt, 10))));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('heldItemSort', 'Sort:', heldItemSortSettings, _SortOptions__WEBPACK_IMPORTED_MODULE_9__.SortOptions.id, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('heldItemSortDirection', 'reverse', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('heldItemDropdownPokemonOrItem', 'Pokémon or Item', [new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Pokémon', 'pokemon'), new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Item', 'item')], 'pokemon', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _SearchSetting__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('heldItemSearchFilter', 'Search', '', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('heldItemRegionFilter', 'Region', [new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -2), ...regionOptionsNoneLast], -2, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('heldItemTypeFilter', 'Type', [new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -2), ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"], (t) => t !== 'None')], -2, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('heldItemHideHoldingPokemon', 'Hide Pokémon holding an item', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('heldItemHideHoldingThisItem', 'Hide Pokémon holding this item', false, undefined, false));\n// Hatchery Filters\nconst breedingFilterSettingKeys = ['breedingNameFilter', 'breedingIDFilter', 'breedingRegionFilter', 'breedingType1Filter', 'breedingType2Filter',\n 'breedingShinyFilter', 'breedingPokerusFilter', 'breedingCategoryFilter', 'breedingUniqueTransformationFilter', 'breedingHideAltFilter'];\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _SearchSetting__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('breedingNameFilter', 'Search', '', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingIDFilter', 'Search ID', [], -1, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingRegionFilter', 'Region(s)', [], (2 << _GameConstants__WEBPACK_IMPORTED_MODULE_11__.MAX_AVAILABLE_REGION) - 1, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingType1Filter', 'Type 1', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', null),\n ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"]).filter((opt) => opt.text !== 'None'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('None', _enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].None),\n], null, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingType2Filter', 'Type 2', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', null),\n ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"]).filter((opt) => opt.text !== 'None'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('None', _enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].None),\n], null, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingShinyFilter', 'Shiny Status', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -1),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Not Shiny', 0),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Shiny', 1),\n], -1, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingPokerusFilter', 'Pokérus Status', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -1),\n ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_GameConstants__WEBPACK_IMPORTED_MODULE_11__.Pokerus, (t) => t !== 'Infected'),\n], -1, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingCategoryFilter', 'Category', () => [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -1),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Categorized', -2),\n ..._party_Category__WEBPACK_IMPORTED_MODULE_20__[\"default\"].categories().map(c => new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"](`Category ${c.id}`, c.id)),\n], -1, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingUniqueTransformationFilter', 'Unique Transformations', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Show All Pokémon', 'all'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Mega Evolution/Primal Reversion Available', 'mega-available'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Unobtained Mega Evolution/Primal Reversion', 'mega-unobtained'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Obtained Mega Evolution/Primal Reversion', 'mega-evolution'),\n], 'all', new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_19__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_11__.Region.kalos), false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('breedingHideAltFilter', 'Hide alternate forms', false));\n// Hatchery display settings\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingDisplayTextSetting', 'Display Value', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Attack', 'attack'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Attack Bonus', 'attackBonus'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Base Attack', 'baseAttack'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Egg Steps', 'eggSteps'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Times Hatched', 'timesHatched'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Breeding Efficiency', 'breedingEfficiency'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Steps per Attack Bonus', 'stepsPerAttack'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Pokémon ID #', 'dexId'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Vitamins used', 'vitamins'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('EVs', 'evs'),\n], 'attack'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('breedingRegionalAttackDebuffSetting', 'Regional Debuff', regionOptionsNoneFirst, _GameConstants__WEBPACK_IMPORTED_MODULE_11__.Region.none, undefined, false));\n// Pokedex Filters\nconst pokedexFilterSettingKeys = ['pokedexNameFilter', 'pokedexIDFilter', 'pokedexRegionFilter', 'pokedexType1Filter', 'pokedexType2Filter', 'pokedexCaughtFilter',\n 'pokedexPokerusFilter', 'pokedexCategoryFilter', 'pokedexUniqueTransformationFilter', 'pokedexHeldItemFilter', 'pokedexHideAltFilter'];\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _SearchSetting__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('pokedexNameFilter', 'Search', '', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokedexIDFilter', 'Search ID', [], -1, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokedexRegionFilter', 'Region', [new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', null), ...regionOptionsNoneLast], null, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokedexType1Filter', 'Type 1', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', null),\n ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"]).filter((opt) => opt.text !== 'None'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('None', _enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].None),\n], null, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokedexType2Filter', 'Type 2', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', null),\n ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"]).filter((opt) => opt.text !== 'None'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('None', _enums_PokemonType__WEBPACK_IMPORTED_MODULE_15__[\"default\"].None),\n], null, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokedexCaughtFilter', 'Caught Status', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', 'all'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Uncaught', 'uncaught'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Caught', 'caught'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Caught Not Shiny', 'caught-not-shiny'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Caught Shiny', 'caught-shiny'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Caught Not Shadow', 'caught-not-shadow', new _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('Shadows in the Desert')),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Caught Shadow', 'caught-shadow', new _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('Shadows in the Desert')),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Caught Purified', 'caught-purified', new _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_17__[\"default\"]('Shadows in the Desert')),\n], 'all', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokedexPokerusFilter', 'Pokérus Status', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -1),\n ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToNumberSettingOptionArray(_GameConstants__WEBPACK_IMPORTED_MODULE_11__.Pokerus, (t) => t !== 'Infected'),\n], -1, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokedexCategoryFilter', 'Category', () => [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', -1),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Categorized', -2),\n ..._party_Category__WEBPACK_IMPORTED_MODULE_20__[\"default\"].categories().map(c => new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"](`Category ${c.id}`, c.id)),\n], -1, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('pokedexUniqueTransformationFilter', 'Unique Transformations', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Show All Pokémon', 'all'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Mega Evolution/Primal Reversion Available', 'mega-available'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Unobtained Mega Evolution/Primal Reversion', 'mega-unobtained'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Obtained Mega Evolution/Primal Reversion', 'mega-evolution'),\n], 'all', new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_19__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_11__.Region.kalos), false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('pokedexHeldItemFilter', 'Rare Held Item', false, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('pokedexHideAltFilter', 'Hide alternate forms', false, undefined, false));\n// Achievement sorting\nconst achievementSortSettings = Object.keys(_achievements_AchievementSortOptions__WEBPACK_IMPORTED_MODULE_10__.AchievementSortOptionConfigs).map((opt) => (new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_achievements_AchievementSortOptions__WEBPACK_IMPORTED_MODULE_10__.AchievementSortOptionConfigs[opt].text, parseInt(opt, 10))));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('achievementSort', 'Sort', achievementSortSettings, _achievements_AchievementSortOptions__WEBPACK_IMPORTED_MODULE_10__.AchievementSortOptions[\"default\"], undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('achievementSortDirection', 'reverse', false, undefined, false));\n// Achievements Filters\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('achievementsPage', 'achievementsPage', [], 0, undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('achievementsStatus', 'achievementsStatus', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', '-2'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Incomplete', '0'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Completed', '1'),\n], '-2', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('achievementsType', 'achievementsType', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', '-2'),\n ..._Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToSettingOptionArray(_GameConstants__WEBPACK_IMPORTED_MODULE_11__.AchievementType, (a) => a !== 'None'),\n], '-2', undefined, false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('achievementsCategory', 'achievementsCategory', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('All', 'all'),\n ..._GameHelper__WEBPACK_IMPORTED_MODULE_14__[\"default\"].enumStrings(_GameConstants__WEBPACK_IMPORTED_MODULE_11__.Region)\n .concat(_GameHelper__WEBPACK_IMPORTED_MODULE_14__[\"default\"].enumStrings(_GameConstants__WEBPACK_IMPORTED_MODULE_11__.ExtraAchievementCategories))\n .filter((r) => r !== 'none' && r !== 'final')\n .map((r) => new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]((0,_GameConstants__WEBPACK_IMPORTED_MODULE_11__.camelCaseToString)(r), r)),\n], 'all', undefined, false));\n// Save menu sorting\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('sort.saveSelector', 'Saves sort order', [], ''));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('saveFilename', 'Save file name', [], '[v{version}] PokeClicker {date}'));\n// Mute toggle\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('sound.muted', 'Mute All Sounds', false));\n// Hotkeys\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.farm', 'Farm', 'F'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.hatchery', 'Hatchery', 'H'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.oakItems', 'Oak Items', 'O'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.underground', 'Underground', 'U'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.shop', 'Poké Mart', 'E'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.dailyQuests', 'Daily Quests', 'Q'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.pokeballSelection', 'Poké Ball Selection', 'P', { suffix: ' + Number' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.farm.toggleShovel', 'Toggle Shovel', 'S'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.farm.togglePlotSafeLock', 'Toggle Plot Lock', 'L', { suffix: ' or Shift + Click' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.underground.hammer', 'Switch to Hammer', 'H'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.underground.chisel', 'Switch to Chisel', 'C'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.underground.survey', 'Survey', 'S'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.underground.bomb', 'Bomb', 'B'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.dungeon.up', 'Move Up', 'W', { prefix: '↑ or ' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.dungeon.left', 'Move Left', 'A', { prefix: '← or ' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.dungeon.down', 'Move Down', 'S', { prefix: '↓ or ' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.dungeon.right', 'Move Right', 'D', { prefix: '→ or ' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.dungeon.interact', 'Interact', 'Space'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.town.start', 'Starts first content in the town', 'Space'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.forceSave', 'Force save game', 'S', { prefix: 'Shift + ' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.downloadSave', 'Download save game', 'D', { prefix: 'Shift + ' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.mute', 'Mute/Unmute Sounds', 'M', { prefix: 'Shift + ' }));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.shop.buy', 'Buy item', 'B'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.shop.max', 'Select max amount', 'M'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.shop.reset', 'Reset amount', 'R'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.shop.increase', 'Increase amount', 'I'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.safari.ball', 'Throw Ball', 'C'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.safari.bait', 'Throw Bait', 'B'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.safari.rock', 'Throw Rock', 'R'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _HotkeySetting__WEBPACK_IMPORTED_MODULE_12__[\"default\"]('hotkey.safari.run', 'Run', 'F'));\n// Discord\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('discord-rp.enabled', 'Discord RP enabled', true));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('discord-rp.line-1', 'Discord line 1 text', [], 'Shinies: {caught_shiny}/{caught} {sparkle}'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('discord-rp.line-2', 'Discord line 2 text', [], 'Total Attack: {attack}'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('discord-rp.timer', 'Show current session play time (max 24 hours)', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('discord-rp.timer-reset', 'Reset timer on area change', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('discord-rp.large-image', 'Discord main image', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('None', ''),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('PokéClicker Logo', 'pokeclickerlogo'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Current Area Environment', 'current-environment'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Cave Environment', 'background-cave'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Cave Gem Environment', 'background-cave-gem'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Fire Environment', 'background-fire'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Forest Environment', 'background-forest'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Grass Environment', 'background-grass'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Desert Environment', 'background-desert'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Graveyard Environment', 'background-graveyard'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Ice Environment', 'background-ice'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Mansion Environment', 'background-mansion'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Power Plant Environment', 'background-power-plant'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Water Environment', 'background-water'),\n], 'pokeclickerlogo'));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('discord-rp.small-image', 'Discord small image', [\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('None', ''),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Money', 'money'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Dungeon Tokens', 'dungeonToken'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Quest Points', 'questPoint'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Farm Points', 'farmPoint'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Diamonds', 'diamond'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Battle Points', 'battlePoint'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Trainer', 'trainer'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Egg', 'egg'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Poké Ball', 'pokeball'),\n new _SettingOption__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Cycle All', 'cycle'),\n], 'cycle'));\n/*\n * SUBSCRIBERS\n */\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getSetting('backgroundImage').observableValue.subscribe((newValue) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n newValue === 'background-dynamic' ? _background_DynamicBackground__WEBPACK_IMPORTED_MODULE_8__[\"default\"].startScene() : _background_DynamicBackground__WEBPACK_IMPORTED_MODULE_8__[\"default\"].stopScene();\n});\n// Translation\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('translation.language', 'Language (beta)', _Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumToSettingOptionArray(_translation_Language__WEBPACK_IMPORTED_MODULE_13__[\"default\"], () => true, _translation_Language__WEBPACK_IMPORTED_MODULE_13__.LanguageNames), _translation_Language__WEBPACK_IMPORTED_MODULE_13__[\"default\"].en));\n// Logs Settings\nObject.keys(_logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_16__.LogBookTypes).forEach((logBookType) => {\n _Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"](`logBook.${logBookType}`, logBookType, true));\n});\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('catchFilters.initialEnabled', 'New Catch Filters initially enabled', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('catchFilters.invertPriorityOrder', 'Catch Filters priority inverted (bottom-to-top)', false));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('breedingEfficiencyAllModifiers', 'Include Attack modifiers (Held Item, EVs, Shadow/Purified) in Attack Bonus and Breeding Efficiency', true));\n// Modal Collapsible Panels\n_GameConstants__WEBPACK_IMPORTED_MODULE_11__.ModalCollapseList.forEach((collapse) => {\n _Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _BooleanSetting__WEBPACK_IMPORTED_MODULE_3__[\"default\"](`modalCollapse.${collapse}`, 'Modal Collapse', true));\n});\n// Resizable modules\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('moduleHeight.pokeballSelector', '', [], 265));\n_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add(new _Setting__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('moduleHeight.pokemonList', '', [], 365));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/settings/index.ts?"); + +/***/ }), + +/***/ "./src/modules/specialEvents/SpecialEvent.ts": +/*!***************************************************!*\ + !*** ./src/modules/specialEvents/SpecialEvent.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SpecialEventStatus\": () => (/* binding */ SpecialEventStatus),\n/* harmony export */ \"default\": () => (/* binding */ SpecialEvent)\n/* harmony export */ });\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../notifications/NotificationOption */ \"./src/modules/notifications/NotificationOption.ts\");\n\n\n\n\nvar SpecialEventStatus;\n(function (SpecialEventStatus) {\n SpecialEventStatus[SpecialEventStatus[\"none\"] = 0] = \"none\";\n SpecialEventStatus[SpecialEventStatus[\"started\"] = 1] = \"started\";\n SpecialEventStatus[SpecialEventStatus[\"ended\"] = 2] = \"ended\";\n})(SpecialEventStatus || (SpecialEventStatus = {}));\nclass SpecialEvent {\n constructor(title, description, startTime, startFunction, endTime, endFunction, hideFromEventCalendar) {\n this.title = title;\n this.description = description;\n this.startTime = startTime;\n this.startFunction = startFunction;\n this.endTime = endTime;\n this.endFunction = endFunction;\n this.status = ko.observable(SpecialEventStatus.none);\n this.hideFromEventCalendar = hideFromEventCalendar;\n this.eventCalendarTimeLeft = ko.observable(0);\n this.eventCalendarTimeLeft.equalityComparer = () => false; // Forcefully update timeLeft\n this.isActive = ko.pureComputed(() => this.status() == SpecialEventStatus.started || this.eventCalendarTimeLeft() > 0);\n }\n initialize() {\n // Start checking when the event should start\n this.checkStart();\n }\n shouldStartNow() {\n // If passed the start time, and not ended already\n return this.timeTillStart() <= 0 && !this.hasEnded();\n }\n timeTillStart() {\n return +this.startTime - Date.now();\n }\n timeTillEnd() {\n return +this.endTime - Date.now();\n }\n hasStarted() {\n return this.status() === SpecialEventStatus.started;\n }\n hasEnded() {\n return this.status() === SpecialEventStatus.ended;\n }\n timeLeft() {\n const eventCalendarTimeLeft = this.eventCalendarTimeLeft();\n if (this.hasStarted()) {\n return (0,_GameConstants__WEBPACK_IMPORTED_MODULE_2__.formatTime)(this.timeTillEnd() / 1000);\n }\n if (eventCalendarTimeLeft > 0) {\n return (0,_GameConstants__WEBPACK_IMPORTED_MODULE_2__.formatTime)(eventCalendarTimeLeft);\n }\n return '';\n }\n tick() {\n this.eventCalendarTimeLeft(Math.max(0, this.eventCalendarTimeLeft() - _GameConstants__WEBPACK_IMPORTED_MODULE_2__.SPECIAL_EVENT_TICK / _GameConstants__WEBPACK_IMPORTED_MODULE_2__.SECOND));\n }\n eventCalendarActivate() {\n if (this.hideFromEventCalendar) {\n return;\n }\n const daysLeft = Math.floor(this.timeTillStart() / 1000 / 60 / 60 / 24);\n const price = 500 * (daysLeft + 1);\n if (price > App.game.wallet.currencies[_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Currency.questPoint]()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_0__[\"default\"].notify({\n title: 'Cannot afford',\n message: `This costs ${price} QP.`,\n type: _notifications_NotificationOption__WEBPACK_IMPORTED_MODULE_3__[\"default\"].danger,\n });\n return;\n }\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_0__[\"default\"].confirm({\n title: 'Do you want to start this event early?',\n message: `Starting '${this.title}' early will cost you ${price.toLocaleString('en-US')} Quest Points for 24 hours of event time.`,\n }).then((result) => {\n if (result) {\n App.game.wallet.loseAmount({ amount: price, currency: _GameConstants__WEBPACK_IMPORTED_MODULE_2__.Currency.questPoint });\n this.eventCalendarTimeLeft(24 * 60 * 60); // Adds a day\n }\n });\n }\n notify(time, timeout, type = _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.info) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_0__[\"default\"].notify({\n title: `[EVENT] ${this.title}`,\n message: `${this.description}\\n\\nStart time: ${this.startTime.toLocaleString()}\\nEnd time: ${this.endTime.toLocaleString()}`,\n type,\n time,\n timeout,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationSetting.General.event_start_end,\n });\n }\n checkStart() {\n // If event already over, move it to next year\n if (this.timeTillEnd() <= 0) {\n this.updateDate();\n return;\n }\n const timeTillEventStart = this.timeTillStart();\n // If more than 1 week, don't notify the player yet\n if (timeTillEventStart > 7 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.DAY) {\n // Check again when 7 days left until event start, or in 7 days\n setTimeout(() => {\n this.checkStart();\n }, Math.min(7 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.DAY, timeTillEventStart - 7 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.DAY));\n // return as this function will be run again after the timeout\n return;\n }\n // If more than 1 day, notify player about the upcoming event\n if (timeTillEventStart > 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.DAY) {\n this.notify(`starts in ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_2__.formatTimeShortWords)(timeTillEventStart)}!`, Math.min(1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR));\n // Check again when less than 6 hours till event start\n setTimeout(() => {\n this.checkStart();\n }, timeTillEventStart - 6 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR);\n // return as this function will be run again after the timeout\n return;\n }\n // If more than 1 hour, notify player about event starting time\n if (timeTillEventStart > 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR) {\n this.notify(`starts in ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_2__.formatTimeShortWords)(timeTillEventStart)}!`, Math.min(timeTillEventStart, 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR));\n }\n // If not started yet, notify player event will start soon\n if (!this.shouldStartNow()) {\n // Notify player when 1 hour left, or now\n const sendNotificationTimeout = Math.max(timeTillEventStart - 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR, 0);\n const notificationTimeout = sendNotificationTimeout ? 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR : timeTillEventStart;\n setTimeout(() => {\n this.notify(`starts in ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_2__.formatTimeShortWords)(notificationTimeout)}!`, notificationTimeout);\n }, sendNotificationTimeout);\n }\n // Start event now, or at start time\n setTimeout(() => {\n this.start();\n }, Math.max(0, timeTillEventStart));\n }\n start() {\n // Update event status\n this.status(SpecialEventStatus.started);\n // We only wan't the notification displayed for 1 hour, or until the event is over\n const timeTillEventEnd = this.timeTillEnd();\n this.notify('on now!', Math.min(1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR, timeTillEventEnd), _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.success);\n this.startFunction();\n // Start checking when the event should be ending\n this.checkEnd();\n }\n checkEnd() {\n const timeTillEventEnd = this.timeTillEnd();\n // If more than 1 day, don't notify the player yet\n if (timeTillEventEnd > 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.DAY) {\n // Check again when 1 day left until event start, or in 1 day (whichever is less)\n setTimeout(() => {\n this.checkEnd();\n }, Math.min(1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.DAY, timeTillEventEnd - 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.DAY));\n // return as this function will be run again after the timeout\n return;\n }\n // If less than 1 day, and not already over, notify the player when it will end\n if (timeTillEventEnd > 0) {\n // Notify player when 1 hour left, or now\n const sendNotificationTimeout = Math.max(timeTillEventEnd - 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR, 0);\n const notificationTimeout = sendNotificationTimeout ? 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR : timeTillEventEnd;\n setTimeout(() => {\n this.notify(`ends in ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_2__.formatTimeShortWords)(notificationTimeout)}!`, notificationTimeout, _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.warning);\n }, sendNotificationTimeout);\n }\n // End event now, or at end time\n setTimeout(() => {\n this.end();\n }, Math.max(0, timeTillEventEnd));\n }\n end() {\n // Update event status\n this.notify('just ended!', 1 * _GameConstants__WEBPACK_IMPORTED_MODULE_2__.HOUR, _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_1__[\"default\"].NotificationOption.danger);\n this.endFunction();\n this.status(SpecialEventStatus.none);\n this.updateDate();\n }\n // Move the event to the next year\n updateDate() {\n this.endTime.setFullYear(this.endTime.getFullYear() + 1);\n this.startTime.setFullYear(this.startTime.getFullYear() + 1);\n this.checkStart();\n }\n fromJSON(json) {\n var _a;\n if (!json) {\n return;\n }\n this.eventCalendarTimeLeft((_a = json.eventCalendarTimeLeft) !== null && _a !== void 0 ? _a : 0);\n }\n toJSON() {\n return {\n name: this.title,\n eventCalendarTimeLeft: this.eventCalendarTimeLeft(),\n };\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/specialEvents/SpecialEvent.ts?"); + +/***/ }), + +/***/ "./src/modules/subRegion/SubRegion.ts": +/*!********************************************!*\ + !*** ./src/modules/subRegion/SubRegion.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SubRegion)\n/* harmony export */ });\nclass SubRegion {\n constructor(name, id, requirement, startTown, startRoute) {\n this.name = name;\n this.id = id;\n this.requirement = requirement;\n this.startTown = startTown;\n this.startRoute = startRoute;\n }\n unlocked() {\n return this.requirement ? this.requirement.isCompleted() : true;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/subRegion/SubRegion.ts?"); + +/***/ }), + +/***/ "./src/modules/subRegion/SubRegions.ts": +/*!*********************************************!*\ + !*** ./src/modules/subRegion/SubRegions.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SubRegions)\n/* harmony export */ });\n/* harmony import */ var _enums_Badges__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/Badges */ \"./src/modules/enums/Badges.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../requirements/GymBadgeRequirement */ \"./src/modules/requirements/GymBadgeRequirement.ts\");\n/* harmony import */ var _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../requirements/TemporaryBattleRequirement */ \"./src/modules/requirements/TemporaryBattleRequirement.ts\");\n/* harmony import */ var _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../requirements/RouteKillRequirement */ \"./src/modules/requirements/RouteKillRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../requirements/QuestLineStepCompletedRequirement */ \"./src/modules/requirements/QuestLineStepCompletedRequirement.ts\");\n/* harmony import */ var _SubRegion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./SubRegion */ \"./src/modules/subRegion/SubRegion.ts\");\n/* harmony import */ var _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../requirements/QuestLineStartedRequirement */ \"./src/modules/requirements/QuestLineStartedRequirement.ts\");\n\n\n\n\n\n\n\n\n\nclass SubRegions {\n static addSubRegion(region, subregion) {\n if (!this.list[region]) {\n this.list[region] = [];\n }\n this.list[region].push(subregion);\n }\n static getSubRegions(region) {\n var _a;\n return (_a = this.list[region]) === null || _a === void 0 ? void 0 : _a.filter((s) => s.unlocked());\n }\n static getSubRegion(region, subregion) {\n return this.list[region].find((s) => s.name === subregion);\n }\n static getSubRegionById(region, subregionID) {\n return this.list[region].find((s) => s.id === subregionID);\n }\n static isSubRegionUnlocked(region, subRegion) {\n return this.getSubRegionById(region, subRegion).unlocked();\n }\n static openModal() {\n $('#SubregionModal').modal('show');\n }\n}\nSubRegions.list = {};\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Kanto', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Kanto, undefined, 'Vermilion City', undefined));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Sevii Islands 123', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii123, new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Volcano), 'One Island', undefined));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kanto, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Sevii Islands 4567', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KantoSubRegions.Sevii4567, new _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_5__[\"default\"]('Celio\\'s Errand', 5), 'Four Island', undefined));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.johto, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Johto', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.JohtoSubRegions.Johto));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Hoenn', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.HoennSubRegions.Hoenn, undefined, 'Slateport City'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hoenn, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Orre', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.HoennSubRegions.Orre, new _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Shadows in the Desert'), 'Outskirt Stand', undefined));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.sinnoh, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Sinnoh', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.SinnohSubRegions.Sinnoh));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.unova, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Unova', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.UnovaSubRegions.Unova));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Kalos', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.KalosSubRegions.Kalos));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Melemele Island', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MelemeleIsland, undefined, 'Hau\\'oli City'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Akala Island', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.AkalaIsland, new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Melemele_Stamp), 'Heahea City'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Ula\\'ula Island', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.UlaulaIsland, new _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('Ultra Wormhole'), 'Malie City'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Poni Island', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.PoniIsland, new _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Emissary of Light'), 'Seafolk Village'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Magikarp Jump', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump, new _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('Magikarp Jump'), 'Hoppy Town'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('South Galar', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.SouthGalar, undefined, 'Hulbury'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('North Galar', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.NorthGalar, new _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](10, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, 22), 'Hammerlocke'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Isle of Armor', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.IsleofArmor, new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_GalarChampion), 'Armor Station'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Crown Tundra', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GalarSubRegions.CrownTundra, new _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_enums_Badges__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Elite_GalarChampion), 'Crown Tundra Station'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.hisui, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Hisui', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.HisuiSubRegions.Hisui, undefined, 'Prelude Beach'));\nSubRegions.addSubRegion(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.paldea, new _SubRegion__WEBPACK_IMPORTED_MODULE_6__[\"default\"]('Paldea', _GameConstants__WEBPACK_IMPORTED_MODULE_1__.PaldeaSubRegions.Paldea));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/subRegion/SubRegions.ts?"); + +/***/ }), + +/***/ "./src/modules/temporaryWindowInjection.ts": +/*!*************************************************!*\ + !*** ./src/modules/temporaryWindowInjection.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _SaveSelector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SaveSelector */ \"./src/modules/SaveSelector.ts\");\n/* harmony import */ var _profile_Profile__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./profile/Profile */ \"./src/modules/profile/Profile.ts\");\n/* harmony import */ var _DataStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DataStore */ \"./src/modules/DataStore/index.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _enums_AuraType__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./enums/AuraType */ \"./src/modules/enums/AuraType.ts\");\n/* harmony import */ var _enums_Badges__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./enums/Badges */ \"./src/modules/enums/Badges.ts\");\n/* harmony import */ var _enums_BerryColor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./enums/BerryColor */ \"./src/modules/enums/BerryColor.ts\");\n/* harmony import */ var _enums_BerryFirmness__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./enums/BerryFirmness */ \"./src/modules/enums/BerryFirmness.ts\");\n/* harmony import */ var _enums_BerryType__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./enums/BerryType */ \"./src/modules/enums/BerryType.ts\");\n/* harmony import */ var _enums_SizeUnits__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./enums/SizeUnits */ \"./src/modules/enums/SizeUnits.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _enums_CaughtStatus__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./enums/CaughtStatus */ \"./src/modules/enums/CaughtStatus.ts\");\n/* harmony import */ var _enums_EvolutionType__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./enums/EvolutionType */ \"./src/modules/enums/EvolutionType.ts\");\n/* harmony import */ var _enums_FarmNotificationType__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./enums/FarmNotificationType */ \"./src/modules/enums/FarmNotificationType.ts\");\n/* harmony import */ var _enums_FlavorType__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./enums/FlavorType */ \"./src/modules/enums/FlavorType.ts\");\n/* harmony import */ var _enums_ItemType__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./enums/ItemType */ \"./src/modules/enums/ItemType.ts\");\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _enums_MulchType__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./enums/MulchType */ \"./src/modules/enums/MulchType.ts\");\n/* harmony import */ var _enums_PlotStage__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./enums/PlotStage */ \"./src/modules/enums/PlotStage.ts\");\n/* harmony import */ var _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./quests/QuestLineState */ \"./src/modules/quests/QuestLineState.ts\");\n/* harmony import */ var _enums_WeatherForecastStatus__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./enums/WeatherForecastStatus */ \"./src/modules/enums/WeatherForecastStatus.ts\");\n/* harmony import */ var _enums_SafariEnvironments__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./enums/SafariEnvironments */ \"./src/modules/enums/SafariEnvironments.ts\");\n/* harmony import */ var _enums_FarmingTool__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./enums/FarmingTool */ \"./src/modules/enums/FarmingTool.ts\");\n/* harmony import */ var _settings_BooleanSetting__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./settings/BooleanSetting */ \"./src/modules/settings/BooleanSetting.ts\");\n/* harmony import */ var _settings_RangeSetting__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./settings/RangeSetting */ \"./src/modules/settings/RangeSetting.ts\");\n/* harmony import */ var _settings_Setting__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./settings/Setting */ \"./src/modules/settings/Setting.ts\");\n/* harmony import */ var _settings_SettingOption__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./settings/SettingOption */ \"./src/modules/settings/SettingOption.ts\");\n/* harmony import */ var _weather_WeatherType__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./weather/WeatherType */ \"./src/modules/weather/WeatherType.ts\");\n/* harmony import */ var _weather_Weather__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./weather/Weather */ \"./src/modules/weather/Weather.ts\");\n/* harmony import */ var _weather_WeatherApp__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./weather/WeatherApp */ \"./src/modules/weather/WeatherApp.ts\");\n/* harmony import */ var _weather_RegionalForecast__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./weather/RegionalForecast */ \"./src/modules/weather/RegionalForecast.ts\");\n/* harmony import */ var _weather_WeatherForecast__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./weather/WeatherForecast */ \"./src/modules/weather/WeatherForecast.ts\");\n/* harmony import */ var _dayCycle_DayCycle__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./dayCycle/DayCycle */ \"./src/modules/dayCycle/DayCycle.ts\");\n/* harmony import */ var _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./dayCycle/DayCyclePart */ \"./src/modules/dayCycle/DayCyclePart.ts\");\n/* harmony import */ var _requirements_DayCyclePartRequirement__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./requirements/DayCyclePartRequirement */ \"./src/modules/requirements/DayCyclePartRequirement.ts\");\n/* harmony import */ var _moonCycle_MoonCycle__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./moonCycle/MoonCycle */ \"./src/modules/moonCycle/MoonCycle.ts\");\n/* harmony import */ var _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./moonCycle/MoonCyclePhase */ \"./src/modules/moonCycle/MoonCyclePhase.ts\");\n/* harmony import */ var _requirements_MoonCyclePhaseRequirement__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./requirements/MoonCyclePhaseRequirement */ \"./src/modules/requirements/MoonCyclePhaseRequirement.ts\");\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n/* harmony import */ var _utilities_SeededDateRand__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./utilities/SeededDateRand */ \"./src/modules/utilities/SeededDateRand.ts\");\n/* harmony import */ var _utilities_Rand__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./utilities/Rand */ \"./src/modules/utilities/Rand.ts\");\n/* harmony import */ var _settings_index__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./settings/index */ \"./src/modules/settings/index.ts\");\n/* harmony import */ var _settings_SortOptions__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./settings/SortOptions */ \"./src/modules/settings/SortOptions.ts\");\n/* harmony import */ var _achievements_AchievementSortOptions__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./achievements/AchievementSortOptions */ \"./src/modules/achievements/AchievementSortOptions.ts\");\n/* harmony import */ var _achievements_AchievementCategory__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./achievements/AchievementCategory */ \"./src/modules/achievements/AchievementCategory.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _logbook_LogBook__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./logbook/LogBook */ \"./src/modules/logbook/LogBook.ts\");\n/* harmony import */ var _logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./logbook/LogBookTypes */ \"./src/modules/logbook/LogBookTypes.ts\");\n/* harmony import */ var _changelog_ChangelogItems__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./changelog/ChangelogItems */ \"./src/modules/changelog/ChangelogItems.ts\");\n/* harmony import */ var _codes_RedeemableCode__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./codes/RedeemableCode */ \"./src/modules/codes/RedeemableCode.ts\");\n/* harmony import */ var _codes_RedeemableCodes__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./codes/RedeemableCodes */ \"./src/modules/codes/RedeemableCodes.ts\");\n/* harmony import */ var _codes_RedeemableCodeController__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./codes/RedeemableCodeController */ \"./src/modules/codes/RedeemableCodeController.ts\");\n/* harmony import */ var _breeding_EggType__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./breeding/EggType */ \"./src/modules/breeding/EggType.ts\");\n/* harmony import */ var _multiplier_Multiplier__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./multiplier/Multiplier */ \"./src/modules/multiplier/Multiplier.ts\");\n/* harmony import */ var _multiplier_MultiplierType__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./multiplier/MultiplierType */ \"./src/modules/multiplier/MultiplierType.ts\");\n/* harmony import */ var _specialEvents_SpecialEvent__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./specialEvents/SpecialEvent */ \"./src/modules/specialEvents/SpecialEvent.ts\");\n/* harmony import */ var _challenges_Challenges__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./challenges/Challenges */ \"./src/modules/challenges/Challenges.ts\");\n/* harmony import */ var _party_LevelType__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./party/LevelType */ \"./src/modules/party/LevelType.ts\");\n/* harmony import */ var _wallet_inject__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./wallet/inject */ \"./src/modules/wallet/inject.ts\");\n/* harmony import */ var _utilities_GenericProxy__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./utilities/GenericProxy */ \"./src/modules/utilities/GenericProxy.ts\");\n/* harmony import */ var _Credits__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./Credits */ \"./src/modules/Credits.ts\");\n/* harmony import */ var _utilities_DisplayObservables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./utilities/DisplayObservables */ \"./src/modules/utilities/DisplayObservables.ts\");\n/* harmony import */ var _party_Category__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./party/Category */ \"./src/modules/party/Category.ts\");\n/* harmony import */ var _utilities_Information__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./utilities/Information */ \"./src/modules/utilities/Information.ts\");\n/* harmony import */ var _types_TypeHelper__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./types/TypeHelper */ \"./src/modules/types/TypeHelper.ts\");\n/* harmony import */ var _upgrades_Upgrade__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./upgrades/Upgrade */ \"./src/modules/upgrades/Upgrade.ts\");\n/* harmony import */ var _upgrades_ExpUpgrade__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./upgrades/ExpUpgrade */ \"./src/modules/upgrades/ExpUpgrade.ts\");\n/* harmony import */ var _enums_OakItemType__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./enums/OakItemType */ \"./src/modules/enums/OakItemType.ts\");\n/* harmony import */ var _oakItems_OakItem__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./oakItems/OakItem */ \"./src/modules/oakItems/OakItem.ts\");\n/* harmony import */ var _oakItems_OakItems__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./oakItems/OakItems */ \"./src/modules/oakItems/OakItems.ts\");\n/* harmony import */ var _oakItems_BoughtOakItem__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./oakItems/BoughtOakItem */ \"./src/modules/oakItems/BoughtOakItem.ts\");\n/* harmony import */ var _oakItems_OakItemController__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./oakItems/OakItemController */ \"./src/modules/oakItems/OakItemController.ts\");\n/* harmony import */ var _oakItems_OakItemLoadout__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./oakItems/OakItemLoadout */ \"./src/modules/oakItems/OakItemLoadout.ts\");\n/* harmony import */ var _oakItems_OakItemLoadouts__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./oakItems/OakItemLoadouts */ \"./src/modules/oakItems/OakItemLoadouts.ts\");\n/* harmony import */ var _routes__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./routes */ \"./src/modules/routes/index.ts\");\n/* harmony import */ var _subRegion_SubRegion__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./subRegion/SubRegion */ \"./src/modules/subRegion/SubRegion.ts\");\n/* harmony import */ var _subRegion_SubRegions__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./subRegion/SubRegions */ \"./src/modules/subRegion/SubRegions.ts\");\n/* harmony import */ var _requirements_Requirement__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./requirements/Requirement */ \"./src/modules/requirements/Requirement.ts\");\n/* harmony import */ var _requirements_AchievementRequirement__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./requirements/AchievementRequirement */ \"./src/modules/requirements/AchievementRequirement.ts\");\n/* harmony import */ var _requirements_NullRequirement__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./requirements/NullRequirement */ \"./src/modules/requirements/NullRequirement.ts\");\n/* harmony import */ var _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./requirements/MultiRequirement */ \"./src/modules/requirements/MultiRequirement.ts\");\n/* harmony import */ var _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./requirements/OneFromManyRequirement */ \"./src/modules/requirements/OneFromManyRequirement.ts\");\n/* harmony import */ var _requirements_AttackRequirement__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./requirements/AttackRequirement */ \"./src/modules/requirements/AttackRequirement.ts\");\n/* harmony import */ var _requirements_BattleFrontierHighestStageRequirement__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./requirements/BattleFrontierHighestStageRequirement */ \"./src/modules/requirements/BattleFrontierHighestStageRequirement.ts\");\n/* harmony import */ var _requirements_BattleFrontierTotalStageRequirement__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./requirements/BattleFrontierTotalStageRequirement */ \"./src/modules/requirements/BattleFrontierTotalStageRequirement.ts\");\n/* harmony import */ var _requirements_BerriesUnlockedRequirement__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./requirements/BerriesUnlockedRequirement */ \"./src/modules/requirements/BerriesUnlockedRequirement.ts\");\n/* harmony import */ var _requirements_CapturedRequirement__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./requirements/CapturedRequirement */ \"./src/modules/requirements/CapturedRequirement.ts\");\n/* harmony import */ var _requirements_CaughtPokemonRequirement__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(/*! ./requirements/CaughtPokemonRequirement */ \"./src/modules/requirements/CaughtPokemonRequirement.ts\");\n/* harmony import */ var _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(/*! ./requirements/ClearDungeonRequirement */ \"./src/modules/requirements/ClearDungeonRequirement.ts\");\n/* harmony import */ var _requirements_ClearGymRequirement__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(/*! ./requirements/ClearGymRequirement */ \"./src/modules/requirements/ClearGymRequirement.ts\");\n/* harmony import */ var _requirements_ClickRequirement__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(/*! ./requirements/ClickRequirement */ \"./src/modules/requirements/ClickRequirement.ts\");\n/* harmony import */ var _requirements_CustomRequirement__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(/*! ./requirements/CustomRequirement */ \"./src/modules/requirements/CustomRequirement.ts\");\n/* harmony import */ var _requirements_DefeatedRequirement__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(/*! ./requirements/DefeatedRequirement */ \"./src/modules/requirements/DefeatedRequirement.ts\");\n/* harmony import */ var _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(/*! ./requirements/DevelopmentRequirement */ \"./src/modules/requirements/DevelopmentRequirement.ts\");\n/* harmony import */ var _requirements_DiamondRequirement__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(/*! ./requirements/DiamondRequirement */ \"./src/modules/requirements/DiamondRequirement.ts\");\n/* harmony import */ var _requirements_FarmHandRequirement__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(/*! ./requirements/FarmHandRequirement */ \"./src/modules/requirements/FarmHandRequirement.ts\");\n/* harmony import */ var _requirements_FarmPlotsUnlockedRequirement__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(/*! ./requirements/FarmPlotsUnlockedRequirement */ \"./src/modules/requirements/FarmPlotsUnlockedRequirement.ts\");\n/* harmony import */ var _requirements_FarmPointsRequirement__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(/*! ./requirements/FarmPointsRequirement */ \"./src/modules/requirements/FarmPointsRequirement.ts\");\n/* harmony import */ var _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(/*! ./requirements/GymBadgeRequirement */ \"./src/modules/requirements/GymBadgeRequirement.ts\");\n/* harmony import */ var _requirements_HatchRequirement__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(/*! ./requirements/HatchRequirement */ \"./src/modules/requirements/HatchRequirement.ts\");\n/* harmony import */ var _requirements_HatcheryHelperRequirement__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(/*! ./requirements/HatcheryHelperRequirement */ \"./src/modules/requirements/HatcheryHelperRequirement.ts\");\n/* harmony import */ var _requirements_InRegionRequirement__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(/*! ./requirements/InRegionRequirement */ \"./src/modules/requirements/InRegionRequirement.ts\");\n/* harmony import */ var _requirements_MoneyRequirement__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(/*! ./requirements/MoneyRequirement */ \"./src/modules/requirements/MoneyRequirement.ts\");\n/* harmony import */ var _requirements_MaxLevelOakItemRequirement__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(/*! ./requirements/MaxLevelOakItemRequirement */ \"./src/modules/requirements/MaxLevelOakItemRequirement.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(/*! ./requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* harmony import */ var _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(/*! ./requirements/ObtainedPokemonRequirement */ \"./src/modules/requirements/ObtainedPokemonRequirement.ts\");\n/* harmony import */ var _requirements_PokeballRequirement__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(/*! ./requirements/PokeballRequirement */ \"./src/modules/requirements/PokeballRequirement.ts\");\n/* harmony import */ var _requirements_PokemonLevelRequirement__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(/*! ./requirements/PokemonLevelRequirement */ \"./src/modules/requirements/PokemonLevelRequirement.ts\");\n/* harmony import */ var _requirements_PokerusStatusRequirement__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(/*! ./requirements/PokerusStatusRequirement */ \"./src/modules/requirements/PokerusStatusRequirement.ts\");\n/* harmony import */ var _requirements_VitaminObtainRequirement__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(/*! ./requirements/VitaminObtainRequirement */ \"./src/modules/requirements/VitaminObtainRequirement.ts\");\n/* harmony import */ var _requirements_QuestRequirement__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(/*! ./requirements/QuestRequirement */ \"./src/modules/requirements/QuestRequirement.ts\");\n/* harmony import */ var _requirements_QuestLevelRequirement__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(/*! ./requirements/QuestLevelRequirement */ \"./src/modules/requirements/QuestLevelRequirement.ts\");\n/* harmony import */ var _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(/*! ./requirements/RouteKillRequirement */ \"./src/modules/requirements/RouteKillRequirement.ts\");\n/* harmony import */ var _requirements_SeededDateRequirement__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(/*! ./requirements/SeededDateRequirement */ \"./src/modules/requirements/SeededDateRequirement.ts\");\n/* harmony import */ var _requirements_SeededDateSelectNRequirement__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(/*! ./requirements/SeededDateSelectNRequirement */ \"./src/modules/requirements/SeededDateSelectNRequirement.ts\");\n/* harmony import */ var _requirements_PokemonDefeatedSelectNRequirement__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(/*! ./requirements/PokemonDefeatedSelectNRequirement */ \"./src/modules/requirements/PokemonDefeatedSelectNRequirement.ts\");\n/* harmony import */ var _requirements_SeviiCaughtRequirement__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(/*! ./requirements/SeviiCaughtRequirement */ \"./src/modules/requirements/SeviiCaughtRequirement.ts\");\n/* harmony import */ var _requirements_ShinyPokemonRequirement__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(/*! ./requirements/ShinyPokemonRequirement */ \"./src/modules/requirements/ShinyPokemonRequirement.ts\");\n/* harmony import */ var _requirements_ShadowPokemonRequirement__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(/*! ./requirements/ShadowPokemonRequirement */ \"./src/modules/requirements/ShadowPokemonRequirement.ts\");\n/* harmony import */ var _requirements_StatisticRequirement__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(/*! ./requirements/StatisticRequirement */ \"./src/modules/requirements/StatisticRequirement.ts\");\n/* harmony import */ var _requirements_SubregionRequirement__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(/*! ./requirements/SubregionRequirement */ \"./src/modules/requirements/SubregionRequirement.ts\");\n/* harmony import */ var _requirements_StarterRequirement__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(/*! ./requirements/StarterRequirement */ \"./src/modules/requirements/StarterRequirement.ts\");\n/* harmony import */ var _requirements_TokenRequirement__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(/*! ./requirements/TokenRequirement */ \"./src/modules/requirements/TokenRequirement.ts\");\n/* harmony import */ var _requirements_TotalMegaStoneObtainedRequirement__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(/*! ./requirements/TotalMegaStoneObtainedRequirement */ \"./src/modules/requirements/TotalMegaStoneObtainedRequirement.ts\");\n/* harmony import */ var _requirements_UndergroundItemsFoundRequirement__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(/*! ./requirements/UndergroundItemsFoundRequirement */ \"./src/modules/requirements/UndergroundItemsFoundRequirement.ts\");\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(/*! ./enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _underground_UndergroundItem__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(/*! ./underground/UndergroundItem */ \"./src/modules/underground/UndergroundItem.ts\");\n/* harmony import */ var _underground_UndergroundItems__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(/*! ./underground/UndergroundItems */ \"./src/modules/underground/UndergroundItems.ts\");\n/* harmony import */ var _requirements_UndergroundLayersMinedRequirement__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(/*! ./requirements/UndergroundLayersMinedRequirement */ \"./src/modules/requirements/UndergroundLayersMinedRequirement.ts\");\n/* harmony import */ var _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(/*! ./requirements/WeatherRequirement */ \"./src/modules/requirements/WeatherRequirement.ts\");\n/* harmony import */ var _requirements_MegaEvolveRequirement__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(/*! ./requirements/MegaEvolveRequirement */ \"./src/modules/requirements/MegaEvolveRequirement.ts\");\n/* harmony import */ var _Sortable__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(/*! ./Sortable */ \"./src/modules/Sortable.ts\");\n/* harmony import */ var _keyItems_KeyItemController__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(/*! ./keyItems/KeyItemController */ \"./src/modules/keyItems/KeyItemController.ts\");\n/* harmony import */ var _keyItems_KeyItem__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(/*! ./keyItems/KeyItem */ \"./src/modules/keyItems/KeyItem.ts\");\n/* harmony import */ var _keyItems_KeyItems__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(/*! ./keyItems/KeyItems */ \"./src/modules/keyItems/KeyItems.ts\");\n/* harmony import */ var _achievements_Achievement__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(/*! ./achievements/Achievement */ \"./src/modules/achievements/Achievement.ts\");\n/* harmony import */ var _gems_Gems__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(/*! ./gems/Gems */ \"./src/modules/gems/Gems.ts\");\n/* harmony import */ var _gems_GemDeals__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(/*! ./gems/GemDeals */ \"./src/modules/gems/GemDeals.ts\");\n/* harmony import */ var _gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(/*! ./gems/FluteEffectRunner */ \"./src/modules/gems/FluteEffectRunner.ts\");\n/* harmony import */ var _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(/*! ./requirements/QuestLineCompletedRequirement */ \"./src/modules/requirements/QuestLineCompletedRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(/*! ./requirements/QuestLineStepCompletedRequirement */ \"./src/modules/requirements/QuestLineStepCompletedRequirement.ts\");\n/* harmony import */ var _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(/*! ./requirements/QuestLineStartedRequirement */ \"./src/modules/requirements/QuestLineStartedRequirement.ts\");\n/* harmony import */ var _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(/*! ./requirements/TemporaryBattleRequirement */ \"./src/modules/requirements/TemporaryBattleRequirement.ts\");\n/* harmony import */ var _translation_Translation__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(/*! ./translation/Translation */ \"./src/modules/translation/Translation.ts\");\n/* harmony import */ var _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(/*! ./requirements/DayOfWeekRequirement */ \"./src/modules/requirements/DayOfWeekRequirement.ts\");\n/* harmony import */ var _saveReminder_SaveReminder__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(/*! ./saveReminder/SaveReminder */ \"./src/modules/saveReminder/SaveReminder.ts\");\n/* harmony import */ var _requirements_ClientRequirement__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(/*! ./requirements/ClientRequirement */ \"./src/modules/requirements/ClientRequirement.ts\");\n/* harmony import */ var _requirements_ContestWonRequirement__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(/*! ./requirements/ContestWonRequirement */ \"./src/modules/requirements/ContestWonRequirement.ts\");\n/* harmony import */ var _utilities_LazyLoader__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(/*! ./utilities/LazyLoader */ \"./src/modules/utilities/LazyLoader.ts\");\n/* harmony import */ var _pokemons_evolutions_Base__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(/*! ./pokemons/evolutions/Base */ \"./src/modules/pokemons/evolutions/Base.ts\");\n/* harmony import */ var _pokemons_evolutions_Methods__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(/*! ./pokemons/evolutions/Methods */ \"./src/modules/pokemons/evolutions/Methods.ts\");\n/* harmony import */ var _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(/*! ./pokemons/PokemonList */ \"./src/modules/pokemons/PokemonList.ts\");\n/* harmony import */ var _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(/*! ./pokemons/PokemonHelper */ \"./src/modules/pokemons/PokemonHelper.ts\");\n/* harmony import */ var _logbook_helpers__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(/*! ./logbook/helpers */ \"./src/modules/logbook/helpers.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(/*! ./items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _items_Item__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(/*! ./items/Item */ \"./src/modules/items/Item.ts\");\n/* harmony import */ var _items_types__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(/*! ./items/types */ \"./src/modules/items/types.ts\");\n/* harmony import */ var _items_EnergyRestore__WEBPACK_IMPORTED_MODULE_159__ = __webpack_require__(/*! ./items/EnergyRestore */ \"./src/modules/items/EnergyRestore.ts\");\n/* harmony import */ var _effectEngine_effectEngineRunner__WEBPACK_IMPORTED_MODULE_160__ = __webpack_require__(/*! ./effectEngine/effectEngineRunner */ \"./src/modules/effectEngine/effectEngineRunner.ts\");\n/* harmony import */ var _items_ItemHandler__WEBPACK_IMPORTED_MODULE_161__ = __webpack_require__(/*! ./items/ItemHandler */ \"./src/modules/items/ItemHandler.ts\");\n/* harmony import */ var _items_CaughtIndicatingItem__WEBPACK_IMPORTED_MODULE_162__ = __webpack_require__(/*! ./items/CaughtIndicatingItem */ \"./src/modules/items/CaughtIndicatingItem.ts\");\n/* harmony import */ var _items_PokemonItem__WEBPACK_IMPORTED_MODULE_163__ = __webpack_require__(/*! ./items/PokemonItem */ \"./src/modules/items/PokemonItem.ts\");\n/* harmony import */ var _items_EggItem__WEBPACK_IMPORTED_MODULE_164__ = __webpack_require__(/*! ./items/EggItem */ \"./src/modules/items/EggItem.ts\");\n/* harmony import */ var _items_MegaStoneItem__WEBPACK_IMPORTED_MODULE_165__ = __webpack_require__(/*! ./items/MegaStoneItem */ \"./src/modules/items/MegaStoneItem.ts\");\n/* harmony import */ var _items_PokeballItem__WEBPACK_IMPORTED_MODULE_166__ = __webpack_require__(/*! ./items/PokeballItem */ \"./src/modules/items/PokeballItem.ts\");\n/* harmony import */ var _items_QuestItem__WEBPACK_IMPORTED_MODULE_167__ = __webpack_require__(/*! ./items/QuestItem */ \"./src/modules/items/QuestItem.ts\");\n/* harmony import */ var _items_Vitamin__WEBPACK_IMPORTED_MODULE_168__ = __webpack_require__(/*! ./items/Vitamin */ \"./src/modules/items/Vitamin.ts\");\n/* harmony import */ var _items_VitaminController__WEBPACK_IMPORTED_MODULE_169__ = __webpack_require__(/*! ./items/VitaminController */ \"./src/modules/items/VitaminController.ts\");\n/* harmony import */ var _items_Consumable__WEBPACK_IMPORTED_MODULE_170__ = __webpack_require__(/*! ./items/Consumable */ \"./src/modules/items/Consumable.ts\");\n/* harmony import */ var _items_ConsumableController__WEBPACK_IMPORTED_MODULE_171__ = __webpack_require__(/*! ./items/ConsumableController */ \"./src/modules/items/ConsumableController.ts\");\n/* harmony import */ var _pokemons_RoamingPokemonList__WEBPACK_IMPORTED_MODULE_172__ = __webpack_require__(/*! ./pokemons/RoamingPokemonList */ \"./src/modules/pokemons/RoamingPokemonList.ts\");\n/* harmony import */ var _pokemons_DataPokemon__WEBPACK_IMPORTED_MODULE_173__ = __webpack_require__(/*! ./pokemons/DataPokemon */ \"./src/modules/pokemons/DataPokemon.ts\");\n/* harmony import */ var _pokemons_RoamingPokemon__WEBPACK_IMPORTED_MODULE_174__ = __webpack_require__(/*! ./pokemons/RoamingPokemon */ \"./src/modules/pokemons/RoamingPokemon.ts\");\n/* harmony import */ var _underground_UndergroundMegaStoneItem__WEBPACK_IMPORTED_MODULE_175__ = __webpack_require__(/*! ./underground/UndergroundMegaStoneItem */ \"./src/modules/underground/UndergroundMegaStoneItem.ts\");\n/* harmony import */ var _pokeballs_PokeballFilter__WEBPACK_IMPORTED_MODULE_176__ = __webpack_require__(/*! ./pokeballs/PokeballFilter */ \"./src/modules/pokeballs/PokeballFilter.ts\");\n/* harmony import */ var _pokeballs_PokeballFilters__WEBPACK_IMPORTED_MODULE_177__ = __webpack_require__(/*! ./pokeballs/PokeballFilters */ \"./src/modules/pokeballs/PokeballFilters.ts\");\n/* harmony import */ var _utilities_TextMerger__WEBPACK_IMPORTED_MODULE_178__ = __webpack_require__(/*! ./utilities/TextMerger */ \"./src/modules/utilities/TextMerger.ts\");\n/* harmony import */ var _pokeballs_PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_179__ = __webpack_require__(/*! ./pokeballs/PokeballFilterOptions */ \"./src/modules/pokeballs/PokeballFilterOptions.ts\");\n/* harmony import */ var _underground_DailyDeal__WEBPACK_IMPORTED_MODULE_180__ = __webpack_require__(/*! ./underground/DailyDeal */ \"./src/modules/underground/DailyDeal.ts\");\n/* harmony import */ var _underground_Mine__WEBPACK_IMPORTED_MODULE_181__ = __webpack_require__(/*! ./underground/Mine */ \"./src/modules/underground/Mine.ts\");\n/* harmony import */ var _underground_ShardDeal__WEBPACK_IMPORTED_MODULE_182__ = __webpack_require__(/*! ./underground/ShardDeal */ \"./src/modules/underground/ShardDeal.ts\");\n/* harmony import */ var _underground_Underground__WEBPACK_IMPORTED_MODULE_183__ = __webpack_require__(/*! ./underground/Underground */ \"./src/modules/underground/Underground.ts\");\n/* harmony import */ var _underground_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_184__ = __webpack_require__(/*! ./underground/UndergroundUpgrade */ \"./src/modules/underground/UndergroundUpgrade.ts\");\n/* harmony import */ var _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_185__ = __webpack_require__(/*! ./requirements/SpecialEventRandomRequirement */ \"./src/modules/requirements/SpecialEventRandomRequirement.ts\");\n/* harmony import */ var _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_186__ = __webpack_require__(/*! ./requirements/SpecialEventRequirement */ \"./src/modules/requirements/SpecialEventRequirement.ts\");\n/* harmony import */ var _enums_EncounterType__WEBPACK_IMPORTED_MODULE_187__ = __webpack_require__(/*! ./enums/EncounterType */ \"./src/modules/enums/EncounterType.ts\");\n/* harmony import */ var _requirements_SafariBaitRequirement__WEBPACK_IMPORTED_MODULE_188__ = __webpack_require__(/*! ./requirements/SafariBaitRequirement */ \"./src/modules/requirements/SafariBaitRequirement.ts\");\n/* harmony import */ var _requirements_SafariStepsRequirement__WEBPACK_IMPORTED_MODULE_189__ = __webpack_require__(/*! ./requirements/SafariStepsRequirement */ \"./src/modules/requirements/SafariStepsRequirement.ts\");\n/* harmony import */ var _requirements_SafariRocksRequirement__WEBPACK_IMPORTED_MODULE_190__ = __webpack_require__(/*! ./requirements/SafariRocksRequirement */ \"./src/modules/requirements/SafariRocksRequirement.ts\");\n/* harmony import */ var _requirements_SafariItemsRequirement__WEBPACK_IMPORTED_MODULE_191__ = __webpack_require__(/*! ./requirements/SafariItemsRequirement */ \"./src/modules/requirements/SafariItemsRequirement.ts\");\n/* harmony import */ var _requirements_SafariCatchRequirement__WEBPACK_IMPORTED_MODULE_192__ = __webpack_require__(/*! ./requirements/SafariCatchRequirement */ \"./src/modules/requirements/SafariCatchRequirement.ts\");\n/* harmony import */ var _requirements_ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_193__ = __webpack_require__(/*! ./requirements/ItemOwnedRequirement */ \"./src/modules/requirements/ItemOwnedRequirement.ts\");\n/* harmony import */ var _requirements_UniqueItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_194__ = __webpack_require__(/*! ./requirements/UniqueItemOwnedRequirement */ \"./src/modules/requirements/UniqueItemOwnedRequirement.ts\");\n/* harmony import */ var _items_ChristmasPresent__WEBPACK_IMPORTED_MODULE_195__ = __webpack_require__(/*! ./items/ChristmasPresent */ \"./src/modules/items/ChristmasPresent.ts\");\n/* harmony import */ var _types_DamageCalculator__WEBPACK_IMPORTED_MODULE_196__ = __webpack_require__(/*! ./types/DamageCalculator */ \"./src/modules/types/DamageCalculator.ts\");\n/* harmony import */ var _utilities_GameLoadState__WEBPACK_IMPORTED_MODULE_197__ = __webpack_require__(/*! ./utilities/GameLoadState */ \"./src/modules/utilities/GameLoadState.ts\");\n// TODO: Remove temporary code after all code in ../scripts has been ported.\n// This is only here so that the code in ../scripts can use the new functionality\n\n\n\n\n\n// enums\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// end enums\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nObject.assign(window, Object.assign(Object.assign(Object.assign(Object.assign({ SaveSelector: _SaveSelector__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n Profile: _profile_Profile__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n GameConstants: _GameConstants__WEBPACK_IMPORTED_MODULE_3__,\n GameHelper: _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n DataStore: _DataStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"], BadgeCase: _DataStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].badge, Statistics: _DataStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].statistics, AuraType: _enums_AuraType__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n BadgeEnums: _enums_Badges__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n BerryColor: _enums_BerryColor__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n BerryFirmness: _enums_BerryFirmness__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n BerryType: _enums_BerryType__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n SizeUnits: _enums_SizeUnits__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n PokemonType: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n CaughtStatus: _enums_CaughtStatus__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n EvolutionType: _enums_EvolutionType__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n FarmNotificationType: _enums_FarmNotificationType__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n FlavorType: _enums_FlavorType__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n ItemType: _enums_ItemType__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n KeyItemType: _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n MulchType: _enums_MulchType__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n PlotStage: _enums_PlotStage__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n QuestLineState: _quests_QuestLineState__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n WeatherForecastStatus: _enums_WeatherForecastStatus__WEBPACK_IMPORTED_MODULE_21__[\"default\"],\n SafariEnvironments: _enums_SafariEnvironments__WEBPACK_IMPORTED_MODULE_22__[\"default\"],\n FarmingTool: _enums_FarmingTool__WEBPACK_IMPORTED_MODULE_23__[\"default\"],\n BooleanSetting: _settings_BooleanSetting__WEBPACK_IMPORTED_MODULE_24__[\"default\"],\n RangeSetting: _settings_RangeSetting__WEBPACK_IMPORTED_MODULE_25__[\"default\"],\n Setting: _settings_Setting__WEBPACK_IMPORTED_MODULE_26__[\"default\"],\n SettingOption: _settings_SettingOption__WEBPACK_IMPORTED_MODULE_27__[\"default\"],\n WeatherType: _weather_WeatherType__WEBPACK_IMPORTED_MODULE_28__[\"default\"],\n Weather: _weather_Weather__WEBPACK_IMPORTED_MODULE_29__[\"default\"],\n WeatherApp: _weather_WeatherApp__WEBPACK_IMPORTED_MODULE_30__[\"default\"],\n RegionalForecast: _weather_RegionalForecast__WEBPACK_IMPORTED_MODULE_31__[\"default\"],\n WeatherForecast: _weather_WeatherForecast__WEBPACK_IMPORTED_MODULE_32__[\"default\"],\n DayCycle: _dayCycle_DayCycle__WEBPACK_IMPORTED_MODULE_33__[\"default\"],\n DayCyclePart: _dayCycle_DayCyclePart__WEBPACK_IMPORTED_MODULE_34__[\"default\"],\n DayCyclePartRequirement: _requirements_DayCyclePartRequirement__WEBPACK_IMPORTED_MODULE_35__[\"default\"],\n MoonCycle: _moonCycle_MoonCycle__WEBPACK_IMPORTED_MODULE_36__[\"default\"],\n MoonCyclePhase: _moonCycle_MoonCyclePhase__WEBPACK_IMPORTED_MODULE_37__[\"default\"],\n MoonCyclePhaseRequirement: _requirements_MoonCyclePhaseRequirement__WEBPACK_IMPORTED_MODULE_38__[\"default\"],\n SeededRand: _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_39__[\"default\"],\n SeededDateRand: _utilities_SeededDateRand__WEBPACK_IMPORTED_MODULE_40__[\"default\"],\n Rand: _utilities_Rand__WEBPACK_IMPORTED_MODULE_41__[\"default\"],\n Settings: _settings_index__WEBPACK_IMPORTED_MODULE_42__[\"default\"],\n breedingFilterSettingKeys: _settings_index__WEBPACK_IMPORTED_MODULE_42__.breedingFilterSettingKeys,\n pokedexFilterSettingKeys: _settings_index__WEBPACK_IMPORTED_MODULE_42__.pokedexFilterSettingKeys,\n NotificationConstants: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_46__[\"default\"],\n Notifier: _notifications_Notifier__WEBPACK_IMPORTED_MODULE_47__[\"default\"],\n SortOptionConfigs: _settings_SortOptions__WEBPACK_IMPORTED_MODULE_43__.SortOptionConfigs,\n SortOptions: _settings_SortOptions__WEBPACK_IMPORTED_MODULE_43__.SortOptions,\n AchievementSortOptionConfigs: _achievements_AchievementSortOptions__WEBPACK_IMPORTED_MODULE_44__.AchievementSortOptionConfigs,\n AchievementSortOptions: _achievements_AchievementSortOptions__WEBPACK_IMPORTED_MODULE_44__.AchievementSortOptions,\n AchievementCategory: _achievements_AchievementCategory__WEBPACK_IMPORTED_MODULE_45__[\"default\"],\n LogBook: _logbook_LogBook__WEBPACK_IMPORTED_MODULE_48__[\"default\"],\n LogBookTypes: _logbook_LogBookTypes__WEBPACK_IMPORTED_MODULE_49__.LogBookTypes,\n createLogContent: _logbook_helpers__WEBPACK_IMPORTED_MODULE_155__.createLogContent,\n ChangelogItems: _changelog_ChangelogItems__WEBPACK_IMPORTED_MODULE_50__[\"default\"],\n RedeemableCode: _codes_RedeemableCode__WEBPACK_IMPORTED_MODULE_51__[\"default\"],\n RedeemableCodes: _codes_RedeemableCodes__WEBPACK_IMPORTED_MODULE_52__[\"default\"],\n RedeemableCodeController: _codes_RedeemableCodeController__WEBPACK_IMPORTED_MODULE_53__[\"default\"],\n EggType: _breeding_EggType__WEBPACK_IMPORTED_MODULE_54__[\"default\"],\n Multiplier: _multiplier_Multiplier__WEBPACK_IMPORTED_MODULE_55__[\"default\"],\n MultiplierType: _multiplier_MultiplierType__WEBPACK_IMPORTED_MODULE_56__[\"default\"],\n SpecialEvent: _specialEvents_SpecialEvent__WEBPACK_IMPORTED_MODULE_57__[\"default\"],\n Challenges: _challenges_Challenges__WEBPACK_IMPORTED_MODULE_58__[\"default\"],\n LevelType: _party_LevelType__WEBPACK_IMPORTED_MODULE_59__[\"default\"],\n levelRequirements: _party_LevelType__WEBPACK_IMPORTED_MODULE_59__.levelRequirements }, _wallet_inject__WEBPACK_IMPORTED_MODULE_60__[\"default\"]), { GenericProxy: _utilities_GenericProxy__WEBPACK_IMPORTED_MODULE_61__[\"default\"],\n SpriteCredits: _Credits__WEBPACK_IMPORTED_MODULE_62__.SpriteCredits,\n CodeCredits: _Credits__WEBPACK_IMPORTED_MODULE_62__.CodeCredits,\n DisplayObservables: _utilities_DisplayObservables__WEBPACK_IMPORTED_MODULE_63__,\n PokemonCategories: _party_Category__WEBPACK_IMPORTED_MODULE_64__[\"default\"],\n Information: _utilities_Information__WEBPACK_IMPORTED_MODULE_65__[\"default\"],\n TypeHelper: _types_TypeHelper__WEBPACK_IMPORTED_MODULE_66__[\"default\"],\n Upgrade: _upgrades_Upgrade__WEBPACK_IMPORTED_MODULE_67__[\"default\"],\n ExpUpgrade: _upgrades_ExpUpgrade__WEBPACK_IMPORTED_MODULE_68__[\"default\"],\n OakItemType: _enums_OakItemType__WEBPACK_IMPORTED_MODULE_69__[\"default\"],\n OakItem: _oakItems_OakItem__WEBPACK_IMPORTED_MODULE_70__[\"default\"],\n OakItems: _oakItems_OakItems__WEBPACK_IMPORTED_MODULE_71__[\"default\"],\n BoughtOakItem: _oakItems_BoughtOakItem__WEBPACK_IMPORTED_MODULE_72__[\"default\"],\n OakItemController: _oakItems_OakItemController__WEBPACK_IMPORTED_MODULE_73__[\"default\"],\n OakItemLoadout: _oakItems_OakItemLoadout__WEBPACK_IMPORTED_MODULE_74__[\"default\"],\n OakItemLoadouts: _oakItems_OakItemLoadouts__WEBPACK_IMPORTED_MODULE_75__[\"default\"],\n SpecialRoutePokemon: _routes__WEBPACK_IMPORTED_MODULE_76__.SpecialRoutePokemon,\n RoutePokemon: _routes__WEBPACK_IMPORTED_MODULE_76__.RoutePokemon,\n RegionRoute: _routes__WEBPACK_IMPORTED_MODULE_76__.RegionRoute,\n Routes: _routes__WEBPACK_IMPORTED_MODULE_76__.Routes,\n SubRegion: _subRegion_SubRegion__WEBPACK_IMPORTED_MODULE_77__[\"default\"],\n SubRegions: _subRegion_SubRegions__WEBPACK_IMPORTED_MODULE_78__[\"default\"],\n Requirement: _requirements_Requirement__WEBPACK_IMPORTED_MODULE_79__[\"default\"],\n AchievementRequirement: _requirements_AchievementRequirement__WEBPACK_IMPORTED_MODULE_80__[\"default\"],\n NullRequirement: _requirements_NullRequirement__WEBPACK_IMPORTED_MODULE_81__[\"default\"],\n MultiRequirement: _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_82__[\"default\"],\n OneFromManyRequirement: _requirements_OneFromManyRequirement__WEBPACK_IMPORTED_MODULE_83__[\"default\"],\n AttackRequirement: _requirements_AttackRequirement__WEBPACK_IMPORTED_MODULE_84__[\"default\"],\n BattleFrontierHighestStageRequirement: _requirements_BattleFrontierHighestStageRequirement__WEBPACK_IMPORTED_MODULE_85__[\"default\"],\n BattleFrontierTotalStageRequirement: _requirements_BattleFrontierTotalStageRequirement__WEBPACK_IMPORTED_MODULE_86__[\"default\"],\n BerriesUnlockedRequirement: _requirements_BerriesUnlockedRequirement__WEBPACK_IMPORTED_MODULE_87__[\"default\"],\n CapturedRequirement: _requirements_CapturedRequirement__WEBPACK_IMPORTED_MODULE_88__[\"default\"],\n CaughtPokemonRequirement: _requirements_CaughtPokemonRequirement__WEBPACK_IMPORTED_MODULE_89__[\"default\"],\n ClearDungeonRequirement: _requirements_ClearDungeonRequirement__WEBPACK_IMPORTED_MODULE_90__[\"default\"],\n ClearGymRequirement: _requirements_ClearGymRequirement__WEBPACK_IMPORTED_MODULE_91__[\"default\"],\n ClickRequirement: _requirements_ClickRequirement__WEBPACK_IMPORTED_MODULE_92__[\"default\"],\n CustomRequirement: _requirements_CustomRequirement__WEBPACK_IMPORTED_MODULE_93__[\"default\"],\n DefeatedRequirement: _requirements_DefeatedRequirement__WEBPACK_IMPORTED_MODULE_94__[\"default\"],\n DevelopmentRequirement: _requirements_DevelopmentRequirement__WEBPACK_IMPORTED_MODULE_95__[\"default\"],\n DiamondRequirement: _requirements_DiamondRequirement__WEBPACK_IMPORTED_MODULE_96__[\"default\"],\n FarmHandRequirement: _requirements_FarmHandRequirement__WEBPACK_IMPORTED_MODULE_97__[\"default\"],\n FarmPlotsUnlockedRequirement: _requirements_FarmPlotsUnlockedRequirement__WEBPACK_IMPORTED_MODULE_98__[\"default\"],\n FarmPointsRequirement: _requirements_FarmPointsRequirement__WEBPACK_IMPORTED_MODULE_99__[\"default\"],\n GymBadgeRequirement: _requirements_GymBadgeRequirement__WEBPACK_IMPORTED_MODULE_100__[\"default\"],\n HatchRequirement: _requirements_HatchRequirement__WEBPACK_IMPORTED_MODULE_101__[\"default\"],\n HatcheryHelperRequirement: _requirements_HatcheryHelperRequirement__WEBPACK_IMPORTED_MODULE_102__[\"default\"],\n InRegionRequirement: _requirements_InRegionRequirement__WEBPACK_IMPORTED_MODULE_103__[\"default\"],\n MoneyRequirement: _requirements_MoneyRequirement__WEBPACK_IMPORTED_MODULE_104__[\"default\"],\n MaxLevelOakItemRequirement: _requirements_MaxLevelOakItemRequirement__WEBPACK_IMPORTED_MODULE_105__[\"default\"],\n MaxRegionRequirement: _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_106__[\"default\"],\n ObtainedPokemonRequirement: _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_107__[\"default\"],\n PokeballRequirement: _requirements_PokeballRequirement__WEBPACK_IMPORTED_MODULE_108__[\"default\"],\n PokemonLevelRequirement: _requirements_PokemonLevelRequirement__WEBPACK_IMPORTED_MODULE_109__[\"default\"],\n PokerusStatusRequirement: _requirements_PokerusStatusRequirement__WEBPACK_IMPORTED_MODULE_110__[\"default\"],\n VitaminObtainRequirement: _requirements_VitaminObtainRequirement__WEBPACK_IMPORTED_MODULE_111__[\"default\"],\n QuestRequirement: _requirements_QuestRequirement__WEBPACK_IMPORTED_MODULE_112__[\"default\"],\n QuestLevelRequirement: _requirements_QuestLevelRequirement__WEBPACK_IMPORTED_MODULE_113__[\"default\"],\n RouteKillRequirement: _requirements_RouteKillRequirement__WEBPACK_IMPORTED_MODULE_114__[\"default\"],\n SeededDateRequirement: _requirements_SeededDateRequirement__WEBPACK_IMPORTED_MODULE_115__[\"default\"],\n SeededDateSelectNRequirement: _requirements_SeededDateSelectNRequirement__WEBPACK_IMPORTED_MODULE_116__[\"default\"],\n PokemonDefeatedSelectNRequirement: _requirements_PokemonDefeatedSelectNRequirement__WEBPACK_IMPORTED_MODULE_117__[\"default\"],\n SeviiCaughtRequirement: _requirements_SeviiCaughtRequirement__WEBPACK_IMPORTED_MODULE_118__[\"default\"],\n ShinyPokemonRequirement: _requirements_ShinyPokemonRequirement__WEBPACK_IMPORTED_MODULE_119__[\"default\"],\n ShadowPokemonRequirement: _requirements_ShadowPokemonRequirement__WEBPACK_IMPORTED_MODULE_120__[\"default\"],\n StatisticRequirement: _requirements_StatisticRequirement__WEBPACK_IMPORTED_MODULE_121__[\"default\"],\n SubregionRequirement: _requirements_SubregionRequirement__WEBPACK_IMPORTED_MODULE_122__[\"default\"],\n StarterRequirement: _requirements_StarterRequirement__WEBPACK_IMPORTED_MODULE_123__[\"default\"],\n TokenRequirement: _requirements_TokenRequirement__WEBPACK_IMPORTED_MODULE_124__[\"default\"],\n TotalMegaStoneObtainedRequirement: _requirements_TotalMegaStoneObtainedRequirement__WEBPACK_IMPORTED_MODULE_125__[\"default\"],\n UndergroundItemsFoundRequirement: _requirements_UndergroundItemsFoundRequirement__WEBPACK_IMPORTED_MODULE_126__[\"default\"],\n UndergroundItemValueType: _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_127__[\"default\"],\n UndergroundItem: _underground_UndergroundItem__WEBPACK_IMPORTED_MODULE_128__[\"default\"],\n UndergroundItems: _underground_UndergroundItems__WEBPACK_IMPORTED_MODULE_129__[\"default\"],\n UndergroundLayersMinedRequirement: _requirements_UndergroundLayersMinedRequirement__WEBPACK_IMPORTED_MODULE_130__[\"default\"],\n WeatherRequirement: _requirements_WeatherRequirement__WEBPACK_IMPORTED_MODULE_131__[\"default\"],\n MegaEvolveRequirement: _requirements_MegaEvolveRequirement__WEBPACK_IMPORTED_MODULE_132__[\"default\"],\n SortModules: _Sortable__WEBPACK_IMPORTED_MODULE_133__.SortModules,\n SortSaves: _Sortable__WEBPACK_IMPORTED_MODULE_133__.SortSaves,\n KeyItemController: _keyItems_KeyItemController__WEBPACK_IMPORTED_MODULE_134__[\"default\"],\n KeyItem: _keyItems_KeyItem__WEBPACK_IMPORTED_MODULE_135__[\"default\"],\n KeyItems: _keyItems_KeyItems__WEBPACK_IMPORTED_MODULE_136__[\"default\"],\n Achievement: _achievements_Achievement__WEBPACK_IMPORTED_MODULE_137__[\"default\"],\n Gems: _gems_Gems__WEBPACK_IMPORTED_MODULE_138__[\"default\"],\n GemDeals: _gems_GemDeals__WEBPACK_IMPORTED_MODULE_139__[\"default\"],\n FluteEffectRunner: _gems_FluteEffectRunner__WEBPACK_IMPORTED_MODULE_140__[\"default\"],\n QuestLineCompletedRequirement: _requirements_QuestLineCompletedRequirement__WEBPACK_IMPORTED_MODULE_141__[\"default\"],\n QuestLineStepCompletedRequirement: _requirements_QuestLineStepCompletedRequirement__WEBPACK_IMPORTED_MODULE_142__[\"default\"],\n QuestLineStartedRequirement: _requirements_QuestLineStartedRequirement__WEBPACK_IMPORTED_MODULE_143__[\"default\"],\n TemporaryBattleRequirement: _requirements_TemporaryBattleRequirement__WEBPACK_IMPORTED_MODULE_144__[\"default\"],\n SpecialEventRandomRequirement: _requirements_SpecialEventRandomRequirement__WEBPACK_IMPORTED_MODULE_185__[\"default\"],\n SpecialEventRequirement: _requirements_SpecialEventRequirement__WEBPACK_IMPORTED_MODULE_186__[\"default\"],\n Translate: _translation_Translation__WEBPACK_IMPORTED_MODULE_145__[\"default\"],\n DayOfWeekRequirement: _requirements_DayOfWeekRequirement__WEBPACK_IMPORTED_MODULE_146__[\"default\"],\n SaveReminder: _saveReminder_SaveReminder__WEBPACK_IMPORTED_MODULE_147__[\"default\"],\n ClientRequirement: _requirements_ClientRequirement__WEBPACK_IMPORTED_MODULE_148__[\"default\"],\n ContestWonRequirement: _requirements_ContestWonRequirement__WEBPACK_IMPORTED_MODULE_149__[\"default\"],\n lazyLoad: _utilities_LazyLoader__WEBPACK_IMPORTED_MODULE_150__.lazyLoad,\n lazyLoadCallback: _utilities_LazyLoader__WEBPACK_IMPORTED_MODULE_150__.lazyLoadCallback,\n LevelEvolution: _pokemons_evolutions_Base__WEBPACK_IMPORTED_MODULE_151__.LevelEvolution,\n StoneEvolution: _pokemons_evolutions_Base__WEBPACK_IMPORTED_MODULE_151__.StoneEvolution,\n EvoTrigger: _pokemons_evolutions_Base__WEBPACK_IMPORTED_MODULE_151__.EvoTrigger,\n beforeEvolve: _pokemons_evolutions_Base__WEBPACK_IMPORTED_MODULE_151__.beforeEvolve }), _pokemons_evolutions_Methods__WEBPACK_IMPORTED_MODULE_152__), { pokemonList: _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_153__.pokemonList,\n pokemonMap: _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_153__.pokemonMap,\n pokemonBabyPrevolutionMap: _pokemons_PokemonList__WEBPACK_IMPORTED_MODULE_153__.pokemonBabyPrevolutionMap,\n PokemonHelper: _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_154__,\n ItemList: _items_ItemList__WEBPACK_IMPORTED_MODULE_156__.ItemList,\n Item: _items_Item__WEBPACK_IMPORTED_MODULE_157__[\"default\"],\n MultiplierDecreaser: _items_types__WEBPACK_IMPORTED_MODULE_158__.MultiplierDecreaser,\n EnergyRestore: _items_EnergyRestore__WEBPACK_IMPORTED_MODULE_159__[\"default\"],\n EffectEngineRunner: _effectEngine_effectEngineRunner__WEBPACK_IMPORTED_MODULE_160__[\"default\"],\n ItemHandler: _items_ItemHandler__WEBPACK_IMPORTED_MODULE_161__[\"default\"],\n CaughtIndicatingItem: _items_CaughtIndicatingItem__WEBPACK_IMPORTED_MODULE_162__[\"default\"],\n PokemonItem: _items_PokemonItem__WEBPACK_IMPORTED_MODULE_163__[\"default\"],\n EggItem: _items_EggItem__WEBPACK_IMPORTED_MODULE_164__[\"default\"],\n MegaStoneItem: _items_MegaStoneItem__WEBPACK_IMPORTED_MODULE_165__[\"default\"],\n PokeballItem: _items_PokeballItem__WEBPACK_IMPORTED_MODULE_166__[\"default\"],\n QuestItem: _items_QuestItem__WEBPACK_IMPORTED_MODULE_167__[\"default\"],\n Vitamin: _items_Vitamin__WEBPACK_IMPORTED_MODULE_168__[\"default\"],\n VitaminController: _items_VitaminController__WEBPACK_IMPORTED_MODULE_169__[\"default\"],\n Consumable: _items_Consumable__WEBPACK_IMPORTED_MODULE_170__[\"default\"],\n ConsumableController: _items_ConsumableController__WEBPACK_IMPORTED_MODULE_171__[\"default\"],\n RoamingPokemonList: _pokemons_RoamingPokemonList__WEBPACK_IMPORTED_MODULE_172__[\"default\"],\n DataPokemon: _pokemons_DataPokemon__WEBPACK_IMPORTED_MODULE_173__[\"default\"],\n RoamingPokemon: _pokemons_RoamingPokemon__WEBPACK_IMPORTED_MODULE_174__[\"default\"],\n UndergroundMegaStoneItem: _underground_UndergroundMegaStoneItem__WEBPACK_IMPORTED_MODULE_175__[\"default\"],\n PokeballFilter: _pokeballs_PokeballFilter__WEBPACK_IMPORTED_MODULE_176__[\"default\"],\n PokeballFilters: _pokeballs_PokeballFilters__WEBPACK_IMPORTED_MODULE_177__[\"default\"],\n TextMerger: _utilities_TextMerger__WEBPACK_IMPORTED_MODULE_178__[\"default\"],\n pokeballFilterOptions: _pokeballs_PokeballFilterOptions__WEBPACK_IMPORTED_MODULE_179__.pokeballFilterOptions,\n Mine: _underground_Mine__WEBPACK_IMPORTED_MODULE_181__.Mine,\n Underground: _underground_Underground__WEBPACK_IMPORTED_MODULE_183__.Underground,\n UndergroundUpgrade: _underground_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_184__[\"default\"],\n ShardDeal: _underground_ShardDeal__WEBPACK_IMPORTED_MODULE_182__.ShardDeal,\n DailyDeal: _underground_DailyDeal__WEBPACK_IMPORTED_MODULE_180__.DailyDeal,\n EncounterType: _enums_EncounterType__WEBPACK_IMPORTED_MODULE_187__[\"default\"],\n SafariBaitRequirement: _requirements_SafariBaitRequirement__WEBPACK_IMPORTED_MODULE_188__[\"default\"],\n SafariStepsRequirement: _requirements_SafariStepsRequirement__WEBPACK_IMPORTED_MODULE_189__[\"default\"],\n SafariRocksRequirement: _requirements_SafariRocksRequirement__WEBPACK_IMPORTED_MODULE_190__[\"default\"],\n SafariItemsRequirement: _requirements_SafariItemsRequirement__WEBPACK_IMPORTED_MODULE_191__[\"default\"],\n SafariCatchRequirement: _requirements_SafariCatchRequirement__WEBPACK_IMPORTED_MODULE_192__[\"default\"],\n ItemOwnedRequirement: _requirements_ItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_193__[\"default\"],\n UniqueItemOwnedRequirement: _requirements_UniqueItemOwnedRequirement__WEBPACK_IMPORTED_MODULE_194__[\"default\"],\n ChristmasPresent: _items_ChristmasPresent__WEBPACK_IMPORTED_MODULE_195__[\"default\"],\n DamageCalculator: _types_DamageCalculator__WEBPACK_IMPORTED_MODULE_196__[\"default\"],\n GameLoadState: _utilities_GameLoadState__WEBPACK_IMPORTED_MODULE_197__[\"default\"] }));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/temporaryWindowInjection.ts?"); + +/***/ }), + +/***/ "./src/modules/translation/Language.ts": +/*!*********************************************!*\ + !*** ./src/modules/translation/Language.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LanguageNames\": () => (/* binding */ LanguageNames),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* eslint-disable quote-props */\nvar Language;\n(function (Language) {\n Language[\"de\"] = \"de\";\n Language[\"en\"] = \"en\";\n Language[\"es\"] = \"es\";\n Language[\"fr\"] = \"fr\";\n Language[\"it\"] = \"it\";\n Language[\"ja\"] = \"ja\";\n Language[\"ko\"] = \"ko\";\n Language[\"zh-Hans\"] = \"zh-Hans\";\n Language[\"zh-Hant\"] = \"zh-Hant\";\n Language[\"ru\"] = \"ru\";\n})(Language || (Language = {}));\nconst LanguageNames = {\n 'de': 'Deutsch',\n 'en': 'English',\n 'es': 'Español',\n 'fr': 'Français',\n 'it': 'Italiano',\n 'ja': '日本語',\n 'ko': '한국어',\n 'zh-Hans': '简体中文',\n 'zh-Hant': '繁體中文',\n 'ru': 'Русский',\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Language);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/translation/Language.ts?"); + +/***/ }), + +/***/ "./src/modules/translation/Translation.ts": +/*!************************************************!*\ + !*** ./src/modules/translation/Translation.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Translate)\n/* harmony export */ });\n/* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18next */ \"./node_modules/i18next/dist/esm/i18next.js\");\n/* harmony import */ var i18next_chained_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18next-chained-backend */ \"./node_modules/i18next-chained-backend/dist/esm/i18nextChainedBackend.js\");\n/* harmony import */ var i18next_http_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18next-http-backend */ \"./node_modules/i18next-http-backend/esm/index.js\");\n/* harmony import */ var i18next_browser_languagedetector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18next-browser-languagedetector */ \"./node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _utilities_memoize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utilities/memoize */ \"./src/modules/utilities/memoize.ts\");\n/* harmony import */ var _Language__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Language */ \"./src/modules/translation/Language.ts\");\n\n\n\n\n\n\n\nconst getTranslatedMemoResolver = (key, namespace, otherOptions) => {\n if (otherOptions) {\n return null;\n }\n return `${namespace}:${key}`;\n};\nclass Translate {\n constructor(languageSetting) {\n this.get = (0,_utilities_memoize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])((key, namespace, otherOptions) => ko.pureComputed(() => {\n // recompute when language changes\n this.languageUpdated();\n return i18next__WEBPACK_IMPORTED_MODULE_0__[\"default\"].t(key, Object.assign(Object.assign({}, (otherOptions !== null && otherOptions !== void 0 ? otherOptions : {})), { ns: namespace }));\n }), getTranslatedMemoResolver);\n this.languageUpdated = ko.observable(0);\n i18next__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(i18next_chained_backend__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n .use(i18next_browser_languagedetector__WEBPACK_IMPORTED_MODULE_3__[\"default\"])\n .init({\n debug: _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].isDevelopmentBuild(),\n ns: ['pokemon', 'logbook', 'settings'],\n fallbackLng: 'en',\n backend: {\n // Two backend sources - tries the TRANSLATION_URL first, falls back to copy taken at build time\n backends: [i18next_http_backend__WEBPACK_IMPORTED_MODULE_2__[\"default\"], i18next_http_backend__WEBPACK_IMPORTED_MODULE_2__[\"default\"]],\n backendOptions: [\n { loadPath: 'https://translations.pokeclicker.com/locales/{{lng}}/{{ns}}.json' },\n { loadPath: './locales/{{lng}}/{{ns}}.json' },\n ],\n },\n returnEmptyString: false,\n interpolation: {\n nestingPrefix: '[[',\n nestingSuffix: ']]',\n escapeValue: false,\n },\n });\n i18next__WEBPACK_IMPORTED_MODULE_0__[\"default\"].on('initialized', () => {\n const lang = i18next__WEBPACK_IMPORTED_MODULE_0__[\"default\"].language;\n if (lang in _Language__WEBPACK_IMPORTED_MODULE_6__[\"default\"]) {\n languageSetting.observableValue(lang);\n }\n else {\n i18next__WEBPACK_IMPORTED_MODULE_0__[\"default\"].changeLanguage(languageSetting.value);\n }\n });\n i18next__WEBPACK_IMPORTED_MODULE_0__[\"default\"].services.formatter.add('pokemon', (val, lng, opts) => this.get(val, 'pokemon', opts)());\n languageSetting.observableValue.subscribe((val) => {\n i18next__WEBPACK_IMPORTED_MODULE_0__[\"default\"].changeLanguage(val, () => {\n _GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].incrementObservable(this.languageUpdated);\n });\n });\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/translation/Translation.ts?"); + +/***/ }), + +/***/ "./src/modules/types/DamageCalculator.ts": +/*!***********************************************!*\ + !*** ./src/modules/types/DamageCalculator.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DamageCalculator)\n/* harmony export */ });\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _weather_WeatherType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../weather/WeatherType */ \"./src/modules/weather/WeatherType.ts\");\n/* harmony import */ var _pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../pokemons/PokemonHelper */ \"./src/modules/pokemons/PokemonHelper.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n\n\n\n\n\nclass DamageCalculator {\n static initialize() {\n DamageCalculator.region.subscribe((value) => {\n const subregion = value == _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.none ? -1 : 0;\n DamageCalculator.subregion(subregion);\n });\n }\n static totalDamage() {\n const ignoreRegionMultiplier = DamageCalculator.region() == _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.none;\n return App.game.party.calculatePokemonAttack(DamageCalculator.type1(), DamageCalculator.type2(), ignoreRegionMultiplier, DamageCalculator.region(), DamageCalculator.includeBreeding(), DamageCalculator.baseAttackOnly(), DamageCalculator.weather(), DamageCalculator.ignoreLevel(), true, DamageCalculator.subregion());\n }\n static getDamageByTypes() {\n const typedamage = new Array(_GameHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"].enumLength(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) - 1).fill(0);\n const ignoreRegionMultiplier = DamageCalculator.region() == _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.none;\n for (const pokemon of App.game.party.caughtPokemon) {\n const dataPokemon = (0,_pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_3__.getPokemonByName)(pokemon.name);\n if (dataPokemon.type1 === _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None) {\n continue;\n }\n if (DamageCalculator.region() == _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.alola && DamageCalculator.subregion() == _GameConstants__WEBPACK_IMPORTED_MODULE_1__.AlolaSubRegions.MagikarpJump && Math.floor(pokemon.id) != 129) {\n continue;\n }\n const attack = App.game.party.calculateOnePokemonAttack(pokemon, DamageCalculator.type1(), DamageCalculator.type2(), DamageCalculator.region(), ignoreRegionMultiplier, DamageCalculator.includeBreeding(), DamageCalculator.baseAttackOnly(), DamageCalculator.weather(), DamageCalculator.ignoreLevel());\n typedamage[dataPokemon.type1] += attack / 2;\n const otherType = dataPokemon.type2 !== _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None ? dataPokemon.type2 : dataPokemon.type1;\n typedamage[otherType] += attack / 2;\n }\n return typedamage;\n }\n // TODO replace temporary type with PartyPokemon type once that class is ported\n static getOneTypeDetail(pokemon) {\n const ignoreRegionMultiplier = DamageCalculator.region() == _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.none;\n const dataPokemon = (0,_pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_3__.getPokemonByName)(pokemon.name);\n return {\n id: dataPokemon.id,\n name: dataPokemon.name,\n type1: dataPokemon.type1,\n type2: dataPokemon.type2,\n damage: App.game.party.calculateOnePokemonAttack(pokemon, DamageCalculator.type1(), DamageCalculator.type2(), DamageCalculator.region(), ignoreRegionMultiplier, DamageCalculator.includeBreeding(), DamageCalculator.baseAttackOnly(), DamageCalculator.weather(), DamageCalculator.ignoreLevel(), true, DamageCalculator.subregion()),\n displayName: pokemon.displayName,\n };\n }\n static getTypeDetail() {\n return App.game.party.caughtPokemon.filter(pokemon => {\n const dataPokemon = (0,_pokemons_PokemonHelper__WEBPACK_IMPORTED_MODULE_3__.getPokemonByName)(pokemon.name);\n return dataPokemon.type1 == DamageCalculator.detailType() || dataPokemon.type2 == DamageCalculator.detailType();\n }).reduce((details, pokemon) => {\n details.push(DamageCalculator.getOneTypeDetail(pokemon));\n return details;\n }, []).sort((a, b) => b.damage - a.damage);\n }\n}\nDamageCalculator.type1 = ko.observable(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None).extend({ numeric: 0 });\nDamageCalculator.type2 = ko.observable(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None).extend({ numeric: 0 });\nDamageCalculator.region = ko.observable(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.none);\nDamageCalculator.subregion = ko.observable(-1);\nDamageCalculator.weather = ko.observable(_weather_WeatherType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Clear);\nDamageCalculator.includeBreeding = ko.observable(false);\nDamageCalculator.baseAttackOnly = ko.observable(false);\nDamageCalculator.ignoreLevel = ko.observable(false);\nDamageCalculator.detailType = ko.observable(_enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None).extend({ numeric: 0 });\nDamageCalculator.observableTypeDamageArray = ko.pureComputed(DamageCalculator.getDamageByTypes);\nDamageCalculator.observableTypeDetails = ko.pureComputed(DamageCalculator.getTypeDetail);\nDamageCalculator.observableTotalDamage = ko.pureComputed(DamageCalculator.totalDamage);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/types/DamageCalculator.ts?"); + +/***/ }), + +/***/ "./src/modules/types/TypeHelper.ts": +/*!*****************************************!*\ + !*** ./src/modules/types/TypeHelper.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TypeHelper)\n/* harmony export */ });\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\n\nclass TypeHelper {\n static getAttackModifier(a1, a2, d1, d2) {\n if (a1 === _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None || d1 === _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None) {\n return 1;\n }\n // Apply second type as the first type when None\n // eslint-disable-next-line no-param-reassign\n a2 = a2 !== _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None ? a2 : a1;\n // eslint-disable-next-line no-param-reassign\n d2 = d2 !== _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].None ? d2 : d1;\n let m1 = TypeHelper.typeMatrix[a1][d1];\n let m2 = TypeHelper.typeMatrix[a1][d2];\n let m3 = TypeHelper.typeMatrix[a2][d1];\n let m4 = TypeHelper.typeMatrix[a2][d2];\n if (!App.game.challenges.list.disableGems.active()) {\n m1 += (App.game.gems.getGemUpgrade(a1, this.valueToType(m1)) * _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GEM_UPGRADE_STEP);\n m2 += (App.game.gems.getGemUpgrade(a1, this.valueToType(m2)) * _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GEM_UPGRADE_STEP);\n m3 += (App.game.gems.getGemUpgrade(a2, this.valueToType(m3)) * _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GEM_UPGRADE_STEP);\n m4 += (App.game.gems.getGemUpgrade(a2, this.valueToType(m4)) * _GameConstants__WEBPACK_IMPORTED_MODULE_1__.GEM_UPGRADE_STEP);\n }\n return Math.max(m1 * m2, m3 * m4);\n }\n static typeToValue(type) {\n switch (type) {\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectiveness.Immune:\n return _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Immune;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectiveness.NotVery:\n return _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.NotVery;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectiveness.Very:\n return _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Very;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectiveness.Neutral:\n default:\n return _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Neutral;\n }\n }\n static valueToType(value) {\n switch (value) {\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Immune:\n return _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectiveness.Immune;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.NotVery:\n return _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectiveness.NotVery;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Very:\n return _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectiveness.Very;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Neutral:\n default:\n return _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectiveness.Neutral;\n }\n }\n}\nTypeHelper.typeColors = [\n '595c3b',\n 'b10818',\n '294a94',\n 'b57b31',\n '4a944a',\n '42a59c',\n 'b54a4a',\n '7b42c6',\n '946b4a',\n '218cb5',\n 'ce6363',\n '8cb521',\n 'a58c4a',\n '605a72',\n '8c424a',\n '4a6b84',\n '737373',\n 'd694ce', // Fairy\n];\nTypeHelper.typeColorsLocked = [\n 'd3d4c4',\n 'fb9d9d',\n '99b6ff',\n 'ffda99',\n 'aff1a7',\n 'b5efef',\n 'f1bba7',\n 'e7ccff',\n 'e3d1b5',\n '99dfff',\n 'ffb5ad',\n 'dbf99f',\n 'e3d1b5',\n 'c8c3d5',\n 'e7b1b1',\n 'bcccdc',\n 'cccccc',\n 'ffc6e7', // Fairy\n];\nTypeHelper.typeMatrix = (() => {\n const imm = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Immune;\n const not = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.NotVery;\n const neu = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Neutral;\n const vry = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.TypeEffectivenessValue.Very;\n return [\n // E F\n // L I P\n // N E G P G F S D\n // O W C G H O R L Y G R S F <- Defending type\n // R F A T R T I O Y C R H A D T A\n // M I T R A I I S U I H B O O G A E I Attack type\n // A R E I S C N O N N I U C S O R E R |\n // L E R C S E G N D G C G K T N K L Y v\n [neu, neu, neu, neu, neu, neu, neu, neu, neu, neu, neu, neu, not, imm, neu, neu, not, neu],\n [neu, not, not, neu, vry, vry, neu, neu, neu, neu, neu, vry, not, neu, not, neu, vry, neu],\n [neu, vry, not, neu, not, neu, neu, neu, vry, neu, neu, neu, vry, neu, not, neu, neu, neu],\n [neu, neu, vry, not, not, neu, neu, neu, imm, vry, neu, neu, neu, neu, not, neu, neu, neu],\n [neu, not, vry, neu, not, neu, neu, not, vry, not, neu, not, vry, neu, not, neu, not, neu],\n [neu, not, not, neu, vry, not, neu, neu, vry, vry, neu, neu, neu, neu, vry, neu, not, neu],\n [vry, neu, neu, neu, neu, vry, neu, not, neu, not, not, not, vry, imm, neu, vry, vry, not],\n [neu, neu, neu, neu, vry, neu, neu, not, not, neu, neu, neu, not, not, neu, neu, imm, vry],\n [neu, vry, neu, vry, not, neu, neu, vry, neu, imm, neu, not, vry, neu, neu, neu, vry, neu],\n [neu, neu, neu, not, vry, neu, vry, neu, neu, neu, neu, vry, not, neu, neu, neu, not, neu],\n [neu, neu, neu, neu, neu, neu, vry, vry, neu, neu, not, neu, neu, neu, neu, imm, not, neu],\n [neu, not, neu, neu, vry, neu, not, not, neu, not, vry, neu, neu, not, neu, vry, not, not],\n [neu, vry, neu, neu, neu, vry, not, neu, not, vry, neu, vry, neu, neu, neu, neu, not, neu],\n [imm, neu, neu, neu, neu, neu, neu, neu, neu, neu, vry, neu, neu, vry, neu, not, neu, neu],\n [neu, neu, neu, neu, neu, neu, neu, neu, neu, neu, neu, neu, neu, neu, vry, neu, not, imm],\n [neu, neu, neu, neu, neu, neu, not, neu, neu, neu, vry, neu, neu, vry, neu, not, neu, not],\n [neu, not, not, not, neu, vry, neu, neu, neu, neu, neu, neu, vry, neu, neu, neu, not, vry],\n [neu, not, neu, neu, neu, neu, vry, not, neu, neu, neu, neu, neu, neu, vry, vry, not, neu], // FAIRY\n ];\n})();\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/types/TypeHelper.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/DailyDeal.ts": +/*!**********************************************!*\ + !*** ./src/modules/underground/DailyDeal.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DailyDeal\": () => (/* binding */ DailyDeal)\n/* harmony export */ });\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _Underground__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Underground */ \"./src/modules/underground/Underground.ts\");\n/* harmony import */ var _UndergroundItems__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./UndergroundItems */ \"./src/modules/underground/UndergroundItems.ts\");\n\n\n\n\n\nclass DailyDeal {\n constructor() {\n this.item1 = DailyDeal.randomItem();\n this.amount1 = 1;\n this.item2 = DailyDeal.randomItem();\n this.amount2 = this.item2.valueType === _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Shard ? _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_0__[\"default\"].intBetween(1, 3) : 1;\n }\n static generateDeals(maxDeals, date) {\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_0__[\"default\"].seedWithDate(date);\n DailyDeal.list.removeAll();\n const temp = [];\n const maxTries = maxDeals * 10;\n let i = 0;\n while (i < maxTries && temp.length < maxDeals) {\n const deal = new DailyDeal();\n if (deal.isValid(temp)) {\n temp.push(deal);\n }\n i++;\n }\n DailyDeal.list.push(...temp);\n }\n static randomItem() {\n // Exclude mega stones from daily deals\n return _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_0__[\"default\"].fromArray(_UndergroundItems__WEBPACK_IMPORTED_MODULE_4__[\"default\"].list.filter(item => item.valueType !== _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MegaStone));\n }\n isValid(dealList) {\n const item1Name = this.item1.name;\n const item2Name = this.item2.name;\n if (item1Name == item2Name) {\n return false;\n }\n // Left side item cannot be Evolution Item or Shard\n if (this.item1.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].EvolutionItem\n || this.item1.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Shard) {\n return false;\n }\n if (DailyDeal.sameDealExists(item1Name, item2Name, dealList)) {\n return false;\n }\n if (DailyDeal.reverseDealExists(item1Name, item2Name, dealList)) {\n return false;\n }\n return true;\n }\n static sameDealExists(name1, name2, dealList) {\n for (const deal of dealList) {\n if (deal.item1.name == name1 && deal.item2.name == name2) {\n return true;\n }\n }\n return false;\n }\n static reverseDealExists(name1, name2, dealList) {\n for (const deal of dealList) {\n if (deal.item2.name == name1) {\n if (deal.item1.name == name2) {\n return true;\n }\n else {\n return DailyDeal.reverseDealExists(deal.item1.name, name2, dealList);\n }\n }\n }\n return false;\n }\n static canUse(i) {\n const deal = DailyDeal.list.peek()[i];\n const amount = player.itemList[deal.item1.itemName]();\n return amount >= deal.amount1;\n }\n static use(i, tradeTimes = 1) {\n const deal = DailyDeal.list.peek()[i];\n if (DailyDeal.canUse(i)) {\n const amt = player.itemList[deal.item1.itemName]();\n const maxTrades = Math.floor(amt / deal.amount1);\n tradeTimes = Math.min(tradeTimes, maxTrades);\n player.loseItem(deal.item1.itemName, deal.amount1 * tradeTimes);\n _Underground__WEBPACK_IMPORTED_MODULE_3__.Underground.gainMineItem(deal.item2.id, deal.amount2 * tradeTimes);\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(App.game.statistics.undergroundDailyDealTrades, tradeTimes);\n }\n }\n}\nDailyDeal.list = ko.observableArray();\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/DailyDeal.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/Mine.ts": +/*!*****************************************!*\ + !*** ./src/modules/underground/Mine.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Mine\": () => (/* binding */ Mine),\n/* harmony export */ \"Tool\": () => (/* binding */ Tool)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _enums_OakItemType__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums/OakItemType */ \"./src/modules/enums/OakItemType.ts\");\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utilities/Rand */ \"./src/modules/utilities/Rand.ts\");\n/* harmony import */ var _Underground__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Underground */ \"./src/modules/underground/Underground.ts\");\n/* harmony import */ var _UndergroundItems__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./UndergroundItems */ \"./src/modules/underground/UndergroundItems.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\nvar Tool;\n(function (Tool) {\n Tool[Tool[\"Chisel\"] = 0] = \"Chisel\";\n Tool[Tool[\"Hammer\"] = 1] = \"Hammer\";\n})(Tool || (Tool = {}));\nclass Mine {\n static loadMine() {\n const tmpGrid = [];\n const tmpRewardGrid = [];\n Mine.rewardNumbers = [];\n Mine.itemsBuried(0);\n Mine.surveyResult(null);\n for (let i = 0; i < App.game.underground.getSizeY(); i++) {\n const row = [];\n const rewardRow = [];\n for (let j = 0; j < _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.sizeX; j++) {\n row.push(ko.observable(Math.min(Mine.maxLayerDepth, Math.max(1, Math.floor(_utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].float(2) + _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].float(3)) + 1))));\n rewardRow.push(0);\n }\n tmpGrid.push(row);\n tmpRewardGrid.push(rewardRow);\n }\n Mine.grid = tmpGrid;\n Mine.rewardGrid = tmpRewardGrid;\n // Generate items for new layer\n // Number of underground items must be >= min\n // If max > min, randomly select the number of items for the layer\n // Otherwise, the number of items must be equivalent to min\n let numItems = App.game.underground.getMinItems();\n if (App.game.underground.getMinItems() < App.game.underground.getMaxItems()) {\n numItems = _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].intBetween(App.game.underground.getMinItems(), App.game.underground.getMaxItems());\n }\n // Get our available items\n let items = _UndergroundItems__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getUnlockedItems();\n items = _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].shuffleWeightedArray(items, items.map((i) => i.getWeight())).reverse();\n // Add numItems items to the layer\n for (let i = 0; i < numItems && items.length; i++) {\n let res = false;\n let x = 0;\n let y = 0;\n const item = items.pop();\n let attempts = 0;\n // Keep checking random spots until a legal spot is found\n // If too many failed attempts are made, break out as a failsafe\n while (!res && attempts++ < this.maxPlacementAttempts) {\n this.rotateReward(item);\n x = Mine.getRandomCoord(_Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.sizeX, item.space[0].length);\n y = Mine.getRandomCoord(App.game.underground.getSizeY(), item.space.length);\n res = Mine.canAddReward(x, y, item);\n }\n // If item can be added, add it\n // Else, if we haven't hit the minimum number of items yet, try again with a new random item\n // Otherwise, just skip to next item\n if (res) {\n Mine.addReward(x, y, item);\n }\n else if (i < App.game.underground.getMinItems()) {\n i--;\n }\n }\n Mine.loadingNewLayer = false;\n Mine.itemsFound(0);\n Mine.itemsPartiallyFound(0);\n _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.showMine();\n //Check if Explosive_Charge is equipped.\n if (App.game.oakItems.isActive(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Explosive_Charge)) {\n const tiles = App.game.oakItems.calculateBonus(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Explosive_Charge);\n for (let i = 1; i < tiles; i++) {\n const x = _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].intBetween(0, App.game.underground.getSizeY() - 1);\n const y = _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].intBetween(0, _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.sizeX - 1);\n this.breakTile(x, y, 1);\n }\n }\n }\n static getRandomCoord(max, size) {\n return _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].floor(max - size + 1);\n }\n static canAddReward(x, y, reward) {\n if (Mine.alreadyHasRewardId(reward.id)) {\n return false;\n }\n if (y + reward.space.length > App.game.underground.getSizeY() || x + reward.space[0].length > _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.sizeX) {\n return false;\n }\n for (let i = 0; i < reward.space.length; i++) {\n for (let j = 0; j < reward.space[i].length; j++) {\n if (reward.space[i][j] !== 0) {\n if (Mine.rewardGrid[i + y][j + x] !== 0) {\n return false;\n }\n }\n }\n }\n return true;\n }\n static alreadyHasRewardId(id) {\n for (const row of Mine.rewardGrid) {\n for (const item of row) {\n if (item.value === id) {\n return true;\n }\n }\n }\n return false;\n }\n static addReward(x, y, reward) {\n for (let i = 0; i < reward.space.length; i++) {\n for (let j = 0; j < reward.space[i].length; j++) {\n if (reward.space[i][j].value != 0) {\n Mine.rewardGrid[i + y][j + x] = Object.assign(Object.assign({}, reward.space[i][j]), { revealed: 0 });\n }\n }\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(Mine.itemsBuried);\n Mine.rewardNumbers.push(reward.id);\n }\n static rotateReward(reward) {\n let rotations = _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].floor(4);\n while (rotations-- > 0) {\n reward.space = reward.space[0].map((val, index) => reward.space.map(row => row[index]).reverse());\n }\n const currentRotation = this.calculateRotation(reward);\n reward.space = reward.space.map(r => r.map(v => {\n v.rotations = currentRotation;\n return v;\n }));\n return reward;\n }\n static calculateRotation(reward) {\n let indexX = 0;\n const indexY = reward.space.findIndex(y => {\n indexX = y.findIndex(x => !x.x && !x.y);\n return indexX >= 0;\n });\n return (indexX ? 1 : 0) + (indexY ? 2 : 0);\n }\n static survey(resultTooltipID = undefined) {\n // Disable survey while loading new layer\n if (this.loadingNewLayer) {\n return;\n }\n if (Mine.surveyResult()) {\n $(resultTooltipID || '#mine-survey-result').tooltip('show');\n return;\n }\n const surveyCost = App.game.underground.getSurvey_Cost();\n if (App.game.underground.energy < surveyCost) {\n return;\n }\n App.game.underground.energy -= surveyCost;\n const rewards = Mine.rewardSummary();\n Mine.updatesurveyResult(rewards, resultTooltipID);\n }\n static rewardSummary() {\n return Mine.rewardNumbers.reduce((res, id) => {\n const reward = _UndergroundItems__WEBPACK_IMPORTED_MODULE_8__[\"default\"].list.find(x => x.id == id);\n switch (reward.valueType) {\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Diamond:\n res.totalValue += reward.value;\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Fossil:\n res.fossils++;\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].FossilPiece:\n res.fossilpieces++;\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Shard:\n res.shards++;\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].EvolutionItem:\n res.evoItems++;\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Gem:\n res.plates++;\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].MegaStone:\n res.megaStones++;\n default:\n }\n return res;\n }, { fossils: 0, fossilpieces: 0, plates: 0, evoItems: 0, totalValue: 0, shards: 0, megaStones: 0 });\n }\n static updatesurveyResult(summary, resultTooltipID = undefined) {\n const text = [];\n if (summary.fossils) {\n text.push(`Fossils: ${summary.fossils}`);\n }\n if (summary.fossilpieces) {\n text.push(`Fossil Pieces: ${summary.fossilpieces}`);\n }\n if (summary.evoItems) {\n text.push(`Evolution Items: ${summary.evoItems}`);\n }\n if (summary.plates) {\n text.push(`Gem Plates: ${summary.plates}`);\n }\n if (summary.shards) {\n text.push(`Shards: ${summary.shards}`);\n }\n if (summary.megaStones) {\n text.push(`Mega Stones: ${summary.megaStones}`);\n }\n if (summary.totalValue) {\n text.push(`Diamond Value: ${summary.totalValue}`);\n }\n Mine.surveyResult(text.join('
'));\n $(resultTooltipID || '#mine-survey-result').tooltip('show');\n }\n static click(i, j) {\n if (Mine.toolSelected() == Mine.Tool.Hammer) {\n Mine.hammer(i, j);\n }\n else {\n Mine.chisel(i, j);\n }\n }\n static hammer(x, y) {\n if (App.game.underground.energy >= _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.HAMMER_ENERGY) {\n if (x < 0 || y < 0) {\n return;\n }\n let hasMined = false;\n for (let i = -1; i < 2; i++) {\n for (let j = -1; j < 2; j++) {\n if (Mine.grid[Mine.normalizeY(x + i)][Mine.normalizeX(y + j)]() > 0) {\n hasMined = true;\n }\n this.breakTile(x + i, y + j, 1);\n }\n }\n if (hasMined) {\n App.game.underground.energy -= _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.HAMMER_ENERGY;\n }\n }\n }\n static chisel(x, y) {\n if (Mine.grid[x][y]() > 0) {\n if (App.game.underground.energy >= _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.CHISEL_ENERGY) {\n this.breakTile(x, y, 2);\n App.game.underground.energy -= _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.CHISEL_ENERGY;\n }\n }\n }\n static bomb() {\n // Disable bomb while loading new layer\n if (this.loadingNewLayer) {\n return;\n }\n let tiles = App.game.underground.getBombEfficiency();\n if (App.game.underground.energy >= _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.BOMB_ENERGY) {\n while (tiles-- > 0) {\n const x = _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].intBetween(0, this.getHeight() - 1);\n const y = _utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].intBetween(0, _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.sizeX - 1);\n this.breakTile(x, y, 2);\n }\n App.game.underground.energy -= _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.BOMB_ENERGY;\n }\n }\n static skipLayer(shouldConfirm = true) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.skipsRemaining()) {\n return;\n }\n if (!shouldConfirm || (yield _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].confirm({\n title: 'Underground',\n message: 'Skip this mine layer?',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.warning,\n confirm: 'Skip',\n }))) {\n setTimeout(Mine.completed, 1500);\n Mine.loadingNewLayer = true;\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(this.skipsRemaining, -1);\n }\n });\n }\n static breakTile(_x, _y, layers = 1) {\n const x = Mine.normalizeY(_x);\n const y = Mine.normalizeX(_y);\n const newlayer = Math.max(0, Mine.grid[x][y]() - layers);\n Mine.grid[x][y](newlayer);\n const reward = Mine.rewardGrid[x][y];\n if (newlayer == 0 && reward != 0 && reward.revealed != 1) {\n reward.revealed = 1;\n const image = _UndergroundItems__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getById(reward.value).undergroundImage;\n $(`div[data-i=${x}][data-j=${y}]`).html(`
`);\n Mine.checkItemsRevealed();\n Mine.calculatePartiallyRevealedItems();\n }\n }\n static normalizeX(x) {\n return Math.min(_Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.sizeX - 1, Math.max(0, x));\n }\n static normalizeY(y) {\n return Math.min(this.getHeight() - 1, Math.max(0, y));\n }\n static getHeight() {\n return this.rewardGrid ? this.rewardGrid.length : 0;\n }\n static checkItemsRevealed() {\n for (let i = 0; i < Mine.rewardNumbers.length; i++) {\n if (Mine.checkItemRevealed(Mine.rewardNumbers[i])) {\n let amount = 1;\n const itemName = _UndergroundItems__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getById(Mine.rewardNumbers[i]).name;\n const type = _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.success;\n const setting = _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationSetting.Underground.underground_item_found;\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({ message: `You found ${_GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].anOrA(itemName)} ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(itemName)}.`, type, setting });\n if (App.game.oakItems.isActive(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Treasure_Scanner)) {\n const giveDouble = App.game.oakItems.calculateBonus(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Treasure_Scanner) / 100;\n const title = 'Treasure Scanner';\n let message = `You found an extra ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(itemName)} in the Mine!`;\n while (_utilities_Rand__WEBPACK_IMPORTED_MODULE_6__[\"default\"].chance(giveDouble)) {\n amount++;\n if (amount > 2) {\n const jackpotMultiplier = amount > 4 ? ` ×${amount - 3}` : ''; // Start at ×2\n message = `${amount == 3 ? 'Lucky' : 'Jackpot'}${jackpotMultiplier}! You found another ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(itemName)}!`;\n }\n const timeout = Math.min(amount, 4) * 2000 + Math.max(amount - 4, 0) * 100;\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({ message, type, title, setting, timeout });\n }\n }\n App.game.oakItems.use(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Treasure_Scanner);\n _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.gainMineItem(Mine.rewardNumbers[i], amount);\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(Mine.itemsFound);\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(App.game.statistics.undergroundItemsFound, amount);\n Mine.rewardNumbers.splice(i, 1);\n i--;\n Mine.checkCompleted();\n }\n }\n }\n static calculatePartiallyRevealedItems() {\n const amountRevealed = Mine.rewardNumbers\n .map(value => Mine.checkItemPartiallyRevealed(value) ? 1 : 0)\n .reduce((a, b) => a + b, 0);\n Mine.itemsPartiallyFound(amountRevealed);\n }\n static checkItemRevealed(id) {\n for (let i = 0; i < _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.sizeX; i++) {\n for (let j = 0; j < this.getHeight(); j++) {\n if (Mine.rewardGrid[j][i] != 0) {\n if (Mine.rewardGrid[j][i].value == id) {\n if (Mine.rewardGrid[j][i].revealed === 0) {\n return false;\n }\n }\n }\n }\n }\n App.game.oakItems.use(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Cell_Battery);\n return true;\n }\n static checkItemPartiallyRevealed(id) {\n for (let i = 0; i < _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.sizeX; i++) {\n for (let j = 0; j < this.getHeight(); j++) {\n if (Mine.rewardGrid[j][i] != 0) {\n if (Mine.rewardGrid[j][i].value == id) {\n if (Mine.grid[j][i]() == 0)\n return true;\n }\n }\n }\n }\n return false;\n }\n static checkCompleted() {\n if (Mine.itemsFound() >= Mine.itemsBuried()) {\n // Don't resolve queued up calls to checkCompleted() until completed() is finished and sets loadingNewLayer to false\n if (Mine.loadingNewLayer == true) {\n return;\n }\n Mine.loadingNewLayer = true;\n setTimeout(Mine.completed, 1500);\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(App.game.statistics.undergroundLayersMined);\n if (this.skipsRemaining() < this.maxSkips) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].incrementObservable(this.skipsRemaining);\n }\n }\n }\n static completed() {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n message: 'You dig deeper...',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationOption.info,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_4__[\"default\"].NotificationSetting.Underground.underground_dig_deeper,\n });\n ko.cleanNode(document.getElementById('mineBody'));\n App.game.oakItems.use(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Explosive_Charge);\n Mine.loadMine();\n ko.applyBindings(null, document.getElementById('mineBody'));\n }\n static loadSavedMine(mine) {\n var _a, _b;\n this.grid = mine.grid.map(row => row.map(val => ko.observable(val)));\n this.rewardGrid = mine.rewardGrid;\n this.itemsFound(mine.itemsFound);\n this.itemsBuried(mine.itemsBuried);\n this.rewardNumbers = mine.rewardNumbers;\n this.loadingNewLayer = false;\n this.surveyResult((_a = mine.surveyResult) !== null && _a !== void 0 ? _a : this.surveyResult());\n this.skipsRemaining((_b = mine.skipsRemaining) !== null && _b !== void 0 ? _b : this.maxSkips);\n this.calculatePartiallyRevealedItems();\n _Underground__WEBPACK_IMPORTED_MODULE_7__.Underground.showMine();\n // Check if completed in case the mine was saved after completion and before creating a new mine\n // TODO: Remove setTimeout after TypeScript module migration is complete. Needed so that `App.game` is available\n setTimeout(() => Mine.checkCompleted(), 0);\n }\n static save() {\n if (this.grid == null) {\n Mine.loadMine();\n }\n const mineSave = {\n grid: this.grid.map(row => row.map(val => val())),\n rewardGrid: this.rewardGrid,\n itemsFound: this.itemsFound(),\n itemsBuried: this.itemsBuried(),\n rewardNumbers: this.rewardNumbers,\n surveyResult: this.surveyResult(),\n skipsRemaining: this.skipsRemaining(),\n };\n return mineSave;\n }\n}\nMine.Tool = Tool;\nMine.maxSkips = 5;\nMine.itemsFound = ko.observable(0);\nMine.itemsPartiallyFound = ko.observable(0);\nMine.itemsBuried = ko.observable(0);\nMine.surveyResult = ko.observable(null);\nMine.skipsRemaining = ko.observable(Mine.maxSkips);\n// 0 represents the Mine.Tool.Chisel but it's not loaded here yet.\nMine.toolSelected = ko.observable(0);\nMine.loadingNewLayer = true;\n// Number of times to try and place an item in a new layer before giving up, just a failsafe\nMine.maxPlacementAttempts = 1000;\n// Maximum underground layer depth\nMine.maxLayerDepth = 5;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/Mine.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/ShardDeal.ts": +/*!**********************************************!*\ + !*** ./src/modules/underground/ShardDeal.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShardDeal\": () => (/* binding */ ShardDeal)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _wallet_Amount__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../wallet/Amount */ \"./src/modules/wallet/Amount.ts\");\n/* harmony import */ var _UndergroundItems__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./UndergroundItems */ \"./src/modules/underground/UndergroundItems.ts\");\n\n\n\n\n\n\nclass ShardDeal {\n constructor(shardCosts, item, itemAmount) {\n var _a;\n this.shards = shardCosts;\n this.shards.forEach((s) => { s.shardType = _UndergroundItems__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getByName(s.shardTypeString); });\n this.item = { itemType: item, amount: itemAmount };\n this.questPointCost = this.item.itemType.basePrice / 4 || 1;\n this.currencyType = (_a = this.item.itemType.currency) !== null && _a !== void 0 ? _a : _GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency.questPoint;\n }\n isVisible() {\n return this.item.itemType.isVisible();\n }\n static getDeals(town) {\n return ShardDeal.list[town];\n }\n static canUse(town, i) {\n var _a;\n const deal = (_a = ShardDeal.list[town]) === null || _a === void 0 ? void 0 : _a.peek()[i];\n if (!deal) {\n return false;\n }\n if (_items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[deal.item.itemType.name].isSoldOut()) {\n return false;\n }\n else if (deal.questPointCost > App.game.wallet.currencies[deal.currencyType]()) {\n return false;\n }\n else {\n return deal.shards.every((value) => player.itemList[value.shardType.itemName]() >= value.amount);\n }\n }\n static use(town, i, tradeTimes = 1) {\n var _a;\n const deal = (_a = ShardDeal.list[town]) === null || _a === void 0 ? void 0 : _a.peek()[i];\n if (ShardDeal.canUse(town, i)) {\n const trades = deal.shards.map(shard => {\n const amt = player.itemList[shard.shardType.itemName]();\n const maxShardTrades = Math.floor(amt / shard.amount);\n return maxShardTrades;\n });\n const qp = App.game.wallet.currencies[deal.currencyType]();\n const maxCurrencyTrades = Math.floor(qp / deal.questPointCost);\n const maxTrades = Math.min(maxCurrencyTrades, trades.reduce((a, b) => Math.min(a, b), tradeTimes));\n deal.shards.forEach((value) => player.loseItem(value.shardType.itemName, value.amount * maxTrades));\n const amount = deal.item.amount * maxTrades;\n deal.item.itemType.gain(deal.item.amount * maxTrades);\n App.game.wallet.loseAmount(new _wallet_Amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"](deal.questPointCost * maxTrades, deal.currencyType));\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_3__[\"default\"].notify({\n message: `You traded for ${amount.toLocaleString('en-US')} × ${(0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.pluralizeString)((0,_GameConstants__WEBPACK_IMPORTED_MODULE_0__.humanifyString)(deal.item.itemType.displayName), amount)}.`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__[\"default\"].NotificationOption.success,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_2__[\"default\"].NotificationSetting.Items.item_bought,\n });\n }\n }\n static generateDeals() {\n this.generateKantoDeals();\n this.generateJohtoDeals();\n this.generateHoennDeals();\n this.generateSinnohDeals();\n this.generateUnovaDeals();\n this.generateKalosDeals();\n this.generateAlolaDeals();\n this.generateGalarDeals();\n }\n static generateKantoDeals() {\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Cerulean City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Vermilion City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electric_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Lavender Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Grass_egg, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Saffron City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 10 },\n { shardTypeString: 'Blue Shard', amount: 10 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fighting_egg, 1),\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Fuchsia City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 5 },\n { shardTypeString: 'Yellow Shard', amount: 5 },\n { shardTypeString: 'Green Shard', amount: 5 },\n { shardTypeString: 'Blue Shard', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Cinnabar Island\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_egg, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n ]);\n }\n static generateJohtoDeals() {\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Azalea Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Grass_egg, 1),\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Kings_rock, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Ecruteak City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_egg, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Soothe_bell, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Olivine City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electric_egg, 1),\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_stone, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Metal_coat, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Cianwood City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 10 },\n { shardTypeString: 'Blue Shard', amount: 10 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fighting_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sun_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Mahogany Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Upgrade, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Blackthorn City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 5 },\n { shardTypeString: 'Yellow Shard', amount: 5 },\n { shardTypeString: 'Green Shard', amount: 5 },\n { shardTypeString: 'Blue Shard', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_scale, 1),\n ]);\n }\n static generateHoennDeals() {\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Petalburg City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Kings_rock, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Dewford Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 10 },\n { shardTypeString: 'Blue Shard', amount: 10 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fighting_egg, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Slateport City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Mauville City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electric_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Metal_coat, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Verdanturf Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Grass_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Soothe_bell, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Lavaridge Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_egg, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Fallarbor Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sun_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Fortree City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Mossdeep City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Upgrade, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Prism_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Pacifidlog Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_tooth, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Sootopolis City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Ever Grande City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 5 },\n { shardTypeString: 'Yellow Shard', amount: 5 },\n { shardTypeString: 'Green Shard', amount: 5 },\n { shardTypeString: 'Blue Shard', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Pokemon HQ Lab\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_stone, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Kings_rock, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Soothe_bell, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Metal_coat, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sun_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Upgrade, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_scale, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Prism_scale, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_tooth, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_scale, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Shiny_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dusk_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dawn_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_claw, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_fang, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electirizer, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Magmarizer, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Protector, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dubious_disc, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Reaper_cloth, 1),\n ]);\n }\n static generateSinnohDeals() {\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Sandgem Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Meadow Plate', amount: 5 },\n { shardTypeString: 'Pixie Plate', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[\"Elf Munchlax\"], 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Oreburgh City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sun_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Floaroma Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Kings_rock, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Eterna City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Grass_egg, 1),\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Hearthome City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_egg, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Soothe_bell, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Solaceon Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Odd Keystone', amount: 1 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Spiritomb, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Shiny_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dusk_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dawn_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Pastoria City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Prism_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Celestic Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 5 },\n { shardTypeString: 'Yellow Shard', amount: 5 },\n { shardTypeString: 'Green Shard', amount: 5 },\n { shardTypeString: 'Blue Shard', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Pal Park\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_claw, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_fang, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Canalave City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 10 },\n { shardTypeString: 'Blue Shard', amount: 10 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fighting_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Metal_coat, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Snowpoint City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Upgrade, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Sunyshore City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electric_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_tooth, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Survival Area\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electirizer, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Magmarizer, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Resort Area\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Protector, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dubious_disc, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Reaper_cloth, 1),\n ]);\n }\n static generateUnovaDeals() {\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Castelia City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Kings_rock, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Nimbasa City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Grass_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electric_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Metal_coat, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Driftveil City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_claw, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_fang, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Mistralton City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Upgrade, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Lentimas Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_egg, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Undella Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_tooth, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Lacunosa Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 10 },\n { shardTypeString: 'Blue Shard', amount: 10 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fighting_egg, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Opelucid City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 5 },\n { shardTypeString: 'Yellow Shard', amount: 5 },\n { shardTypeString: 'Green Shard', amount: 5 },\n { shardTypeString: 'Blue Shard', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Humilau City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Prism_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Icirrus City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Protector, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dubious_disc, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Reaper_cloth, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Black and White Park\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sun_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Nacrene City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Soothe_bell, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Striaton City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Accumula Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Shiny_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dusk_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dawn_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Nuvema Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electirizer, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Magmarizer, 1),\n ]);\n }\n static generateKalosDeals() {\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Camphrier Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electric_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Ambrette Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Cyllage City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Upgrade, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Prism_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Geosenge Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_egg, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Kings_rock, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Shalour City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 10 },\n { shardTypeString: 'Blue Shard', amount: 10 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fighting_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Metal_coat, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Coumarine City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Grass_egg, 1),\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electirizer, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Magmarizer, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Laverre City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_tooth, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_scale, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Pink Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sachet, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Pink Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Whipped_dream, 1),\n new ShardDeal([{ shardTypeString: 'Pink Shard', amount: 1000 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Alakazite, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Dendemille Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Shiny_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dusk_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dawn_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Anistar City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sun_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_claw, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_fang, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Couriway Town\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 5 },\n { shardTypeString: 'Yellow Shard', amount: 5 },\n { shardTypeString: 'Green Shard', amount: 5 },\n { shardTypeString: 'Blue Shard', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Snowbelle City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Protector, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dubious_disc, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Reaper_cloth, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Parfum Palace\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 2500 },\n { shardTypeString: 'Yellow Shard', amount: 2500 },\n { shardTypeString: 'Green Shard', amount: 2500 },\n { shardTypeString: 'Blue Shard', amount: 2500 },\n { shardTypeString: 'Grey Shard', amount: 1000 },\n { shardTypeString: 'Purple Shard', amount: 1000 },\n { shardTypeString: 'Ochre Shard', amount: 1000 },\n { shardTypeString: 'Black Shard', amount: 500 },\n { shardTypeString: 'Crimson Shard', amount: 500 },\n { shardTypeString: 'Lime Shard', amount: 500 },\n { shardTypeString: 'White Shard', amount: 500 },\n { shardTypeString: 'Pink Shard', amount: 250 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList[\"Furfrou (Star)\"], 1),\n ]);\n }\n static generateAlolaDeals() {\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Hau'oli City\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Shiny_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dusk_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dawn_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Heahea City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Kings_rock, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Metal_coat, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Paniola Town\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Grass_egg, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_egg, 1),\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Konikoni City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Soothe_bell, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Aether Paradise\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Upgrade, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Malie City\"]] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electric_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electirizer, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Magmarizer, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Tapu Village\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_claw, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_fang, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Cyan Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Ice_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Seafolk Village\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 10 },\n { shardTypeString: 'Blue Shard', amount: 10 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fighting_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_tooth, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_scale, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Prism_scale, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Pink Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sachet, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Pink Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Whipped_dream, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Exeggutor Island\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 5 },\n { shardTypeString: 'Yellow Shard', amount: 5 },\n { shardTypeString: 'Green Shard', amount: 5 },\n { shardTypeString: 'Blue Shard', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_egg, 1),\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_scale, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Protector, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dubious_disc, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Reaper_cloth, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Altar of the Sunne and Moone\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sun_stone, 1),\n ]);\n }\n static generateGalarDeals() {\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations.Turffield] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Grass_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Rose Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sweet_apple, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Rose Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Tart_apple, 1),\n new ShardDeal([{ shardTypeString: 'Green Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Leaf_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sun_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations.Hulbury] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_egg, 1),\n new ShardDeal([{ shardTypeString: 'Blue Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Water_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Kings_rock, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Prism_scale, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_tooth, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Ochre Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Deepsea_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations.Motostoke] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_egg, 1),\n new ShardDeal([{ shardTypeString: 'Red Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fire_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Yellow Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Linking_cord, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Magmarizer, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations.Hammerlocke] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 5 },\n { shardTypeString: 'Yellow Shard', amount: 5 },\n { shardTypeString: 'Green Shard', amount: 5 },\n { shardTypeString: 'Blue Shard', amount: 5 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Metal_coat, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Upgrade, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Purple Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dragon_scale, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Route 6\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Fossilized Bird', amount: 1 },\n { shardTypeString: 'Fossilized Drake', amount: 1 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dracozolt, 1),\n new ShardDeal([\n { shardTypeString: 'Fossilized Bird', amount: 1 },\n { shardTypeString: 'Fossilized Dino', amount: 1 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Arctozolt, 1),\n new ShardDeal([\n { shardTypeString: 'Fossilized Fish', amount: 1 },\n { shardTypeString: 'Fossilized Drake', amount: 1 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dracovish, 1),\n new ShardDeal([\n { shardTypeString: 'Fossilized Fish', amount: 1 },\n { shardTypeString: 'Fossilized Dino', amount: 1 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Arctovish, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Stow-on-Side\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 10 },\n { shardTypeString: 'Blue Shard', amount: 10 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Fighting_egg, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Grey Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Soothe_bell, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dawn_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dubious_disc, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Reaper_cloth, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations.Ballonlea] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Brown Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Cracked_pot, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Blue Shard', amount: 20 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Moon_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Shiny_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Pink Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Sachet, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Pink Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Whipped_dream, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations.Circhester] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Red Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_claw, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Lime Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Razor_fang, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Black Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Protector, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Cyan Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Ice_stone, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations.Spikemuth] = ko.observableArray([\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 20 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electric_egg, 1),\n new ShardDeal([{ shardTypeString: 'Yellow Shard', amount: 40 }], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Thunder_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Blue Shard', amount: 20 },\n { shardTypeString: 'Crimson Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Dusk_stone, 1),\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'White Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Electirizer, 1),\n ]);\n ShardDeal.list[_GameConstants__WEBPACK_IMPORTED_MODULE_0__.ShardTraderLocations[\"Master Dojo\"]] = ko.observableArray([\n new ShardDeal([\n { shardTypeString: 'Yellow Shard', amount: 20 },\n { shardTypeString: 'Brown Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Galarica_cuff, 1),\n new ShardDeal([\n { shardTypeString: 'Green Shard', amount: 20 },\n { shardTypeString: 'Brown Shard', amount: 30 },\n ], _items_ItemList__WEBPACK_IMPORTED_MODULE_1__.ItemList.Galarica_wreath, 1),\n ]);\n }\n}\nShardDeal.list = {};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/ShardDeal.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/Underground.ts": +/*!************************************************!*\ + !*** ./src/modules/underground/Underground.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Underground\": () => (/* binding */ Underground)\n/* harmony export */ });\n/* harmony import */ var _koExtenders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../koExtenders */ \"./src/modules/koExtenders.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _enums_OakItemType__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../enums/OakItemType */ \"./src/modules/enums/OakItemType.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../wallet/AmountFactory */ \"./src/modules/wallet/AmountFactory.ts\");\n/* harmony import */ var _Mine__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Mine */ \"./src/modules/underground/Mine.ts\");\n/* harmony import */ var _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./UndergroundItems */ \"./src/modules/underground/UndergroundItems.ts\");\n/* harmony import */ var _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./UndergroundUpgrade */ \"./src/modules/underground/UndergroundUpgrade.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* harmony import */ var _settings_Settings__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../settings/Settings */ \"./src/modules/settings/Settings.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Underground {\n constructor() {\n this.name = 'Underground';\n this.saveKey = 'underground';\n this._energy = ko.observable(Underground.BASE_ENERGY_MAX);\n this.tradeAmount = ko.observable(1).extend({ numeric: 0 });\n this.upgradeList = [];\n this.tradeAmount.subscribe((value) => {\n if (value < 0) {\n this.tradeAmount(0);\n }\n });\n }\n initialize() {\n this.upgradeList = [\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Energy_Max, 'Max Energy', 10, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(50, 500, 50), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 100, 10), true, 'Increases the maximum Energy limit'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Items_Max, 'Max Items', 4, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(200, 800, 200), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 4, 1), true, 'Increases the maximum amount of items that can spawn per layer'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Items_Min, 'Min Items', 4, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(500, 5000, 1500), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 4, 1), true, 'Increases the minimum amount of items that can spawn per layer'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Energy_Gain, 'Energy Restored', 17, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(100, 1700, 100), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 17, 1), true, 'Amount of energy restored at each regen interval'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Energy_Regen_Time, 'Energy Regen Time', 20, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(20, 400, 20), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 20, 1), false, 'Decrease the time it takes to restore energy'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Daily_Deals_Max, 'Daily Deals', 2, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(150, 300, 150), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 2, 1), true, 'Unlock more daily deal slots'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Bomb_Efficiency, 'Bomb Efficiency', 5, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(50, 250, 50), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 10, 2), true, 'Increase the effectiveness of the bomb'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Survey_Cost, 'Survey Cost', 5, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(50, 250, 50), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 5, 1), false, 'Decrease the cost of surveying a layer'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Items_All, '+1 Item', 1, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(3000, 3000, 3000), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 1, 1), true, 'Adds an extra item to each layer'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Reduced_Shards, 'Reduced Shards', 1, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(750, 750, 750), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 1, 1), true, 'Greatly reduces the number of shards (toggleable)'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Reduced_Plates, 'Reduced Plates', 1, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(1000, 1000, 1000), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 1, 1), true, 'Greatly reduces the number of plates (toggleable)'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Reduced_Evolution_Items, 'Reduced Evolution Items', 1, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(500, 500, 500), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 1, 1), true, 'Greatly reduces the number of evolution items (toggleable)'),\n new _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"](_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Reduced_Fossil_Pieces, 'Reduced Fossil Pieces', 1, _wallet_AmountFactory__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createArray(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(200, 200, 200), _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createArray(0, 1, 1), true, 'Greatly reduces the number of Galar fossil pieces (toggleable)', new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_14__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.galar)),\n ];\n }\n update() {\n }\n getMaxEnergy() {\n return Underground.BASE_ENERGY_MAX + this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Energy_Max).calculateBonus();\n }\n getMaxItems() {\n return Underground.BASE_ITEMS_MAX + this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Items_Max).calculateBonus() + this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Items_All).calculateBonus();\n }\n getEnergyGain() {\n return Math.round(Underground.BASE_ENERGY_GAIN + this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Energy_Gain).calculateBonus());\n }\n getEnergyRegenTime() {\n return Math.round(Underground.BASE_ENERGY_REGEN_TIME - this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Energy_Regen_Time).calculateBonus());\n }\n getDailyDealsMax() {\n return Underground.BASE_DAILY_DEALS_MAX + this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Daily_Deals_Max).calculateBonus();\n }\n getBombEfficiency() {\n return Underground.BASE_BOMB_EFFICIENCY + this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Bomb_Efficiency).calculateBonus();\n }\n getSurvey_Cost() {\n return Underground.SURVEY_ENERGY - this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Survey_Cost).calculateBonus();\n }\n getSizeY() {\n return Underground.sizeY;\n }\n getMinItems() {\n return Underground.BASE_ITEMS_MIN + this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Items_Min).calculateBonus() + this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades.Items_All).calculateBonus();\n }\n getUpgrade(upgrade) {\n for (let i = 0; i < this.upgradeList.length; i++) {\n if (this.upgradeList[i].name == upgrade) {\n return this.upgradeList[i];\n }\n }\n }\n static showMine() {\n let html = '';\n for (let i = 0; i < _Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.grid.length; i++) {\n html += '
';\n for (let j = 0; j < _Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.grid[0].length; j++) {\n html += Underground.mineSquare(_Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.grid[i][j](), i, j);\n }\n html += '
';\n }\n $('#mineBody').html(html);\n }\n static mineSquare(amount, i, j) {\n if (_Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.rewardGrid[i][j] != 0 && _Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.grid[i][j]() == 0) {\n _Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.rewardGrid[i][j].revealed = 1;\n const image = _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].getById(_Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.rewardGrid[i][j].value).undergroundImage;\n return `
`;\n }\n else {\n return `
`;\n }\n }\n static calculateCssClass(i, j) {\n return `col-sm-1 rock${Math.max(_Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.grid[i][j](), 0)} mineSquare ${_Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.Tool[_Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.toolSelected()]}Selected`;\n }\n static gainMineItem(id, num = 1) {\n const item = _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].getById(id);\n _items_ItemList__WEBPACK_IMPORTED_MODULE_7__.ItemList[item.itemName].gain(num);\n }\n static getDiamondNetWorth() {\n let diamondNetWorth = 0;\n _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].list.forEach(mineItem => {\n if (mineItem.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Diamond) {\n diamondNetWorth += mineItem.value * player.itemList[mineItem.itemName]();\n }\n });\n return diamondNetWorth + App.game.wallet.currencies[_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond]();\n }\n static getCumulativeValues() {\n const cumulativeValues = {};\n _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].list.forEach(item => {\n if (item.hasSellValue() && player.itemList[item.itemName]() > 0 && !item.sellLocked()) {\n let valueType;\n switch (item.valueType) {\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Gem:\n valueType = `${_enums_PokemonType__WEBPACK_IMPORTED_MODULE_5__[\"default\"][item.type]} Gems`;\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Diamond:\n default:\n valueType = `${_enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"][item.valueType]}s`;\n }\n let cumulativeValueOfType = cumulativeValues[valueType];\n if (!cumulativeValueOfType) {\n cumulativeValueOfType = { cumulativeValue: 0 };\n // Set image source\n if (item.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Diamond) {\n cumulativeValueOfType.imgSrc = 'assets/images/underground/diamond.svg';\n }\n else {\n cumulativeValueOfType.imgSrc = item.image;\n }\n cumulativeValues[valueType] = cumulativeValueOfType;\n }\n cumulativeValueOfType.cumulativeValue += item.value * player.itemList[item.itemName]();\n }\n });\n return cumulativeValues;\n }\n gainEnergy() {\n if (this.energy < this.getMaxEnergy()) {\n const oakMultiplier = App.game.oakItems.calculateBonus(_enums_OakItemType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Cell_Battery);\n this.energy = Math.min(this.getMaxEnergy(), this.energy + (oakMultiplier * this.getEnergyGain()));\n if (this.energy === this.getMaxEnergy()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_9__[\"default\"].notify({\n message: 'Your mining energy has reached maximum capacity!',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationOption.success,\n timeout: 1e4,\n sound: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationSound.General.underground_energy_full,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationSetting.Underground.underground_energy_full,\n });\n }\n }\n }\n gainEnergyThroughItem(item) {\n // Restore a percentage of maximum energy\n const effect = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.EnergyRestoreEffect[_GameConstants__WEBPACK_IMPORTED_MODULE_1__.EnergyRestoreSize[item]];\n const gain = Math.min(this.getMaxEnergy() - this.energy, effect * this.getMaxEnergy());\n this.energy = this.energy + gain;\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_9__[\"default\"].notify({\n message: `You restored ${gain} mining energy!`,\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationOption.success,\n setting: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationSetting.Underground.underground_energy_restore,\n });\n }\n static updateTreasureSorting(newSortOption) {\n if (Underground.sortOption() === newSortOption) {\n Underground.sortFactor(Underground.sortFactor() * -1);\n }\n else {\n Underground.sortOption(newSortOption);\n }\n }\n static playerHasMineItems() {\n return _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].list.some(i => player.itemList[i.itemName]());\n }\n static sellMineItem(item, amount = 1) {\n if (item.sellLocked()) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_9__[\"default\"].notify({\n message: 'Item is locked for selling, you first have to unlock it.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationOption.warning,\n });\n return;\n }\n if (item.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Fossil) {\n amount = 1;\n }\n const curAmt = player.itemList[item.itemName]();\n if (curAmt > 0) {\n const sellAmt = Math.min(curAmt, amount);\n const success = Underground.gainProfit(item, sellAmt);\n if (success) {\n player.loseItem(item.itemName, sellAmt);\n }\n return;\n }\n }\n static sellAllMineItems() {\n _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].list.forEach((item) => {\n if (!item.sellLocked() && item.hasSellValue()) {\n Underground.sellMineItem(item, Infinity);\n }\n });\n $('#mineSellAllTreasuresModal').modal('hide');\n }\n static gainProfit(item, amount) {\n let success = true;\n switch (item.valueType) {\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Diamond:\n App.game.wallet.gainDiamonds(item.value * amount);\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Fossil:\n if (!App.game.breeding.hasFreeEggSlot()) {\n return false;\n }\n success = App.game.breeding.gainEgg(App.game.breeding.createFossilEgg(item.name));\n break;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Gem:\n const type = item.type;\n App.game.gems.gainGems(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.PLATE_VALUE * amount, type);\n break;\n // Nothing else can be sold\n default:\n return false;\n }\n return success;\n }\n openUndergroundModal() {\n if (this.canAccess()) {\n $('#mineModal').modal('show');\n }\n else {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_9__[\"default\"].notify({\n message: 'You need the Explorer Kit to access this location.\\nCheck out the shop at Cinnabar Island.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationOption.warning,\n });\n }\n }\n openUndergroundSellAllModal() {\n if (this.canAccess()) {\n if (Object.keys(Underground.getCumulativeValues()).length == 0) {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_9__[\"default\"].notify({\n message: 'You have no items selected for selling.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationOption.warning,\n });\n return;\n }\n $('#mineSellAllTreasuresModal').modal('show');\n }\n else {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_9__[\"default\"].notify({\n message: 'You need the Explorer Kit to access this location.\\nCheck out the shop at Cinnabar Island.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_8__[\"default\"].NotificationOption.warning,\n });\n }\n }\n canAccess() {\n return MapHelper.accessToRoute(11, 0) && App.game.keyItems.hasKeyItem(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Explorer_kit);\n }\n calculateItemEffect(item) {\n const effect = _GameConstants__WEBPACK_IMPORTED_MODULE_1__.EnergyRestoreEffect[_GameConstants__WEBPACK_IMPORTED_MODULE_1__.EnergyRestoreSize[item]];\n return effect * this.getMaxEnergy();\n }\n increaseTradeAmount(amount) {\n this.tradeAmount(this.tradeAmount() + amount);\n }\n multiplyTradeAmount(amount) {\n this.tradeAmount(this.tradeAmount() * amount);\n }\n fromJSON(json) {\n if (!json) {\n console.warn('Underground not loaded.');\n return;\n }\n const upgrades = json.upgrades;\n for (const item in _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades) {\n if (isNaN(Number(item))) {\n this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades[item]).level = upgrades[item] || 0;\n }\n }\n this.energy = json.energy || 0;\n const mine = json.mine;\n if (mine) {\n _Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.loadSavedMine(mine);\n }\n else {\n _Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.loadMine();\n }\n _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].list.forEach(it => it.sellLocked(json.sellLocks[it.itemName] || false));\n }\n toJSON() {\n const undergroundSave = {};\n const upgradesSave = {};\n for (const item in _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades) {\n if (isNaN(Number(item))) {\n upgradesSave[item] = this.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Upgrades[item]).level;\n }\n }\n undergroundSave.upgrades = upgradesSave;\n undergroundSave.energy = this.energy;\n undergroundSave.mine = _Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.save();\n undergroundSave.sellLocks = _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].list.reduce((sellLocks, item) => {\n if (item.sellLocked()) {\n sellLocks[item.itemName] = true;\n }\n return sellLocks;\n }, {});\n return undergroundSave;\n }\n // getters/setters\n get energy() {\n return this._energy();\n }\n set energy(value) {\n this._energy(value);\n }\n}\nUnderground.energyTick = ko.observable(60);\nUnderground.counter = 0;\nUnderground.sortDirection = -1;\nUnderground.lastPropSort = 'none';\nUnderground.sortOption = ko.observable('None');\nUnderground.sortFactor = ko.observable(-1);\nUnderground.BASE_ENERGY_MAX = 50;\nUnderground.BASE_ITEMS_MAX = 3;\nUnderground.BASE_ITEMS_MIN = 1;\nUnderground.BASE_ENERGY_GAIN = 3;\nUnderground.BASE_ENERGY_REGEN_TIME = 60;\nUnderground.BASE_DAILY_DEALS_MAX = 3;\nUnderground.BASE_BOMB_EFFICIENCY = 10;\nUnderground.sizeX = 25;\nUnderground.sizeY = 12;\nUnderground.CHISEL_ENERGY = 1;\nUnderground.HAMMER_ENERGY = 3;\nUnderground.BOMB_ENERGY = 10;\nUnderground.SURVEY_ENERGY = 15;\n// Sort UndergroundItems.list whenever the sort method or quantities change\nUnderground.sortedMineInventory = ko.computed(function () {\n const sortOption = Underground.sortOption();\n const direction = Underground.sortFactor();\n return _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].list.sort((a, b) => {\n let result = 0;\n switch (sortOption) {\n case 'Amount':\n result = (player.itemList[a.itemName]() - player.itemList[b.itemName]()) * direction;\n break;\n case 'Value':\n result = (a.value - b.value) * direction;\n break;\n case 'Item':\n result = a.name > b.name ? direction : -direction;\n break;\n }\n if (result == 0) {\n return a.id - b.id;\n }\n return result;\n });\n});\nUnderground.netWorthTooltip = ko.pureComputed(() => {\n let nMineItems = 0;\n let nFossils = 0;\n let nPlates = 0;\n let nShards = 0;\n _UndergroundItems__WEBPACK_IMPORTED_MODULE_12__[\"default\"].list.forEach(mineItem => {\n if (mineItem.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Diamond) {\n nMineItems += player.itemList[mineItem.itemName]();\n }\n else if (mineItem.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Fossil) {\n nFossils += player.itemList[mineItem.itemName]();\n }\n else if (mineItem.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Gem) {\n nPlates += player.itemList[mineItem.itemName]();\n }\n else if (mineItem.valueType == _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Shard) {\n nShards += player.itemList[mineItem.itemName]();\n }\n });\n return `Owned:
Mine items: ${nMineItems.toLocaleString('en-US')}
Fossils: ${nFossils.toLocaleString('en-US')}
Plates: ${nPlates.toLocaleString('en-US')}
Shards: ${nShards.toLocaleString('en-US')}`;\n});\nUnderground.shortcutVisible = ko.pureComputed(() => {\n return App.game.underground.canAccess() && !_settings_Settings__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getSetting('showUndergroundModule').observableValue();\n});\n$(document).ready(() => {\n $('body').on('click', '.mineSquare', function () {\n _Mine__WEBPACK_IMPORTED_MODULE_11__.Mine.click(parseInt(this.dataset.i, 10), parseInt(this.dataset.j, 10));\n });\n});\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/Underground.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/UndergroundEvolutionItem.ts": +/*!*************************************************************!*\ + !*** ./src/modules/underground/UndergroundEvolutionItem.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundEvolutionItem)\n/* harmony export */ });\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n/* harmony import */ var _UndergroundItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UndergroundItem */ \"./src/modules/underground/UndergroundItem.ts\");\n/* harmony import */ var _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./UndergroundUpgrade */ \"./src/modules/underground/UndergroundUpgrade.ts\");\n\n\n\n\nclass UndergroundEvolutionItem extends _UndergroundItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(id, itemName, space, type, value = 1, requirement) {\n super(id, itemName, space, value, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].EvolutionItem, requirement, () => {\n return App.game.underground.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Upgrades.Reduced_Evolution_Items).isMaxLevel() && _settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSetting('underground.Reduced_Evolution_Items').observableValue() ? 0.1 : 1;\n });\n this.type = type;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/UndergroundEvolutionItem.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/UndergroundFossilPieceItem.ts": +/*!***************************************************************!*\ + !*** ./src/modules/underground/UndergroundFossilPieceItem.ts ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundFossilPieceItem)\n/* harmony export */ });\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n/* harmony import */ var _UndergroundItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UndergroundItem */ \"./src/modules/underground/UndergroundItem.ts\");\n/* harmony import */ var _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./UndergroundUpgrade */ \"./src/modules/underground/UndergroundUpgrade.ts\");\n\n\n\n\nclass UndergroundFossilPieceItem extends _UndergroundItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(id, itemName, space, value = 1, requirement) {\n super(id, itemName, space, value, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].FossilPiece, requirement, () => {\n return App.game.underground.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Upgrades.Reduced_Fossil_Pieces).isMaxLevel() && _settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSetting('underground.Reduced_Fossil_Pieces').observableValue() ? 0.1 : 1;\n });\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/UndergroundFossilPieceItem.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/UndergroundGemItem.ts": +/*!*******************************************************!*\ + !*** ./src/modules/underground/UndergroundGemItem.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundGemItem)\n/* harmony export */ });\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n/* harmony import */ var _UndergroundItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UndergroundItem */ \"./src/modules/underground/UndergroundItem.ts\");\n/* harmony import */ var _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./UndergroundUpgrade */ \"./src/modules/underground/UndergroundUpgrade.ts\");\n\n\n\n\nclass UndergroundGemItem extends _UndergroundItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(id, itemName, space, type, value = 100, requirement) {\n super(id, itemName, space, value, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Gem, requirement, () => {\n return App.game.underground.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Upgrades.Reduced_Plates).isMaxLevel() && _settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSetting('underground.Reduced_Plates').observableValue() ? 0.1 : 1;\n });\n this.id = id;\n this.type = type;\n this.value = value;\n this.requirement = requirement;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/UndergroundGemItem.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/UndergroundItem.ts": +/*!****************************************************!*\ + !*** ./src/modules/underground/UndergroundItem.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundItem)\n/* harmony export */ });\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _items_ItemList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../items/ItemList */ \"./src/modules/items/ItemList.ts\");\n\n\n\n\nclass UndergroundItem {\n constructor(id, itemName, space, value = 1, valueType = _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Diamond, requirement, weight) {\n this.id = id;\n this.itemName = itemName;\n this.value = value;\n this.valueType = valueType;\n this.requirement = requirement;\n // Map out our item sizing\n this.space = space.map((r, y) => r.map((v, x) => ({\n sizeX: r.length,\n sizeY: space.length,\n x,\n y,\n value: v ? this.id : 0,\n rotations: 0,\n })));\n this.weight = typeof weight === 'number' ? weight : 1;\n this.customWeight = typeof weight === 'function' ? weight : undefined;\n this.sellLocked = ko.observable(false);\n }\n isUnlocked() {\n return this.requirement ? this.requirement.isCompleted() : true;\n }\n isSellable() {\n return [_enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fossil, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Diamond, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Gem].includes(this.valueType);\n }\n hasSellValue() {\n return [_enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Diamond, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Gem].includes(this.valueType);\n }\n toggleSellLock() {\n this.sellLocked(!this.sellLocked());\n }\n get displayName() {\n return this.name;\n }\n get name() {\n var _a;\n // modules.test needs a name but items from scripts are not initialized yet...\n return ((_a = _items_ItemList__WEBPACK_IMPORTED_MODULE_2__.ItemList[this.itemName]) === null || _a === void 0 ? void 0 : _a.displayName) || (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.camelCaseToString)((0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.humanifyString)(this.itemName));\n }\n get image() {\n switch (this.valueType) {\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].EvolutionItem:\n return `assets/images/items/evolution/${_GameConstants__WEBPACK_IMPORTED_MODULE_1__.StoneType[this.type]}.png`;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fossil:\n return `assets/images/breeding/${this.name}.png`;\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].MegaStone:\n return `assets/images/megaStone/${this.name}.png`;\n default:\n return `assets/images/items/underground/${this.name}.png`;\n }\n }\n get undergroundImage() {\n return `assets/images/underground/${this.name}.png`;\n }\n getWeight() {\n if (this.customWeight !== undefined) {\n return this.customWeight();\n }\n return this.weight;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/UndergroundItem.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/UndergroundItems.ts": +/*!*****************************************************!*\ + !*** ./src/modules/underground/UndergroundItems.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundItems)\n/* harmony export */ });\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* harmony import */ var _utilities_Rand__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utilities/Rand */ \"./src/modules/utilities/Rand.ts\");\n/* harmony import */ var _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./UndergroundEvolutionItem */ \"./src/modules/underground/UndergroundEvolutionItem.ts\");\n/* harmony import */ var _UndergroundFossilPieceItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./UndergroundFossilPieceItem */ \"./src/modules/underground/UndergroundFossilPieceItem.ts\");\n/* harmony import */ var _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./UndergroundGemItem */ \"./src/modules/underground/UndergroundGemItem.ts\");\n/* harmony import */ var _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./UndergroundItem */ \"./src/modules/underground/UndergroundItem.ts\");\n/* harmony import */ var _UndergroundMegaStoneItem__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./UndergroundMegaStoneItem */ \"./src/modules/underground/UndergroundMegaStoneItem.ts\");\n/* harmony import */ var _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./UndergroundShardItem */ \"./src/modules/underground/UndergroundShardItem.ts\");\n\n\n\n\n\n\n\n\n\n\n\nclass UndergroundItems {\n static addItem(item) {\n this.list.push(item);\n }\n static getByName(name) {\n return this.list.find((item) => item.name === name);\n }\n static getById(id) {\n return this.list.find((item) => item.id === id);\n }\n static getUnlockedItems() {\n return this.list.filter((item) => item.isUnlocked());\n }\n // Returns a random unlocked item\n static getRandomItem() {\n const unlockedItems = this.list.filter((item) => item.isUnlocked());\n return _utilities_Rand__WEBPACK_IMPORTED_MODULE_4__[\"default\"].fromWeightedArray(unlockedItems, unlockedItems.map((i) => i.getWeight())) || this.list[0];\n }\n static getFullResourceName(item, amt) {\n let output = '';\n const uItem = this.getById(item.id);\n switch (item.valueType) {\n case _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Gem:\n output = `${_enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][uItem.type]} Gem`;\n break;\n default:\n output = _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"][item.valueType];\n }\n if (amt > 1) {\n output += 's';\n }\n return output;\n }\n}\nUndergroundItems.list = [];\n// Diamond Items\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](1, 'Rare_bone', [[1, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 1]], 3));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](2, 'Star_piece', [[0, 1, 0], [1, 1, 1], [0, 1, 0]], 5));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](3, 'Revive', [[0, 1, 0], [1, 1, 1], [0, 1, 0]], 2));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](4, 'Max_revive', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], 4));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](5, 'Iron_ball', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], 2));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](6, 'Heart_scale', [[1, 0], [1, 1]], 10));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](7, 'Light_clay', [[1, 0, 1, 0], [1, 1, 1, 0], [1, 1, 1, 1], [0, 1, 0, 1]], 2));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](8, 'Odd_keystone', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], 6));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](9, 'Hard_stone', [[1, 1], [1, 1]], 4));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](10, 'Oval_stone', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], 3));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](11, 'Everstone', [[1, 1, 1, 1], [1, 1, 1, 1]], 3));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](12, 'Smooth_rock', [[0, 0, 1, 0], [1, 1, 1, 0], [0, 1, 1, 1], [0, 1, 0, 0]], 2));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](13, 'Heat_rock', [[1, 0, 1, 0], [1, 1, 1, 1], [1, 1, 1, 1]], 2));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](14, 'Icy_rock', [[0, 1, 1, 0], [1, 1, 1, 1], [1, 1, 1, 1], [1, 0, 0, 1]], 2));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](15, 'Damp_rock', [[1, 1, 1], [1, 1, 1], [1, 0, 1]], 2));\n// Gem Plates\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](100, 'Draco_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Dragon));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](101, 'Dread_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Dark));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](102, 'Earth_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Ground));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](103, 'Fist_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fighting));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](104, 'Flame_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fire));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](105, 'Icicle_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Ice));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](106, 'Insect_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Bug));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](107, 'Iron_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Steel));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](108, 'Meadow_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Grass));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](109, 'Mind_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Psychic));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](110, 'Sky_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Flying));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](111, 'Splash_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Water));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](112, 'Spooky_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Ghost));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](113, 'Stone_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rock));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](114, 'Toxic_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Poison));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](115, 'Zap_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Electric));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](116, 'Pixie_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fairy));\nUndergroundItems.addItem(new _UndergroundGemItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"](117, 'Blank_plate', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Normal));\n// Fossils/Fossil Pieces\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](200, 'Helix_fossil', [[0, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, null, () => (App.game.party.alreadyCaughtPokemonByName('Omanyte') || player.itemList.Helix_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](201, 'Dome_fossil', [[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [0, 1, 1, 1, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, null, () => (App.game.party.alreadyCaughtPokemonByName('Kabuto') || player.itemList.Dome_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](202, 'Old_amber', [[0, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, null, () => (App.game.party.alreadyCaughtPokemonByName('Aerodactyl') || player.itemList.Old_amber() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](203, 'Root_fossil', [[0, 0, 1, 1, 1], [0, 0, 1, 1, 1], [1, 0, 0, 1, 1], [1, 1, 1, 1, 1], [0, 1, 1, 1, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.hoenn), () => (App.game.party.alreadyCaughtPokemonByName('Lileep') || player.itemList.Root_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](204, 'Claw_fossil', [[1, 1, 1, 0, 0], [1, 1, 1, 1, 0], [0, 1, 1, 1, 1], [0, 0, 0, 1, 1]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.hoenn), () => (App.game.party.alreadyCaughtPokemonByName('Anorith') || player.itemList.Claw_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](205, 'Armor_fossil', [[0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [1, 1, 1, 1, 1], [0, 1, 1, 1, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh), () => (App.game.party.alreadyCaughtPokemonByName('Shieldon') || player.itemList.Armor_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](206, 'Skull_fossil', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [0, 1, 1, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh), () => (App.game.party.alreadyCaughtPokemonByName('Cranidos') || player.itemList.Skull_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](207, 'Cover_fossil', [[1, 1, 1, 1, 0], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [0, 1, 1, 1, 1]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.unova), () => (App.game.party.alreadyCaughtPokemonByName('Tirtouga') || player.itemList.Cover_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](208, 'Plume_fossil', [[0, 0, 1, 1, 1], [0, 1, 1, 1, 1], [1, 1, 1, 1, 0], [1, 1, 1, 1, 0], [1, 1, 0, 0, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.unova), () => (App.game.party.alreadyCaughtPokemonByName('Archen') || player.itemList.Plume_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](209, 'Jaw_fossil', [[0, 0, 1, 1, 1], [0, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.kalos), () => (App.game.party.alreadyCaughtPokemonByName('Tyrunt') || player.itemList.Jaw_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"](210, 'Sail_fossil', [[1, 1, 1, 0, 0], [1, 1, 1, 1, 1], [0, 1, 1, 1, 1], [0, 1, 1, 1, 0]], 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Fossil, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.kalos), () => (App.game.party.alreadyCaughtPokemonByName('Amaura') || player.itemList.Sail_fossil() > 0 ? 0.1 : 1.5)));\nUndergroundItems.addItem(new _UndergroundFossilPieceItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"](211, 'Fossilized_bird', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], 0, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.galar)));\nUndergroundItems.addItem(new _UndergroundFossilPieceItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"](212, 'Fossilized_fish', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], 0, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.galar)));\nUndergroundItems.addItem(new _UndergroundFossilPieceItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"](213, 'Fossilized_drake', [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]], 0, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.galar)));\nUndergroundItems.addItem(new _UndergroundFossilPieceItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"](214, 'Fossilized_dino', [[1, 1, 1, 0], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], 0, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.galar)));\n// Evolution Stones\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](300, 'Fire_stone', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Fire_stone));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](301, 'Water_stone', [[1, 1, 1], [1, 1, 1], [1, 1, 0]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Water_stone));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](302, 'Thunder_stone', [[0, 1, 1], [1, 1, 1], [1, 1, 0]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Thunder_stone));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](303, 'Leaf_stone', [[0, 1, 0], [1, 1, 1], [1, 1, 1], [0, 1, 0]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Leaf_stone));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](304, 'Moon_stone', [[0, 1, 1, 1], [1, 1, 1, 0]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Moon_stone));\n// TODO: Replace these requirements with StoneUnlockedRequirement once moved to modules\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](305, 'Sun_stone', [[0, 1, 0], [1, 1, 1], [1, 1, 1]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Sun_stone, 1, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.johto)));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](306, 'Shiny_stone', [[0, 1, 1], [1, 1, 1], [1, 1, 1]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Shiny_stone, 1, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh)));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](307, 'Dusk_stone', [[1, 1, 1], [1, 1, 1], [1, 1, 0]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Dusk_stone, 1, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh)));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](308, 'Dawn_stone', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Dawn_stone, 1, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh)));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](309, 'Ice_stone', [[1, 1, 1], [1, 1, 1]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Ice_stone, 1, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.alola)));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](310, 'Black_augurite', [[1, 0, 1], [1, 1, 1], [1, 1, 1]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Black_augurite, 1, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.hisui)));\nUndergroundItems.addItem(new _UndergroundEvolutionItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"](311, 'Peat_block', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], _GameConstants__WEBPACK_IMPORTED_MODULE_2__.StoneType.Peat_block, 1, new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.hisui)));\n// UndergroundItems.addItem(new UndergroundEvolutionItem(305, [[0, 1, 0], [1, 1, 1], [1, 1, 1]], StoneType.Sun_stone, 1, new StoneUnlockedRequirement(StoneType.Sun_stone)));\n// UndergroundItems.addItem(new UndergroundEvolutionItem(306, [[0, 1, 1], [1, 1, 1], [1, 1, 1]], StoneType.Shiny_stone, 1, new StoneUnlockedRequirement(StoneType.Shiny_stone)));\n// UndergroundItems.addItem(new UndergroundEvolutionItem(307, [[1, 1, 1], [1, 1, 1], [1, 1, 0]], StoneType.Dusk_stone, 1, new StoneUnlockedRequirement(StoneType.Dusk_stone)));\n// UndergroundItems.addItem(new UndergroundEvolutionItem(308, [[1, 1, 1], [1, 1, 1], [1, 1, 1]], StoneType.Dawn_stone, 1, new StoneUnlockedRequirement(StoneType.Dawn_stone)));\n// UndergroundItems.addItem(new UndergroundEvolutionItem(309, [[1, 1, 1], [1, 1, 1]], StoneType.Ice_stone, 1, new StoneUnlockedRequirement(StoneType.Ice_stone)));\n// Shards\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](400, 'Red_shard', [[1, 1, 1], [1, 1, 0], [1, 1, 1]]));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](401, 'Yellow_shard', [[1, 0, 1, 0], [1, 1, 1, 0], [1, 1, 1, 1]]));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](402, 'Green_shard', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 1]]));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](403, 'Blue_shard', [[1, 1, 1], [1, 1, 1], [1, 1, 0]]));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](404, 'Grey_shard', [[1, 1, 1], [1, 1, 1], [0, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.johto)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](405, 'Purple_shard', [[1, 1, 1, 1], [1, 1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.johto)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](406, 'Ochre_shard', [[1, 1, 0, 0], [1, 1, 1, 0], [1, 1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.hoenn)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](407, 'Black_shard', [[1, 1, 1], [0, 1, 1], [0, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](408, 'Crimson_shard', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](409, 'Lime_shard', [[0, 0, 0, 0], [0, 1, 1, 1], [1, 1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](410, 'White_shard', [[1, 1, 1, 1], [0, 1, 1, 1], [0, 1, 1, 0]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.sinnoh)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](411, 'Pink_shard', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.kalos)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](412, 'Cyan_shard', [[1, 1, 1, 1], [0, 1, 1, 1], [0, 0, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.alola)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](413, 'Rose_shard', [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.galar)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](414, 'Brown_shard', [[1, 1, 0], [1, 1, 0], [1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.galar)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](415, 'Beige_shard', [[0, 0, 1, 1], [0, 1, 1, 1], [0, 1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.paldea)));\nUndergroundItems.addItem(new _UndergroundShardItem__WEBPACK_IMPORTED_MODULE_10__[\"default\"](416, 'Slate_shard', [[0, 0, 0, 0], [1, 1, 1, 1], [1, 1, 1, 1]], new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.Region.paldea)));\n// MegaStones\nUndergroundItems.addItem(new _UndergroundMegaStoneItem__WEBPACK_IMPORTED_MODULE_9__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.MegaStoneType.Aerodactylite, 500, 'Aerodactylite', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], 'Aerodactyl', 0, 0.1));\nUndergroundItems.addItem(new _UndergroundMegaStoneItem__WEBPACK_IMPORTED_MODULE_9__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.MegaStoneType.Mawilite, 501, 'Mawilite', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], 'Mawile', 0, 0.1));\nUndergroundItems.addItem(new _UndergroundMegaStoneItem__WEBPACK_IMPORTED_MODULE_9__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_2__.MegaStoneType.Sablenite, 502, 'Sablenite', [[1, 1, 1], [1, 1, 1], [1, 1, 1]], 'Sableye', 0, 0.1));\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/UndergroundItems.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/UndergroundMegaStoneItem.ts": +/*!*************************************************************!*\ + !*** ./src/modules/underground/UndergroundMegaStoneItem.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundMegaStoneItem)\n/* harmony export */ });\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../requirements/MaxRegionRequirement */ \"./src/modules/requirements/MaxRegionRequirement.ts\");\n/* harmony import */ var _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../requirements/MultiRequirement */ \"./src/modules/requirements/MultiRequirement.ts\");\n/* harmony import */ var _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../requirements/ObtainedPokemonRequirement */ \"./src/modules/requirements/ObtainedPokemonRequirement.ts\");\n/* harmony import */ var _UndergroundItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./UndergroundItem */ \"./src/modules/underground/UndergroundItem.ts\");\n\n\n\n\n\n\nclass UndergroundMegaStoneItem extends _UndergroundItem__WEBPACK_IMPORTED_MODULE_5__[\"default\"] {\n constructor(megaStone, id, itemName, space, pokemon, value = 0, weight) {\n super(id, itemName, space, value, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].MegaStone, new _requirements_MultiRequirement__WEBPACK_IMPORTED_MODULE_3__[\"default\"]([new _requirements_MaxRegionRequirement__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Region.kalos), new _requirements_ObtainedPokemonRequirement__WEBPACK_IMPORTED_MODULE_4__[\"default\"](pokemon)]), () => (player.hasMegaStone(megaStone) ? 0 : weight));\n this.megaStone = megaStone;\n this.pokemon = pokemon;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/UndergroundMegaStoneItem.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/UndergroundShardItem.ts": +/*!*********************************************************!*\ + !*** ./src/modules/underground/UndergroundShardItem.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UndergroundShardItem)\n/* harmony export */ });\n/* harmony import */ var _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/UndergroundItemValueType */ \"./src/modules/enums/UndergroundItemValueType.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n/* harmony import */ var _UndergroundItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UndergroundItem */ \"./src/modules/underground/UndergroundItem.ts\");\n/* harmony import */ var _UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./UndergroundUpgrade */ \"./src/modules/underground/UndergroundUpgrade.ts\");\n\n\n\n\nclass UndergroundShardItem extends _UndergroundItem__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(id, itemName, space, requirement) {\n super(id, itemName, space, 0, _enums_UndergroundItemValueType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Shard, requirement, () => {\n return App.game.underground.getUpgrade(_UndergroundUpgrade__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Upgrades.Reduced_Shards).isMaxLevel() && _settings__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSetting('underground.Reduced_Shards').observableValue() ? 0.1 : 1;\n });\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/UndergroundShardItem.ts?"); + +/***/ }), + +/***/ "./src/modules/underground/UndergroundUpgrade.ts": +/*!*******************************************************!*\ + !*** ./src/modules/underground/UndergroundUpgrade.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Upgrades\": () => (/* binding */ Upgrades),\n/* harmony export */ \"default\": () => (/* binding */ UndergroundUpgrade)\n/* harmony export */ });\n/* harmony import */ var _enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/KeyItemType */ \"./src/modules/enums/KeyItemType.ts\");\n/* harmony import */ var _upgrades_Upgrade__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../upgrades/Upgrade */ \"./src/modules/upgrades/Upgrade.ts\");\n\n\nvar Upgrades;\n(function (Upgrades) {\n Upgrades[Upgrades[\"Energy_Max\"] = 0] = \"Energy_Max\";\n Upgrades[Upgrades[\"Items_Max\"] = 1] = \"Items_Max\";\n Upgrades[Upgrades[\"Items_Min\"] = 2] = \"Items_Min\";\n Upgrades[Upgrades[\"Energy_Gain\"] = 3] = \"Energy_Gain\";\n Upgrades[Upgrades[\"Energy_Regen_Time\"] = 4] = \"Energy_Regen_Time\";\n Upgrades[Upgrades[\"Daily_Deals_Max\"] = 5] = \"Daily_Deals_Max\";\n Upgrades[Upgrades[\"Bomb_Efficiency\"] = 6] = \"Bomb_Efficiency\";\n Upgrades[Upgrades[\"Survey_Cost\"] = 7] = \"Survey_Cost\";\n Upgrades[Upgrades[\"Items_All\"] = 8] = \"Items_All\";\n Upgrades[Upgrades[\"Reduced_Shards\"] = 9] = \"Reduced_Shards\";\n Upgrades[Upgrades[\"Reduced_Plates\"] = 10] = \"Reduced_Plates\";\n Upgrades[Upgrades[\"Reduced_Evolution_Items\"] = 11] = \"Reduced_Evolution_Items\";\n Upgrades[Upgrades[\"Reduced_Fossil_Pieces\"] = 12] = \"Reduced_Fossil_Pieces\";\n})(Upgrades || (Upgrades = {}));\nclass UndergroundUpgrade extends _upgrades_Upgrade__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n constructor(name, displayName, maxLevel, costList, bonusList, increasing = true, description, requirement) {\n super(name, displayName, maxLevel, costList, bonusList, increasing);\n this.description = description;\n this.requirement = requirement;\n }\n canBuy() {\n return super.canBuy() && App.game.keyItems.hasKeyItem(_enums_KeyItemType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Explorer_kit) && this.isUnlocked();\n }\n isUnlocked() {\n var _a, _b;\n return (_b = (_a = this.requirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true;\n }\n}\nUndergroundUpgrade.Upgrades = Upgrades;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/underground/UndergroundUpgrade.ts?"); + +/***/ }), + +/***/ "./src/modules/upgrades/ExpUpgrade.ts": +/*!********************************************!*\ + !*** ./src/modules/upgrades/ExpUpgrade.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ExpUpgrade)\n/* harmony export */ });\n/* harmony import */ var _Upgrade__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Upgrade */ \"./src/modules/upgrades/Upgrade.ts\");\n\n/**\n * An upgrade that requires experience to level up.\n */\nclass ExpUpgrade extends _Upgrade__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n constructor(name, displayName, maxLevel, expList, costList, bonusList, increasing) {\n super(name, displayName, maxLevel, costList, bonusList, increasing);\n this.defaults = {\n level: 0,\n exp: 0,\n };\n this.expList = expList;\n this.expKO = ko.observable(0);\n }\n gainExp(exp) {\n this.exp = Math.min(this.expList[this.level], this.exp + exp);\n }\n canBuy() {\n return super.canBuy() && this.hasEnoughExp();\n }\n hasEnoughExp() {\n return this.exp >= this.expList[this.level];\n }\n toJSON() {\n const json = super.toJSON();\n json.exp = this.exp;\n return json;\n }\n fromJSON(json) {\n var _a;\n super.fromJSON(json);\n this.exp = (_a = json.exp) !== null && _a !== void 0 ? _a : this.defaults.exp;\n }\n // Knockout getters/setters\n get normalizedExp() {\n if (this.level === 0) {\n return this.exp;\n }\n return this.exp - this.expList[this.level - 1];\n }\n get expPercentage() {\n const nextLevelExp = this.level === 0 ? this.expList[this.level] : this.expList[this.level] - this.expList[this.level - 1];\n return (Math.round(this.normalizedExp) / nextLevelExp) * 100;\n }\n get progressString() {\n const nextLevelExp = this.level === 0 ? this.expList[this.level] : this.expList[this.level] - this.expList[this.level - 1];\n return `${Math.round(this.normalizedExp)}/${nextLevelExp}`;\n }\n // Private as external sources should use gainExp and normalizedExp\n get exp() {\n return this.expKO();\n }\n set exp(exp) {\n this.expKO(exp);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/upgrades/ExpUpgrade.ts?"); + +/***/ }), + +/***/ "./src/modules/upgrades/Upgrade.ts": +/*!*****************************************!*\ + !*** ./src/modules/upgrades/Upgrade.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Upgrade)\n/* harmony export */ });\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n\n\nclass Upgrade {\n constructor(name, displayName, maxLevel, \n // Optional array of costs\n costList = [], \n // Optional array of benefits\n bonusList = [], \n // Describes whether this upgrade increases or decreases a number.\n // (e.g. power is increasing, time is decreasing).\n increasing = true) {\n this.name = name;\n this.displayName = displayName;\n this.maxLevel = maxLevel;\n this.costList = costList;\n this.bonusList = bonusList;\n this.increasing = increasing;\n this.defaults = {\n level: 0,\n };\n this.levelKO = ko.observable();\n this.saveKey = name;\n this.level = this.defaults.level;\n }\n calculateCost() {\n return this.costList[this.level];\n }\n // Override with a custom function\n calculateBonus(level = this.level) {\n return this.bonusList[level];\n }\n upgradeBonus() {\n if (!this.isMaxLevel()) {\n return this.calculateBonus(this.level + 1) - this.calculateBonus(this.level);\n }\n return 0;\n }\n isMaxLevel() {\n return this.level >= this.maxLevel;\n }\n canAfford() {\n return App.game.wallet.hasAmount(this.calculateCost());\n }\n // Override in subclass when other requirements exist.\n canBuy() {\n return this.level < this.maxLevel && this.canAfford();\n }\n buy() {\n if (this.isMaxLevel()) {\n return;\n }\n if (this.canBuy()) {\n App.game.wallet.loseAmount(this.calculateCost());\n this.levelUp();\n }\n else {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_1__[\"default\"].notify({\n message: 'You cannot afford to buy this upgrade yet.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_0__[\"default\"].NotificationOption.warning,\n });\n }\n }\n levelUp() {\n this.level += 1;\n }\n fromJSON(json) {\n var _a;\n if (json == null) {\n return;\n }\n this.level = (_a = json.level) !== null && _a !== void 0 ? _a : this.defaults.level;\n }\n toJSON() {\n return {\n level: this.level,\n };\n }\n // Knockout getters/setters\n get level() {\n return this.levelKO();\n }\n set level(value) {\n this.levelKO(Math.min(value, this.maxLevel));\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/upgrades/Upgrade.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/DisplayObservables.ts": +/*!*****************************************************!*\ + !*** ./src/modules/utilities/DisplayObservables.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"collapseState\": () => (/* binding */ collapseState),\n/* harmony export */ \"modalState\": () => (/* binding */ modalState)\n/* harmony export */ });\nvar BootstrapState;\n(function (BootstrapState) {\n BootstrapState[\"hidden\"] = \"hidden\";\n BootstrapState[\"hide\"] = \"hide\";\n BootstrapState[\"show\"] = \"show\";\n})(BootstrapState || (BootstrapState = {}));\nfunction subscribeToElemState(elemID, type, obs) {\n const $elem = $(`#${elemID}`);\n if (!$elem.length) {\n console.error(`DisplayObservables: ${type} ${elemID} not found, cannot subscribe state observable`);\n }\n else {\n obs(BootstrapState[$elem.hasClass('show') ? 'show' : 'hidden']);\n Object.values(BootstrapState).forEach((st) => {\n $elem.on(`${st}.bs.${type}`, () => obs(st));\n });\n }\n}\nfunction createStateObservable(elemID, type) {\n const obs = ko.observable(BootstrapState.hidden);\n $(document).ready(() => {\n subscribeToElemState(elemID, type, obs);\n });\n return obs;\n}\nfunction getObservableState(proxyTarget, elemID, type) {\n let returnObservable = false;\n if (elemID.endsWith('Observable')) {\n returnObservable = true;\n // eslint-disable-next-line no-param-reassign\n elemID = elemID.replace(/Observable$/, '');\n }\n if (!proxyTarget[elemID]) {\n proxyTarget[elemID] = createStateObservable(elemID, type);\n }\n return returnObservable ? proxyTarget[elemID] : proxyTarget[elemID]();\n}\n// eslint-disable-next-line import/prefer-default-export\nconst modalState = new Proxy({}, {\n get(target, modalID) {\n return getObservableState(target, modalID, 'modal');\n },\n});\n// eslint-disable-next-line import/prefer-default-export\nconst collapseState = new Proxy({}, {\n get(target, collapseID) {\n return getObservableState(target, collapseID, 'collapse');\n },\n});\n/*\n Disabling optional modules like the farmDisplay breaks the state tracking by removing the events set up in subscribeToElemState()\n This detects any collapsibles within optional modules and reattaches the tracking events when the modules are re-enabled\n Optional modules should be given the class pokeclicker-optional-module\n*/\n$(document).ready(() => {\n document.querySelectorAll('.pokeclicker-optional-module [data-toggle=\"collapse\"]').forEach(collapseButton => {\n var _a;\n const collapseID = (_a = collapseButton.getAttribute('href')) === null || _a === void 0 ? void 0 : _a.substring(1);\n if (!collapseID) {\n return console.error('DisplayObservables: Cannot detect collapse state within an optional module without a static collapse target ID');\n }\n const stateObservable = collapseState[`${collapseID}Observable`];\n // The collapse target should ideally be a direct child of the optional module's root element\n // to save on the overhead of scanning every addition/removal across the entire subtree\n const moduleContainer = document.getElementById(collapseID).closest('.pokeclicker-optional-module');\n const isDirectChild = document.getElementById(collapseID).parentElement === moduleContainer;\n const moduleObserver = new MutationObserver((records) => {\n let added = false;\n let removed = false;\n records.forEach(r => {\n added || (added = Array.from(r.addedNodes).some(n => n instanceof Element && (n.id === collapseID || (!isDirectChild && n.querySelector(`#${collapseID}`)))));\n removed || (removed = Array.from(r.removedNodes).some(n => n instanceof Element && (n.id === collapseID || (!isDirectChild && n.querySelector(`#${collapseID}`)))));\n });\n if (added && document.getElementById(collapseID)) {\n subscribeToElemState(collapseID, 'collapse', stateObservable);\n }\n else if (removed) {\n stateObservable(BootstrapState.hidden);\n }\n });\n moduleObserver.observe(moduleContainer, {\n subtree: !isDirectChild,\n childList: true,\n });\n });\n});\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/DisplayObservables.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/GameLoadState.ts": +/*!************************************************!*\ + !*** ./src/modules/utilities/GameLoadState.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GameLoadState)\n/* harmony export */ });\nvar LoadingStates;\n(function (LoadingStates) {\n LoadingStates[LoadingStates[\"none\"] = -1] = \"none\";\n LoadingStates[LoadingStates[\"initialized\"] = 0] = \"initialized\";\n LoadingStates[LoadingStates[\"appliedBindings\"] = 1] = \"appliedBindings\";\n LoadingStates[LoadingStates[\"running\"] = 2] = \"running\";\n})(LoadingStates || (LoadingStates = {}));\nconst currentState = ko.observable(LoadingStates.none);\nclass GameLoadState {\n static getLoadState() {\n return currentState();\n }\n static reachedLoadState(state) {\n return state <= currentState();\n }\n /**\n * Should only be set by App.ts\n */\n static updateLoadState(newState) {\n if (newState <= currentState()) {\n throw new Error(`GameLoadState: cannot set to invalid state '${LoadingStates[newState]}' while already at state '${LoadingStates[currentState()]}'!`);\n }\n currentState(newState);\n }\n /**\n * Runs a callback function once the game has reached a given step of the load process. If the game has\n * already reached that step, the callback function will run immediately.\n *\n * @param targetState - Load state upon which to run the callback function\n * @param callback - Function run after the desired state of loading\n * @param [exactState=false] - If set to true, will only run [callback] while the loading state is *exactly* [targetState], and will throw an error if already past [targetState]\n *\n */\n static onLoadState(targetState, callback, exactState = false) {\n if (exactState && targetState < currentState()) {\n throw new Error(`GameLoadState: cannot run callback at exactly state '${LoadingStates[targetState]}' while already at state '${LoadingStates[currentState()]}'!`);\n }\n if (targetState === LoadingStates.none) {\n // Run callback immediately instead of via ko.when(), trying to access the subscription synchronously that way can error\n callback();\n }\n else {\n const subscription = ko.when(() => targetState <= currentState(), () => {\n if (exactState && targetState < currentState()) {\n throw new Error(`GameLoadState: callback scheduled to run at exactly state '${LoadingStates[targetState]}' tried to run at state '${LoadingStates[currentState()]}'!`);\n }\n callback();\n subscription.dispose();\n });\n }\n }\n}\nGameLoadState.states = LoadingStates;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/GameLoadState.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/GenericProxy.ts": +/*!***********************************************!*\ + !*** ./src/modules/utilities/GenericProxy.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst GenericProxy = Proxy;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GenericProxy);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/GenericProxy.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/Information.ts": +/*!**********************************************!*\ + !*** ./src/modules/utilities/Information.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Information)\n/* harmony export */ });\n/* harmony import */ var intro_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! intro.js */ \"./node_modules/intro.js/intro.js\");\n/* harmony import */ var intro_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(intro_js__WEBPACK_IMPORTED_MODULE_0__);\n\nclass Information {\n static show(options = {}) {\n return intro_js__WEBPACK_IMPORTED_MODULE_0___default()().setOptions(Object.assign(Object.assign({}, this.defaultOptions), options)).start();\n }\n static hide() {\n return intro_js__WEBPACK_IMPORTED_MODULE_0___default()().exit();\n }\n}\nInformation.defaultOptions = {\n showStepNumbers: false,\n hideNext: true,\n hidePrev: true,\n exitOnOverlayClick: false,\n showBullets: false,\n};\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/Information.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/LazyLoader.ts": +/*!*********************************************!*\ + !*** ./src/modules/utilities/LazyLoader.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"lazyLoad\": () => (/* binding */ lazyLoad),\n/* harmony export */ \"lazyLoadCallback\": () => (/* binding */ lazyLoadCallback)\n/* harmony export */ });\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _GameLoadState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GameLoadState */ \"./src/modules/utilities/GameLoadState.ts\");\n\n\nfunction createObserver(loader, page, fullyLoaded, options) {\n // Loader image currently visible\n let visible = false;\n // Timeout IDs for loading additional pages\n let bindingTimeout;\n let bindingIdleCallback;\n // Load one page of data\n const loadMore = () => {\n if (visible && !fullyLoaded.status) {\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(page);\n }\n };\n // Called by Knockout's childrenComplete binding\n // Signals that the foreach binding is done updating the lazyList in the DOM and we can load another page if the loader is still onscreen\n const bindingCallback = () => {\n if (_GameLoadState__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getLoadState() !== _GameLoadState__WEBPACK_IMPORTED_MODULE_1__[\"default\"].states.running) {\n // lazyList shouldn't load additional pages before the game starts\n return;\n }\n if (visible) {\n // Don't load immediately on childrenComplete so the observer has time to realize if it's been pushed offscreen\n // Otherwise the list will load two pages of data at once\n // Use setTimeout for a minimum delay, requestIdleCallback on its own can fire too soon\n bindingTimeout = setTimeout(() => {\n bindingIdleCallback = requestIdleCallback(() => loadMore(), { timeout: 100 });\n }, 100);\n }\n };\n // Called whenever the loader becomes more or less than visible\n const observerCallback = (entries) => {\n const alreadyLoading = visible;\n visible = entries[0].isIntersecting;\n // Only start loading when the loader first becomes visible, just in case\n if (visible && !alreadyLoading) {\n loadMore();\n }\n // Clear timeouts when the loader is no longer visible, just in case\n if (!visible) {\n clearTimeout(bindingTimeout);\n cancelIdleCallback(bindingIdleCallback);\n }\n };\n const observer = new IntersectionObserver(observerCallback, options);\n // Wait to observe the loader icon until the game is done loading\n // Otherwise the observer might wind up in an incorrect state\n _GameLoadState__WEBPACK_IMPORTED_MODULE_1__[\"default\"].onLoadState(_GameLoadState__WEBPACK_IMPORTED_MODULE_1__[\"default\"].states.running, () => {\n observer.observe(loader);\n });\n return {\n bindingCallback,\n observer,\n };\n}\nfunction findScrollingParent(element, key) {\n let elem = element;\n while (elem.parentElement) {\n const { overflowY } = window.getComputedStyle(elem);\n if (overflowY === 'scroll' || overflowY === 'auto') {\n return elem;\n }\n elem = elem.parentElement;\n }\n throw new Error(`Could not find scrolling parent for LazyLoader '${key}'`);\n}\nconst memo = {};\nfunction maybeMakeComputed(maybeSubscribable, key) {\n if (!(maybeSubscribable instanceof Function)) {\n throw new Error(`Invalid reset function used for '${key}' lazyLoad`);\n }\n // Wrap reset function in a computed if it's not a Knockout object already\n if (!ko.isSubscribable(maybeSubscribable)) {\n maybeSubscribable = ko.computed(maybeSubscribable);\n // We made the computed in here, we should dispose of it later\n memo[key].toDispose.push(maybeSubscribable);\n }\n return maybeSubscribable;\n}\nfunction createLoaderElem() {\n const loader = document.createElement('div');\n loader.className = 'lazy-loader-container';\n const loaderImage = document.createElement('img');\n loaderImage.src = 'assets/images/pokeball/Pokeball.svg';\n loaderImage.className = 'loader-pokeball';\n loader.append(loaderImage);\n return loader;\n}\nconst defaultOptions = {\n triggerMargin: '10%',\n threshold: 0,\n pageSize: 40,\n};\n/**\n * Provides a lazy-loading PureComputed slice of an observable array, for use in bindings like foreach, and inserts a loader element\n * into the page to trigger loading more of the underlying array. Computed lists are cached when possible.\n *\n * @param key - Unique identifier for each list, used for caching\n * @param boundNode - HTML Node the list is bound to. Must be in a scrolling container, and the loader will be added to a non-table parent of this node.\n * @param list - The observable array to lazily load\n * @param options - Optional parameters\n * @param options.pageSize Number of elements per lazy list page, default 40\n * @param options.triggerMargin Trigger margin for IntersectionObserver, default 10%\n * @param options.threshold Threshold for IntersectionObserver, default 0\n * @param options.reset A function to trigger resets to the list. The function can be any Knockout subscribable or a function that evaluates a Knockout subscribable.\n * The list will reset to the first page whenever the output changes, or if reset is subscribable and reset.notifySubscribers() is called.\n *\n * @return A PureComputed array initially showing the first pageSize elements of the base list.\n */\nfunction lazyLoad(key, boundNode, list, options) {\n // Get first parent that's not a table element, that's where we'll add the loader element\n const targetElement = boundNode.parentElement.closest(':not(table, thead, tbody, tr, td, th)');\n if (memo[key]) {\n if (targetElement.querySelector(':scope > .lazy-loader-container')) {\n // Only return a memoized lazyList if the associated loader element still exists\n return memo[key].lazyList;\n }\n else {\n // Dispose of old subscriptions before making new computeds\n memo[key].toDispose.forEach(sub => sub.dispose());\n }\n }\n memo[key] = {\n lazyList: null,\n callback: null,\n toDispose: [],\n };\n const opts = Object.assign(Object.assign({}, defaultOptions), options);\n // Do this before adding the loader to the DOM, just in case it's not somewhere scrollable\n const scrollingParent = findScrollingParent(targetElement, key);\n const loader = createLoaderElem();\n targetElement.append(loader);\n // Function to toggle loader visibility\n const toggleLoader = (visible) => {\n if (visible) {\n // Only show the loader once the game has loaded \n loader.style.removeProperty('display');\n }\n else {\n loader.style.display = 'none';\n }\n };\n // How many sections of the source list are currently loaded \n const page = ko.observable(1);\n // Given an optional reset function, reset the lazyList to its initial size upon any notification\n const resetSubscribable = opts.reset ? maybeMakeComputed(opts.reset, key) : null;\n if (resetSubscribable) {\n const resetSub = resetSubscribable.subscribe(() => page(1));\n memo[key].toDispose.push(resetSub);\n }\n // Given an optional pause function, pause loading whenever the observable is true by hiding the loader image\n const pauseSubscribable = opts.pause ? maybeMakeComputed(opts.pause, key) : null;\n if (pauseSubscribable) {\n toggleLoader(!pauseSubscribable());\n const pauseSub = pauseSubscribable.subscribe((pauseState) => toggleLoader(!pauseState));\n memo[key].toDispose.push(pauseSub);\n }\n // Track \"is the entire source list loaded\" in a way that's accessible to createObserver()\n const fullyLoaded = { status: false };\n // Create intersection observer and start watching for loading triggers\n // Returns a callback for Knockout to call whenever the list is done being updated in the DOM\n const { bindingCallback } = createObserver(loader, page, fullyLoaded, {\n root: scrollingParent,\n rootMargin: opts.triggerMargin,\n threshold: opts.threshold,\n });\n memo[key].callback = bindingCallback;\n // Computed lazyList returning the currently-loaded slice of the source list\n const lazyList = ko.pureComputed(() => {\n const lastElem = page() * opts.pageSize;\n const array = list();\n const isDone = lastElem >= array.length;\n fullyLoaded.status = isDone;\n // Hide loader image if there's nothing left to load\n toggleLoader(!isDone);\n return array.slice(0, lastElem);\n });\n memo[key].lazyList = lazyList;\n memo[key].toDispose.push(lazyList);\n return lazyList;\n}\nfunction lazyLoadCallback(key) {\n // Notify a lazyList's handler after a page of data is done rendering, so it can start loading another\n if (memo[key]) {\n memo[key].callback();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/LazyLoader.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/Rand.ts": +/*!***************************************!*\ + !*** ./src/modules/utilities/Rand.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Rand)\n/* harmony export */ });\n/* harmony import */ var _SeededRand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n\nclass Rand extends _SeededRand__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n // override the seeded value, and make use of a random value\n static next() {\n return Math.random();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/Rand.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/SeededDateRand.ts": +/*!*************************************************!*\ + !*** ./src/modules/utilities/SeededDateRand.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SeededDateRand)\n/* harmony export */ });\n/* harmony import */ var _SeededRand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n\nclass SeededDateRand extends _SeededRand__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n static next() {\n return this.state / this.MAX_UINT_32;\n }\n static seedWithDate(d) {\n super.seedWithDate(d);\n super.next();\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/SeededDateRand.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/SeededRand.ts": +/*!*********************************************!*\ + !*** ./src/modules/utilities/SeededRand.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SeededRand)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\nclass SeededRand {\n static next() {\n this.state ^= this.state << 13;\n this.state ^= this.state >> 17;\n this.state ^= this.state << 5;\n this.state = Math.abs(this.state * this.MULTIPLIER) % this.MAX_UINT_32;\n return this.state / this.MAX_UINT_32;\n }\n static seedWithDate(d) {\n this.state = Number((d.getFullYear() - 1900) * d.getDate() + 1000 * d.getMonth() + 100000 * d.getDate());\n }\n // hours specifies how many hours the seed should remain the same\n static seedWithDateHour(d, hours = 1) {\n // Adjust date for timezone offset and hours rounded\n const time = d.getTime();\n const offset = -(d.getTimezoneOffset() * (_GameConstants__WEBPACK_IMPORTED_MODULE_0__.MINUTE));\n const offsetTime = time + offset;\n const newDate = new Date(time - (offsetTime % (_GameConstants__WEBPACK_IMPORTED_MODULE_0__.HOUR * hours)));\n const newHour = newDate.getHours();\n // Set state based on adjusted date\n this.seedWithDate(newDate);\n // Update state based on current hour\n this.state += 1000000 * newHour;\n }\n static seed(state) {\n this.state = Math.abs(state);\n }\n // get a number between min and max (both inclusive)\n static intBetween(min, max) {\n return Math.floor((max - min + 1) * this.next() + min);\n }\n // get a floored number from 0 to max (excluding max)\n static floor(max) {\n return Math.floor(this.next() * max);\n }\n // get a number from 0 to max (excluding max)\n static float(max) {\n return this.next() * max;\n }\n // 50/50 chance of true or false\n static boolean() {\n return !!this.intBetween(0, 1);\n }\n // If number is more than one, the chance is 1/chance otherwise the chance is a percentage\n static chance(chance) {\n return this.next() <= (chance >= 1 ? 1 / chance : chance);\n }\n // Pick an element from an array\n static fromArray(arr) {\n return arr[this.intBetween(0, arr.length - 1)];\n }\n // Pick an element from an array with specified weights\n static fromWeightedArray(arr, weights) {\n const max = weights.reduce((acc, weight) => acc + weight, 0);\n let rand = this.next() * max;\n return arr.find((_e, i) => (rand -= weights[i]) <= 0) || arr[0];\n }\n // Filters out any enum values that are less than 0 (for None)\n static fromEnum(_enum) {\n const arr = Object.keys(_enum).map(Number).filter((item) => item >= 0);\n return this.fromArray(arr);\n }\n // Get a string of letters and numbers (lowercase)\n static string(length) {\n return [...Array(length)].map(() => this.next().toString(36)[2]).join('');\n }\n // Shuffle an array\n static shuffleArray(arr) {\n const output = [...arr];\n for (let i = output.length; i; i--) {\n const j = this.floor(i);\n const x = output[i - 1];\n output[i - 1] = output[j];\n output[j] = x;\n }\n return output;\n }\n // Shuffle an array based on the weights of the items\n static shuffleWeightedArray(arr, weights) {\n const output = [];\n for (let i = 0; arr.length; i++) {\n const item = this.fromWeightedArray(arr, weights);\n const ind = arr.findIndex(a => a == item);\n arr.splice(ind, 1);\n weights.splice(ind, 1);\n output.push(item);\n }\n return output;\n }\n}\nSeededRand.state = 1234567890;\nSeededRand.MAX_UINT_32 = Math.pow(2, 32) - 1;\nSeededRand.MULTIPLIER = 987654321;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/SeededRand.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/Sound.ts": +/*!****************************************!*\ + !*** ./src/modules/utilities/Sound.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Sound)\n/* harmony export */ });\n/* harmony import */ var _settings_Settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../settings/Settings */ \"./src/modules/settings/Settings.ts\");\n\nclass Sound {\n constructor(fileName, soundName) {\n this.sound = document.createElement('audio');\n this.initialized = false;\n const src = `assets/sounds/${fileName}.mp3`;\n this.name = soundName;\n this.sound.setAttribute('preload', 'auto');\n this.sound.setAttribute('controls', 'none');\n this.sound.style.display = 'none';\n // Wait until the document is loaded before moving the sound to the body\n $(() => {\n document.body.appendChild(this.sound);\n // Set as initialized now, incase the user is on Desktop and hasn't clicked anywhere yet\n this.initialized = true;\n // This is needed to be able to play sounds on mobile devices\n $(document).one('click', () => {\n this.sound.play().finally(() => {\n this.sound.pause();\n this.sound.src = src;\n }).catch(() => { });\n setTimeout(() => {\n this.sound.pause();\n this.sound.src = src;\n }, 1000);\n });\n const volumeObs = _settings_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getSetting('sound.volume').observableValue;\n this.updateVolume(volumeObs());\n volumeObs.subscribe((v) => this.updateVolume(v));\n });\n }\n updateVolume(value) {\n try {\n this.sound.volume = value / 100;\n }\n catch (e) {\n console.error(`Error updating volume for ${this.name}:\\n`, e);\n }\n }\n play() {\n if (this.initialized && this.canPlay()) {\n this.sound.play();\n }\n }\n stop() {\n if (this.initialized) {\n this.sound.pause();\n }\n }\n remove() {\n if (this.initialized) {\n this.sound.remove();\n }\n }\n canPlay() {\n var _a;\n if ((_a = _settings_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getSetting('sound.muted')) === null || _a === void 0 ? void 0 : _a.value) {\n return false;\n }\n const setting = _settings_Settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getSetting(`sound.${this.name}`);\n if (!setting) {\n return true;\n }\n return !!setting.value;\n }\n toJSON() {\n return {\n name: this.name,\n };\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/Sound.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/TextMerger.ts": +/*!*********************************************!*\ + !*** ./src/modules/utilities/TextMerger.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TextMerger)\n/* harmony export */ });\nclass TextMerger {\n static mergeText(text) {\n if (this.mergeValues == null) {\n this.buildMergeValues();\n }\n const mergeSubstrings = text.match(/\\$[a-zA-Z]*\\$/g);\n if (mergeSubstrings == null) {\n return text;\n }\n let textResult = text;\n mergeSubstrings.forEach((s) => {\n const key = s.substring(1, s.length - 1).toLocaleLowerCase();\n if (this.mergeValues[key]()) {\n textResult = textResult.replace(s, this.escapeHtml(this.mergeValues[key]()));\n }\n });\n return textResult;\n }\n static buildMergeValues() {\n this.mergeValues = {\n playername: App.game.profile.name,\n };\n }\n static escapeHtml(text) {\n TextMerger.tempElementForEscape.textContent = text;\n return TextMerger.tempElementForEscape.innerHTML;\n }\n}\nTextMerger.tempElementForEscape = document.createElement('textarea');\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/TextMerger.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/UI.ts": +/*!*************************************!*\ + !*** ./src/modules/utilities/UI.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"animateCurrency\": () => (/* binding */ animateCurrency)\n/* harmony export */ });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Rand__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Rand */ \"./src/modules/utilities/Rand.ts\");\n// Utilities for controlling the user interface\n\n\n\n// eslint-disable-next-line import/prefer-default-export\nfunction animateCurrency({ amount, currency }) {\n // Check if animations have been disabled\n if (amount > 0 && !_settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getSetting('showCurrencyGainedAnimation').observableValue()) {\n return;\n }\n if (amount < 0 && !_settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getSetting('showCurrencyLostAnimation').observableValue()) {\n return;\n }\n const target = $(`#animateCurrency-${_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency[currency]}`);\n // If no target for this currency, return\n if (!target.length || !target.is(':visible')) {\n return;\n }\n // Add some randomness to where it appears\n const left = (target.position().left + _Rand__WEBPACK_IMPORTED_MODULE_2__[\"default\"].float(target.width() - 25)).toFixed(2);\n const top = target.position().top;\n const aniElement = document.createElement('p');\n aniElement.className = `${amount > 0 ? '' : 'text-danger'} animated-currency`;\n aniElement.style.cssText = `top: ${top}px; left: ${left}px; font-size: ${10 + 0.5 * Math.log(Math.abs(amount))}px;`;\n aniElement.innerText = `${amount > 0 ? '+' : ''}${amount.toLocaleString('en-US')}`;\n const animationDirection = amount > 0 ? { top: top - 100 } : { top: top + 50 };\n // Shorter animation for currency lost\n const animationTime = 200 * Math.log(Math.abs(amount)) + (amount > 0 ? 1000 : 600);\n // Append to parent container, animate and remove\n $(aniElement).prependTo(target.parent()).animate(Object.assign(Object.assign({}, animationDirection), { opacity: 0 }), animationTime, 'linear', () => {\n $(aniElement).remove();\n });\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/UI.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/arrayUtils.ts": +/*!*********************************************!*\ + !*** ./src/modules/utilities/arrayUtils.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"findRight\": () => (/* binding */ findRight)\n/* harmony export */ });\nfunction findRight(arr, pred) {\n if (!arr.length) {\n return undefined;\n }\n for (let i = arr.length - 1; i >= 0; i--) {\n if (pred(arr[i], i, arr)) {\n return arr[i];\n }\n }\n return undefined;\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/arrayUtils.ts?"); + +/***/ }), + +/***/ "./src/modules/utilities/memoize.ts": +/*!******************************************!*\ + !*** ./src/modules/utilities/memoize.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ memoize)\n/* harmony export */ });\n/**\n * Wraps a function with a cache of previous results, returns values from cache when possible\n * Resolver can return null to skip caching\n * @param func The function to memoize\n * @param resolver A function to determine cache key from arguments. Defaults to just using the first argument\n * @returns memoized version of func\n */\nfunction memoize(func, resolver = (...args) => args[0]) {\n const cache = new Map();\n const memoized = (...args) => {\n const key = resolver(...args);\n if (key !== null && cache.has(key)) {\n return cache.get(key);\n }\n const val = func(...args);\n if (key !== null)\n cache.set(key, val);\n return val;\n };\n return memoized;\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/utilities/memoize.ts?"); + +/***/ }), + +/***/ "./src/modules/wallet/Amount.ts": +/*!**************************************!*\ + !*** ./src/modules/wallet/Amount.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Amount)\n/* harmony export */ });\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n\nclass Amount {\n constructor(amount, currency) {\n this.amount = amount;\n this.currency = currency;\n this.amount = Math.round(amount);\n this.currency = currency;\n }\n toString() {\n return `Amount(${this.amount}, ${_GameConstants__WEBPACK_IMPORTED_MODULE_0__.Currency[this.currency]})`;\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/wallet/Amount.ts?"); + +/***/ }), + +/***/ "./src/modules/wallet/AmountFactory.ts": +/*!*********************************************!*\ + !*** ./src/modules/wallet/AmountFactory.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AmountFactory)\n/* harmony export */ });\n/* harmony import */ var _Amount__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Amount */ \"./src/modules/wallet/Amount.ts\");\n\nclass AmountFactory {\n static createArray(amounts, currency) {\n return amounts.map((amt) => new _Amount__WEBPACK_IMPORTED_MODULE_0__[\"default\"](amt, currency));\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/wallet/AmountFactory.ts?"); + +/***/ }), + +/***/ "./src/modules/wallet/Wallet.ts": +/*!**************************************!*\ + !*** ./src/modules/wallet/Wallet.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Wallet)\n/* harmony export */ });\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _Amount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Amount */ \"./src/modules/wallet/Amount.ts\");\n/* harmony import */ var _utilities_UI__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utilities/UI */ \"./src/modules/utilities/UI.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../settings */ \"./src/modules/settings/index.ts\");\n\n\n\n\n\nclass Wallet {\n constructor(multiplier) {\n this.multiplier = multiplier;\n this.name = 'Wallet';\n this.saveKey = 'wallet';\n this.defaults = {\n currencies: new Array(_GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].enumLength(_GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency)).fill(0),\n };\n this.currencies = this.defaults.currencies.map((v) => ko.observable(v));\n }\n gainMoney(base, ignoreBonus = false) {\n return this.addAmount(new _Amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"](base, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.money), ignoreBonus);\n }\n gainDungeonTokens(base, ignoreBonus = false) {\n return this.addAmount(new _Amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"](base, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.dungeonToken), ignoreBonus);\n }\n gainQuestPoints(base, ignoreBonus = false) {\n return this.addAmount(new _Amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"](base, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.questPoint), ignoreBonus);\n }\n gainDiamonds(base, ignoreBonus = false) {\n return this.addAmount(new _Amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"](base, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond), ignoreBonus);\n }\n gainFarmPoints(base, ignoreBonus = false) {\n return this.addAmount(new _Amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"](base, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.farmPoint), ignoreBonus);\n }\n gainBattlePoints(base, ignoreBonus = false) {\n return this.addAmount(new _Amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"](base, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.battlePoint), ignoreBonus);\n }\n gainContestTokens(base, ignoreBonus = false) {\n return this.addAmount(new _Amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"](base, _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.contestToken), ignoreBonus);\n }\n calcBonus(amount) {\n switch (amount.currency) {\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.money:\n return this.multiplier.getBonus('money', true);\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.dungeonToken:\n return this.multiplier.getBonus('dungeonToken', true);\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.questPoint:\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond:\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.farmPoint:\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.battlePoint:\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.contestToken:\n default:\n return 1;\n }\n }\n addAmount(amount, ignoreBonus = false) {\n if (Number.isNaN(amount.amount) || amount.amount <= 0) {\n console.trace('Could not add amount:', amount);\n amount.amount = 1;\n }\n // Calculate the bonuses\n if (!ignoreBonus) {\n amount.amount = Math.floor(amount.amount * this.calcBonus(amount));\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(this.currencies[amount.currency], amount.amount);\n (0,_utilities_UI__WEBPACK_IMPORTED_MODULE_3__.animateCurrency)(amount);\n switch (amount.currency) {\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.money:\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(App.game.statistics.totalMoney, amount.amount);\n break;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.dungeonToken:\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(App.game.statistics.totalDungeonTokens, amount.amount);\n break;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.questPoint:\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(App.game.statistics.totalQuestPoints, amount.amount);\n break;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.diamond:\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(App.game.statistics.totalDiamonds, amount.amount);\n break;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.farmPoint:\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(App.game.statistics.totalFarmPoints, amount.amount);\n break;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.battlePoint:\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(App.game.statistics.totalBattlePoints, amount.amount);\n break;\n case _GameConstants__WEBPACK_IMPORTED_MODULE_1__.Currency.contestToken:\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(App.game.statistics.totalContestTokens, amount.amount);\n break;\n default:\n break;\n }\n return amount;\n }\n hasAmount(amount) {\n return this.currencies[amount.currency]() >= amount.amount;\n }\n loseAmount(amount) {\n if (Number.isNaN(amount.amount) || amount.amount <= 0) {\n console.trace('Could not remove amount:', amount);\n amount.amount = 1;\n }\n // If the player doesn't have enough, return false (we shouldn't be able to go negative)\n if (!this.hasAmount(amount)) {\n return false;\n }\n _GameHelper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].incrementObservable(this.currencies[amount.currency], -amount.amount);\n (0,_utilities_UI__WEBPACK_IMPORTED_MODULE_3__.animateCurrency)(Object.assign(Object.assign({}, amount), { amount: -amount.amount }));\n return true;\n }\n amountText(currency) {\n return _settings__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getSetting('currencyMainDisplayReduced').observableValue()\n ? (0,_GameConstants__WEBPACK_IMPORTED_MODULE_1__.formatNumber)(this.currencies[currency]())\n : this.currencies[currency]().toLocaleString('en-US');\n }\n initialize() {\n }\n canAccess() {\n return true;\n }\n fromJSON(json) {\n if (json == null) {\n return;\n }\n this.currencies = this.defaults.currencies.map((v) => ko.observable(v));\n if (json.currencies !== null) {\n const currenciesJson = json.currencies;\n currenciesJson.forEach((value, index) => {\n this.currencies[index](value || 0);\n });\n }\n }\n toJSON() {\n return {\n currencies: this.currencies.map(ko.unwrap),\n };\n }\n update() {\n // This method intentionally left blank\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/wallet/Wallet.ts?"); + +/***/ }), + +/***/ "./src/modules/wallet/inject.ts": +/*!**************************************!*\ + !*** ./src/modules/wallet/inject.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _Amount__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Amount */ \"./src/modules/wallet/Amount.ts\");\n/* harmony import */ var _AmountFactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AmountFactory */ \"./src/modules/wallet/AmountFactory.ts\");\n/* harmony import */ var _Wallet__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Wallet */ \"./src/modules/wallet/Wallet.ts\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n Amount: _Amount__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n AmountFactory: _AmountFactory__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n Wallet: _Wallet__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n});\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/wallet/inject.ts?"); + +/***/ }), + +/***/ "./src/modules/weather/RegionalForecast.ts": +/*!*************************************************!*\ + !*** ./src/modules/weather/RegionalForecast.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RegionalForecast)\n/* harmony export */ });\nclass RegionalForecast {\n constructor(region, weatherForecastList = []) {\n this.region = region;\n this.weatherForecastList = ko.observableArray(weatherForecastList);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/weather/RegionalForecast.ts?"); + +/***/ }), + +/***/ "./src/modules/weather/Weather.ts": +/*!****************************************!*\ + !*** ./src/modules/weather/Weather.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Weather)\n/* harmony export */ });\n/* harmony import */ var _WeatherType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./WeatherType */ \"./src/modules/weather/WeatherType.ts\");\n/* harmony import */ var _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./WeatherCondition */ \"./src/modules/weather/WeatherCondition.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n/* harmony import */ var _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utilities/SeededRand */ \"./src/modules/utilities/SeededRand.ts\");\n\n\n\n\n\n\nclass Weather {\n /**\n * Generates the current Weather condition\n * @param date The current date\n */\n static generateWeather(date) {\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_5__[\"default\"].seedWithDateHour(date, this.period);\n Weather.regionalWeather.forEach((weather, region) => {\n // If no distribution set, assume all weather available\n const dist = Weather.weatherDistribution[region] || _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].enumNumbers(_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n // Select weather based on weighted odds\n const selectedWeather = _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_5__[\"default\"].fromWeightedArray(dist, dist.map((w) => Weather.weatherConditions[w].weight));\n // Set selected weather or Clear if failed\n weather(selectedWeather || _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Clear);\n });\n }\n /**\n * Gets the weather for a region at a certain date\n * @param date\n * @param region\n * @returns WeatherType\n */\n static getWeather(region, date = new Date()) {\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_5__[\"default\"].seedWithDateHour(date, Weather.period);\n for (let i = 0; i < region; i++) {\n _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_5__[\"default\"].next();\n }\n // If no distribution set, assume all weather available\n const dist = Weather.weatherDistribution[region] || _GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].enumNumbers(_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n // Select weather based on weighted odds\n const selectedWeather = _utilities_SeededRand__WEBPACK_IMPORTED_MODULE_5__[\"default\"].fromWeightedArray(dist, dist.map((w) => Weather.weatherConditions[w].weight));\n return selectedWeather;\n }\n}\nWeather.regionalWeather = Array(_GameHelper__WEBPACK_IMPORTED_MODULE_2__[\"default\"].enumLength(_GameConstants__WEBPACK_IMPORTED_MODULE_3__.Region)).fill(_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Clear).map((v) => ko.observable(v));\nWeather.currentWeather = ko.pureComputed(() => {\n const weather = Weather.regionalWeather[player.region]();\n // TODO: Add weather overrides\n return weather;\n});\nWeather.image = ko.pureComputed(() => {\n return `assets/images/weather/${_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][Weather.currentWeather()]}.png`;\n});\nWeather.color = ko.pureComputed(() => {\n return Weather.weatherConditions[Weather.currentWeather()].color;\n});\nWeather.tooltip = ko.pureComputed(() => {\n return Weather.weatherConditions[Weather.currentWeather()].tooltip;\n});\nWeather.weatherConditions = {\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Clear]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Clear, '#ffe57a', 'The weather is clear and pleasant.', 30),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Overcast]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Overcast, '#a7db8d', 'Clouds fill the skies.', 15, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Normal, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Fighting, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Poison, multiplier: 1.1 }]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rain]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rain, '#9db7f5', 'It\\'s rainy and humid.', 10, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Water, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Bug, multiplier: 1.1 }]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Thunderstorm]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Thunderstorm, '#a19288', 'It\\'s currently raining heavily with thunder.', 10, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Electric, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Water, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Fire, multiplier: 0.9 }]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Snow]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Snow, '#bbe6e6', 'It\\'s cold and snowing.', 5, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Fairy, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Ice, multiplier: 1.05 }]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Hail]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Hail, '#74e6e6', 'It\\'s cold and hailing.', 2, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Ice, multiplier: 1.1 }]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Blizzard]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Blizzard, '#98d8d8', 'A howling blizzard blows.', 5, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Ice, multiplier: 1.2 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Steel, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Fire, multiplier: 0.9 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Grass, multiplier: 0.9 }]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Harsh_Sunlight]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Harsh_Sunlight, '#f5ac78', 'The sunlight is strong.', 10, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Fire, multiplier: 1.2 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Grass, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Water, multiplier: 0.9 }]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Sandstorm]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Sandstorm, '#d1c07d', 'A sandstorm is raging.', 10, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Rock, multiplier: 1.1 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Ground, multiplier: 1.1 }]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fog]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fog, '#d2c2ef', 'The fog is deep...', 10, [\n { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Ghost, multiplier: 1.2 },\n { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Psychic, multiplier: 1.1 },\n { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Dark, multiplier: 1.1 },\n { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Electric, multiplier: 0.9 },\n ]),\n [_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Windy]: new _WeatherCondition__WEBPACK_IMPORTED_MODULE_1__[\"default\"](_WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Windy, '#81c4ca', 'Mysterious strong winds blow.', 3, [{ type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Flying, multiplier: 1.2 }, { type: _enums_PokemonType__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Dragon, multiplier: 1.1 }]),\n};\n/**\n * The probability distribution for Weather conditions\n */\nWeather.weatherDistribution = {\n [_GameConstants__WEBPACK_IMPORTED_MODULE_3__.Region.kanto]: [\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Clear,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Overcast,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rain,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Thunderstorm,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Harsh_Sunlight,\n ],\n [_GameConstants__WEBPACK_IMPORTED_MODULE_3__.Region.johto]: [\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Clear,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Overcast,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rain,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Thunderstorm,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Snow,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Hail,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Blizzard,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Harsh_Sunlight,\n ],\n [_GameConstants__WEBPACK_IMPORTED_MODULE_3__.Region.hoenn]: [\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Clear,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Overcast,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rain,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Thunderstorm,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Snow,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Hail,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Blizzard,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Harsh_Sunlight,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Sandstorm,\n ],\n [_GameConstants__WEBPACK_IMPORTED_MODULE_3__.Region.sinnoh]: [\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Clear,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Overcast,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Rain,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Thunderstorm,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Snow,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Hail,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Blizzard,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Harsh_Sunlight,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Sandstorm,\n _WeatherType__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fog,\n ],\n};\n/**\n * The period for Weather changes (in hours)\n */\nWeather.period = 4;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/weather/Weather.ts?"); + +/***/ }), + +/***/ "./src/modules/weather/WeatherApp.ts": +/*!*******************************************!*\ + !*** ./src/modules/weather/WeatherApp.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ WeatherApp)\n/* harmony export */ });\n/* harmony import */ var _RegionalForecast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RegionalForecast */ \"./src/modules/weather/RegionalForecast.ts\");\n/* harmony import */ var _Weather__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Weather */ \"./src/modules/weather/Weather.ts\");\n/* harmony import */ var _WeatherForecast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./WeatherForecast */ \"./src/modules/weather/WeatherForecast.ts\");\n/* harmony import */ var _GameHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GameHelper */ \"./src/modules/GameHelper.ts\");\n/* harmony import */ var _GameConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../GameConstants */ \"./src/modules/GameConstants.ts\");\n/* harmony import */ var _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../notifications/Notifier */ \"./src/modules/notifications/Notifier.ts\");\n/* harmony import */ var _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../notifications/NotificationConstants */ \"./src/modules/notifications/NotificationConstants.ts\");\n\n\n\n\n\n\n\nclass WeatherApp {\n constructor() {\n this.saveKey = 'weatherapp';\n }\n /**\n * Generates the forecasts for all regions\n */\n static generateAllRegionsForecast() {\n _GameHelper__WEBPACK_IMPORTED_MODULE_3__[\"default\"].enumNumbers(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region).forEach((r) => {\n WeatherApp.generateRegionalForecast(r);\n });\n }\n /**\n * Generates the forecast for a single region\n * @param region\n * @param dateRange\n * @param date\n */\n static generateRegionalForecast(region, dateRange = WeatherApp.defaultDateRange, date = new Date()) {\n const weatherForecastList = [];\n // Creates forecasts for X hour\n for (let hour = 0; hour <= 23; hour += _Weather__WEBPACK_IMPORTED_MODULE_1__[\"default\"].period) {\n const hourForecast = [];\n const newDate = new Date(date.setHours(hour, 0, 0, 0));\n // Gets the weather for every day for that hour\n for (let i = 0; i < dateRange; i++) {\n const weatherForecastDate = new Date(newDate);\n const weatherForecast = new _WeatherForecast__WEBPACK_IMPORTED_MODULE_2__[\"default\"](weatherForecastDate, _Weather__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getWeather(region, newDate));\n hourForecast.push(weatherForecast);\n newDate.setDate(newDate.getDate() + 1);\n }\n weatherForecastList.push(hourForecast);\n }\n WeatherApp.addRegionalForecast(new _RegionalForecast__WEBPACK_IMPORTED_MODULE_0__[\"default\"](region, weatherForecastList));\n }\n /**\n * Generate the date list for the table\n * @param dateRange\n * @param date\n */\n static generateDateList(dateRange = WeatherApp.defaultDateRange, date = new Date()) {\n WeatherApp.dateList([]);\n const newDate = new Date(date.setHours(0, 0, 0, 0));\n const dateList = [];\n for (let i = 0; i < dateRange; i++) {\n dateList.push(new Date(newDate));\n newDate.setDate(newDate.getDate() + 1);\n }\n WeatherApp.dateList(dateList);\n }\n /**\n * Generate the hour list for the table\n * @returns number[]\n */\n static generateHourList() {\n const hourList = [];\n for (let i = 0; i <= 23; i++) {\n if (i % _Weather__WEBPACK_IMPORTED_MODULE_1__[\"default\"].period === 0) {\n hourList.push(i);\n }\n }\n return hourList;\n }\n /**\n * Adds the regional forecast to the forecast list\n * @param regionalForecast\n */\n static addRegionalForecast(regionalForecast) {\n let exist = false;\n WeatherApp.fullForecast().map((rf) => {\n if (rf.region === regionalForecast.region) {\n rf.weatherForecastList([]);\n rf.weatherForecastList(regionalForecast.weatherForecastList());\n exist = true;\n }\n });\n if (!exist) {\n WeatherApp.fullForecast().push(regionalForecast);\n }\n }\n /**\n * Checks if the date in the weather forecast has already passed and set the status if it does\n */\n static checkDateHasPassed() {\n const now = new Date();\n WeatherApp.fullForecast().forEach((rf) => {\n // Full forecast\n // Set status to hasPassed if weather end date has passed already\n rf.weatherForecastList().flat().map((wf) => {\n const weatherEndDate = new Date(new Date(wf.date).setHours(wf.date.getHours() + _Weather__WEBPACK_IMPORTED_MODULE_1__[\"default\"].period, 0, 0, 0));\n if (now > weatherEndDate) {\n wf.setStatusHasPassed();\n }\n });\n });\n }\n /**\n * Functions to initialize on load\n */\n static initialize() {\n WeatherApp.generateAllRegionsForecast();\n WeatherApp.generateDateList();\n WeatherApp.checkDateHasPassed();\n }\n /**\n * Checks if the Weather App is unlocked\n * @returns boolean\n */\n static isUnlocked() {\n return App.game.statistics.dungeonsCleared[(0,_GameConstants__WEBPACK_IMPORTED_MODULE_4__.getDungeonIndex)('Weather Institute')]() > 0;\n }\n /**\n * Opens the Weather App modal.\n */\n static openWeatherAppModal() {\n if (WeatherApp.isUnlocked()) {\n $('#weatherAppModal').modal('show');\n }\n else {\n _notifications_Notifier__WEBPACK_IMPORTED_MODULE_5__[\"default\"].notify({\n message: 'You need to clear Weather Institute first to unlock this feature.',\n type: _notifications_NotificationConstants__WEBPACK_IMPORTED_MODULE_6__[\"default\"].NotificationOption.warning,\n });\n }\n }\n // Save stuff\n fromJSON(json) {\n if (json == null) {\n return;\n }\n WeatherApp.selectedRegion(json.selectedRegion);\n }\n toJSON() {\n return {\n selectedRegion: WeatherApp.selectedRegion(),\n };\n }\n}\nWeatherApp.fullForecast = ko.observableArray([]);\nWeatherApp.selectedRegion = ko.observable(_GameConstants__WEBPACK_IMPORTED_MODULE_4__.Region.hoenn);\nWeatherApp.dateList = ko.observableArray([]);\nWeatherApp.defaultDateRange = 7;\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/weather/WeatherApp.ts?"); + +/***/ }), + +/***/ "./src/modules/weather/WeatherCondition.ts": +/*!*************************************************!*\ + !*** ./src/modules/weather/WeatherCondition.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ WeatherCondition)\n/* harmony export */ });\n/* harmony import */ var _enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/PokemonType */ \"./src/modules/enums/PokemonType.ts\");\n\nclass WeatherCondition {\n constructor(type, color, description, weight, multipliers = []) {\n this.type = type;\n this.color = color;\n this.description = description;\n this.weight = weight;\n this.multipliers = multipliers;\n }\n get tooltip() {\n const tooltip = [];\n tooltip.push(this.description);\n this.multipliers.forEach((v) => {\n tooltip.push(`${_enums_PokemonType__WEBPACK_IMPORTED_MODULE_0__[\"default\"][v.type]}: ${v.multiplier.toFixed(2)}x`);\n });\n return tooltip.join('
');\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/weather/WeatherCondition.ts?"); + +/***/ }), + +/***/ "./src/modules/weather/WeatherForecast.ts": +/*!************************************************!*\ + !*** ./src/modules/weather/WeatherForecast.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ WeatherForecast)\n/* harmony export */ });\n/* harmony import */ var _enums_WeatherForecastStatus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/WeatherForecastStatus */ \"./src/modules/enums/WeatherForecastStatus.ts\");\n\nclass WeatherForecast {\n constructor(date, weatherType, status = _enums_WeatherForecastStatus__WEBPACK_IMPORTED_MODULE_0__[\"default\"].disabled) {\n this.date = date;\n this.weatherType = weatherType;\n this.status = ko.observable(status);\n }\n setStatusHasPassed() {\n this.status(_enums_WeatherForecastStatus__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasPassed);\n }\n}\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/weather/WeatherForecast.ts?"); + +/***/ }), + +/***/ "./src/modules/weather/WeatherType.ts": +/*!********************************************!*\ + !*** ./src/modules/weather/WeatherType.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar WeatherType;\n(function (WeatherType) {\n WeatherType[WeatherType[\"Clear\"] = 0] = \"Clear\";\n WeatherType[WeatherType[\"Overcast\"] = 1] = \"Overcast\";\n WeatherType[WeatherType[\"Rain\"] = 2] = \"Rain\";\n WeatherType[WeatherType[\"Thunderstorm\"] = 3] = \"Thunderstorm\";\n WeatherType[WeatherType[\"Snow\"] = 4] = \"Snow\";\n WeatherType[WeatherType[\"Hail\"] = 5] = \"Hail\";\n WeatherType[WeatherType[\"Blizzard\"] = 6] = \"Blizzard\";\n WeatherType[WeatherType[\"Harsh_Sunlight\"] = 7] = \"Harsh_Sunlight\";\n WeatherType[WeatherType[\"Sandstorm\"] = 8] = \"Sandstorm\";\n WeatherType[WeatherType[\"Fog\"] = 9] = \"Fog\";\n WeatherType[WeatherType[\"Windy\"] = 10] = \"Windy\";\n})(WeatherType || (WeatherType = {}));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WeatherType);\n\n\n//# sourceURL=webpack://pokeclicker/./src/modules/weather/WeatherType.ts?"); + +/***/ }), + +/***/ "./node_modules/i18next-http-backend/esm/getFetch.cjs": +/*!************************************************************!*\ + !*** ./node_modules/i18next-http-backend/esm/getFetch.cjs ***! + \************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +eval("var fetchApi\nif (typeof fetch === 'function') {\n if (typeof __webpack_require__.g !== 'undefined' && __webpack_require__.g.fetch) {\n fetchApi = __webpack_require__.g.fetch\n } else if (typeof window !== 'undefined' && window.fetch) {\n fetchApi = window.fetch\n } else {\n fetchApi = fetch\n }\n}\n\nif ( true && (typeof window === 'undefined' || typeof window.document === 'undefined')) {\n var f = fetchApi || __webpack_require__(/*! cross-fetch */ \"./node_modules/cross-fetch/dist/browser-ponyfill.js\")\n if (f.default) f = f.default\n exports[\"default\"] = f\n module.exports = exports.default\n}\n\n\n//# sourceURL=webpack://pokeclicker/./node_modules/i18next-http-backend/esm/getFetch.cjs?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _arrayLikeToArray)\n/* harmony export */ });\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _arrayWithHoles)\n/* harmony export */ });\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _assertThisInitialized)\n/* harmony export */ });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _classCallCheck)\n/* harmony export */ });\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/createClass.js": +/*!****************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/createClass.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _createClass)\n/* harmony export */ });\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/createClass.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _defineProperty)\n/* harmony export */ });\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/defineProperty.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _getPrototypeOf)\n/* harmony export */ });\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/inherits.js": +/*!*************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/inherits.js ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _inherits)\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(subClass, superClass);\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/inherits.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js": +/*!********************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***! + \********************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _iterableToArray)\n/* harmony export */ });\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js": +/*!********************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***! + \********************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _nonIterableRest)\n/* harmony export */ });\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _possibleConstructorReturn)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assertThisInitialized.js */ \"./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && ((0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return (0,_assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(self);\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _setPrototypeOf)\n/* harmony export */ });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/toArray.js": +/*!************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/toArray.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _toArray)\n/* harmony export */ });\n/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ \"./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\");\n/* harmony import */ var _iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\");\n/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ \"./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\");\n\n\n\n\nfunction _toArray(arr) {\n return (0,_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || (0,_iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr) || (0,_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/toArray.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/typeof.js": +/*!***********************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _typeof)\n/* harmony export */ });\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/typeof.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _unsupportedIterableToArray)\n/* harmony export */ });\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js?"); + +/***/ }), + +/***/ "./node_modules/i18next-http-backend/esm/index.js": +/*!********************************************************!*\ + !*** ./node_modules/i18next-http-backend/esm/index.js ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \"./node_modules/i18next-http-backend/esm/utils.js\");\n/* harmony import */ var _request_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./request.js */ \"./node_modules/i18next-http-backend/esm/request.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nvar getDefaults = function getDefaults() {\n return {\n loadPath: '/locales/{{lng}}/{{ns}}.json',\n addPath: '/locales/add/{{lng}}/{{ns}}',\n allowMultiLoading: false,\n parse: function parse(data) {\n return JSON.parse(data);\n },\n stringify: JSON.stringify,\n parsePayload: function parsePayload(namespace, key, fallbackValue) {\n return _defineProperty({}, key, fallbackValue || '');\n },\n request: _request_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n reloadInterval: typeof window !== 'undefined' ? false : 60 * 60 * 1000,\n customHeaders: {},\n queryStringParams: {},\n crossDomain: false,\n withCredentials: false,\n overrideMimeType: false,\n requestOptions: {\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'default'\n }\n };\n};\n\nvar Backend = function () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, Backend);\n\n this.services = services;\n this.options = options;\n this.allOptions = allOptions;\n this.type = 'backend';\n this.init(services, options, allOptions);\n }\n\n _createClass(Backend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.defaults)(options, this.options || {}, getDefaults());\n this.allOptions = allOptions;\n\n if (this.services && this.options.reloadInterval) {\n setInterval(function () {\n return _this.reload();\n }, this.options.reloadInterval);\n }\n }\n }, {\n key: \"readMulti\",\n value: function readMulti(languages, namespaces, callback) {\n this._readAny(languages, languages, namespaces, namespaces, callback);\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n this._readAny([language], language, [namespace], namespace, callback);\n }\n }, {\n key: \"_readAny\",\n value: function _readAny(languages, loadUrlLanguages, namespaces, loadUrlNamespaces, callback) {\n var _this2 = this;\n\n var loadPath = this.options.loadPath;\n\n if (typeof this.options.loadPath === 'function') {\n loadPath = this.options.loadPath(languages, namespaces);\n }\n\n loadPath = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.makePromise)(loadPath);\n loadPath.then(function (resolvedLoadPath) {\n if (!resolvedLoadPath) return callback(null, {});\n\n var url = _this2.services.interpolator.interpolate(resolvedLoadPath, {\n lng: languages.join('+'),\n ns: namespaces.join('+')\n });\n\n _this2.loadUrl(url, callback, loadUrlLanguages, loadUrlNamespaces);\n });\n }\n }, {\n key: \"loadUrl\",\n value: function loadUrl(url, callback, languages, namespaces) {\n var _this3 = this;\n\n this.options.request(this.options, url, undefined, function (err, res) {\n if (res && (res.status >= 500 && res.status < 600 || !res.status)) return callback('failed loading ' + url + '; status code: ' + res.status, true);\n if (res && res.status >= 400 && res.status < 500) return callback('failed loading ' + url + '; status code: ' + res.status, false);\n if (!res && err && err.message && err.message.indexOf('Failed to fetch') > -1) return callback('failed loading ' + url + ': ' + err.message, true);\n if (err) return callback(err, false);\n var ret, parseErr;\n\n try {\n if (typeof res.data === 'string') {\n ret = _this3.options.parse(res.data, languages, namespaces);\n } else {\n ret = res.data;\n }\n } catch (e) {\n parseErr = 'failed parsing ' + url + ' to json';\n }\n\n if (parseErr) return callback(parseErr, false);\n callback(null, ret);\n });\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue, callback) {\n var _this4 = this;\n\n if (!this.options.addPath) return;\n if (typeof languages === 'string') languages = [languages];\n var payload = this.options.parsePayload(namespace, key, fallbackValue);\n var finished = 0;\n var dataArray = [];\n var resArray = [];\n languages.forEach(function (lng) {\n var addPath = _this4.options.addPath;\n\n if (typeof _this4.options.addPath === 'function') {\n addPath = _this4.options.addPath(lng, namespace);\n }\n\n var url = _this4.services.interpolator.interpolate(addPath, {\n lng: lng,\n ns: namespace\n });\n\n _this4.options.request(_this4.options, url, payload, function (data, res) {\n finished += 1;\n dataArray.push(data);\n resArray.push(res);\n\n if (finished === languages.length) {\n if (callback) callback(dataArray, resArray);\n }\n });\n });\n }\n }, {\n key: \"reload\",\n value: function reload() {\n var _this5 = this;\n\n var _this$services = this.services,\n backendConnector = _this$services.backendConnector,\n languageUtils = _this$services.languageUtils,\n logger = _this$services.logger;\n var currentLanguage = backendConnector.language;\n if (currentLanguage && currentLanguage.toLowerCase() === 'cimode') return;\n var toLoad = [];\n\n var append = function append(lng) {\n var lngs = languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n\n append(currentLanguage);\n if (this.allOptions.preload) this.allOptions.preload.forEach(function (l) {\n return append(l);\n });\n toLoad.forEach(function (lng) {\n _this5.allOptions.ns.forEach(function (ns) {\n backendConnector.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) logger.warn(\"loading namespace \".concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) logger.log(\"loaded namespace \".concat(ns, \" for language \").concat(lng), data);\n backendConnector.loaded(\"\".concat(lng, \"|\").concat(ns), err, data);\n });\n });\n });\n }\n }]);\n\n return Backend;\n}();\n\nBackend.type = 'backend';\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Backend);\n\n//# sourceURL=webpack://pokeclicker/./node_modules/i18next-http-backend/esm/index.js?"); + +/***/ }), + +/***/ "./node_modules/i18next-http-backend/esm/request.js": +/*!**********************************************************!*\ + !*** ./node_modules/i18next-http-backend/esm/request.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("var _getFetch_cjs__WEBPACK_IMPORTED_MODULE_1___namespace_cache;\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \"./node_modules/i18next-http-backend/esm/utils.js\");\n/* harmony import */ var _getFetch_cjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getFetch.cjs */ \"./node_modules/i18next-http-backend/esm/getFetch.cjs\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n\n\nvar fetchApi;\n\nif (typeof fetch === 'function') {\n if (typeof global !== 'undefined' && global.fetch) {\n fetchApi = global.fetch;\n } else if (typeof window !== 'undefined' && window.fetch) {\n fetchApi = window.fetch;\n } else {\n fetchApi = fetch;\n }\n}\n\nvar XmlHttpRequestApi;\n\nif ((0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.hasXMLHttpRequest)()) {\n if (typeof global !== 'undefined' && global.XMLHttpRequest) {\n XmlHttpRequestApi = global.XMLHttpRequest;\n } else if (typeof window !== 'undefined' && window.XMLHttpRequest) {\n XmlHttpRequestApi = window.XMLHttpRequest;\n }\n}\n\nvar ActiveXObjectApi;\n\nif (typeof ActiveXObject === 'function') {\n if (typeof global !== 'undefined' && global.ActiveXObject) {\n ActiveXObjectApi = global.ActiveXObject;\n } else if (typeof window !== 'undefined' && window.ActiveXObject) {\n ActiveXObjectApi = window.ActiveXObject;\n }\n}\n\nif (!fetchApi && /*#__PURE__*/ (_getFetch_cjs__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (_getFetch_cjs__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(_getFetch_cjs__WEBPACK_IMPORTED_MODULE_1__, 2))) && !XmlHttpRequestApi && !ActiveXObjectApi) fetchApi = _getFetch_cjs__WEBPACK_IMPORTED_MODULE_1__ || /*#__PURE__*/ (_getFetch_cjs__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (_getFetch_cjs__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(_getFetch_cjs__WEBPACK_IMPORTED_MODULE_1__, 2)));\nif (typeof fetchApi !== 'function') fetchApi = undefined;\n\nvar addQueryString = function addQueryString(url, params) {\n if (params && _typeof(params) === 'object') {\n var queryString = '';\n\n for (var paramName in params) {\n queryString += '&' + encodeURIComponent(paramName) + '=' + encodeURIComponent(params[paramName]);\n }\n\n if (!queryString) return url;\n url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n }\n\n return url;\n};\n\nvar fetchIt = function fetchIt(url, fetchOptions, callback) {\n fetchApi(url, fetchOptions).then(function (response) {\n if (!response.ok) return callback(response.statusText || 'Error', {\n status: response.status\n });\n response.text().then(function (data) {\n callback(null, {\n status: response.status,\n data: data\n });\n }).catch(callback);\n }).catch(callback);\n};\n\nvar omitFetchOptions = false;\n\nvar requestWithFetch = function requestWithFetch(options, url, payload, callback) {\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n\n var headers = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.defaults)({}, typeof options.customHeaders === 'function' ? options.customHeaders() : options.customHeaders);\n if (payload) headers['Content-Type'] = 'application/json';\n var reqOptions = typeof options.requestOptions === 'function' ? options.requestOptions(payload) : options.requestOptions;\n var fetchOptions = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.defaults)({\n method: payload ? 'POST' : 'GET',\n body: payload ? options.stringify(payload) : undefined,\n headers: headers\n }, omitFetchOptions ? {} : reqOptions);\n\n try {\n fetchIt(url, fetchOptions, callback);\n } catch (e) {\n if (!reqOptions || Object.keys(reqOptions).length === 0 || !e.message || e.message.indexOf('not implemented') < 0) {\n return callback(e);\n }\n\n try {\n Object.keys(reqOptions).forEach(function (opt) {\n delete fetchOptions[opt];\n });\n fetchIt(url, fetchOptions, callback);\n omitFetchOptions = true;\n } catch (err) {\n callback(err);\n }\n }\n};\n\nvar requestWithXmlHttpRequest = function requestWithXmlHttpRequest(options, url, payload, callback) {\n if (payload && _typeof(payload) === 'object') {\n payload = addQueryString('', payload).slice(1);\n }\n\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n\n try {\n var x;\n\n if (XmlHttpRequestApi) {\n x = new XmlHttpRequestApi();\n } else {\n x = new ActiveXObjectApi('MSXML2.XMLHTTP.3.0');\n }\n\n x.open(payload ? 'POST' : 'GET', url, 1);\n\n if (!options.crossDomain) {\n x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n x.withCredentials = !!options.withCredentials;\n\n if (payload) {\n x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n if (x.overrideMimeType) {\n x.overrideMimeType('application/json');\n }\n\n var h = options.customHeaders;\n h = typeof h === 'function' ? h() : h;\n\n if (h) {\n for (var i in h) {\n x.setRequestHeader(i, h[i]);\n }\n }\n\n x.onreadystatechange = function () {\n x.readyState > 3 && callback(x.status >= 400 ? x.statusText : null, {\n status: x.status,\n data: x.responseText\n });\n };\n\n x.send(payload);\n } catch (e) {\n console && console.log(e);\n }\n};\n\nvar request = function request(options, url, payload, callback) {\n if (typeof payload === 'function') {\n callback = payload;\n payload = undefined;\n }\n\n callback = callback || function () {};\n\n if (fetchApi) {\n return requestWithFetch(options, url, payload, callback);\n }\n\n if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.hasXMLHttpRequest)() || typeof ActiveXObject === 'function') {\n return requestWithXmlHttpRequest(options, url, payload, callback);\n }\n\n callback(new Error('No fetch and no xhr implementation found!'));\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (request);\n\n//# sourceURL=webpack://pokeclicker/./node_modules/i18next-http-backend/esm/request.js?"); + +/***/ }), + +/***/ "./node_modules/i18next-http-backend/esm/utils.js": +/*!********************************************************!*\ + !*** ./node_modules/i18next-http-backend/esm/utils.js ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"defaults\": () => (/* binding */ defaults),\n/* harmony export */ \"hasXMLHttpRequest\": () => (/* binding */ hasXMLHttpRequest),\n/* harmony export */ \"makePromise\": () => (/* binding */ makePromise)\n/* harmony export */ });\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nfunction hasXMLHttpRequest() {\n return typeof XMLHttpRequest === 'function' || (typeof XMLHttpRequest === \"undefined\" ? \"undefined\" : _typeof(XMLHttpRequest)) === 'object';\n}\n\nfunction isPromise(maybePromise) {\n return !!maybePromise && typeof maybePromise.then === 'function';\n}\n\nfunction makePromise(maybePromise) {\n if (isPromise(maybePromise)) {\n return maybePromise;\n }\n\n return Promise.resolve(maybePromise);\n}\n\n//# sourceURL=webpack://pokeclicker/./node_modules/i18next-http-backend/esm/utils.js?"); + +/***/ }), + +/***/ "./node_modules/i18next/dist/esm/i18next.js": +/*!**************************************************!*\ + !*** ./node_modules/i18next/dist/esm/i18next.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"changeLanguage\": () => (/* binding */ changeLanguage),\n/* harmony export */ \"createInstance\": () => (/* binding */ createInstance),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"exists\": () => (/* binding */ exists),\n/* harmony export */ \"getFixedT\": () => (/* binding */ getFixedT),\n/* harmony export */ \"hasLoadedNamespace\": () => (/* binding */ hasLoadedNamespace),\n/* harmony export */ \"init\": () => (/* binding */ init),\n/* harmony export */ \"loadLanguages\": () => (/* binding */ loadLanguages),\n/* harmony export */ \"loadNamespaces\": () => (/* binding */ loadNamespaces),\n/* harmony export */ \"loadResources\": () => (/* binding */ loadResources),\n/* harmony export */ \"reloadResources\": () => (/* binding */ reloadResources),\n/* harmony export */ \"setDefaultNamespace\": () => (/* binding */ setDefaultNamespace),\n/* harmony export */ \"t\": () => (/* binding */ t),\n/* harmony export */ \"use\": () => (/* binding */ use)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"./node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"./node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ \"./node_modules/@babel/runtime/helpers/esm/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/possibleConstructorReturn */ \"./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/getPrototypeOf */ \"./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toArray */ \"./node_modules/@babel/runtime/helpers/esm/toArray.js\");\n\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar consoleLogger = {\n type: 'logger',\n log: function log(args) {\n this.output('log', args);\n },\n warn: function warn(args) {\n this.output('warn', args);\n },\n error: function error(args) {\n this.output('error', args);\n },\n output: function output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\n\nvar Logger = function () {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Logger);\n\n this.init(concreteLogger, options);\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Logger, [{\n key: \"init\",\n value: function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n }, {\n key: \"setDebug\",\n value: function setDebug(bool) {\n this.debug = bool;\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return this.forward(args, 'log', '', true);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return this.forward(args, 'warn', '', true);\n }\n }, {\n key: \"error\",\n value: function error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return this.forward(args, 'error', '');\n }\n }, {\n key: \"deprecate\",\n value: function deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n }, {\n key: \"forward\",\n value: function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n return this.logger[lvl](args);\n }\n }, {\n key: \"create\",\n value: function create(moduleName) {\n return new Logger(this.logger, _objectSpread(_objectSpread({}, {\n prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n }), this.options));\n }\n }, {\n key: \"clone\",\n value: function clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n }]);\n\n return Logger;\n}();\n\nvar baseLogger = new Logger();\n\nvar EventEmitter = function () {\n function EventEmitter() {\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, EventEmitter);\n\n this.observers = {};\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(EventEmitter, [{\n key: \"on\",\n value: function on(events, listener) {\n var _this = this;\n\n events.split(' ').forEach(function (event) {\n _this.observers[event] = _this.observers[event] || [];\n\n _this.observers[event].push(listener);\n });\n return this;\n }\n }, {\n key: \"off\",\n value: function off(event, listener) {\n if (!this.observers[event]) return;\n\n if (!listener) {\n delete this.observers[event];\n return;\n }\n\n this.observers[event] = this.observers[event].filter(function (l) {\n return l !== listener;\n });\n }\n }, {\n key: \"emit\",\n value: function emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function (observer) {\n observer.apply(void 0, args);\n });\n }\n\n if (this.observers['*']) {\n var _cloned = [].concat(this.observers['*']);\n\n _cloned.forEach(function (observer) {\n observer.apply(observer, [event].concat(args));\n });\n }\n }\n }]);\n\n return EventEmitter;\n}();\n\nfunction defer() {\n var res;\n var rej;\n var promise = new Promise(function (resolve, reject) {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n}\nfunction makeString(object) {\n if (object == null) return '';\n return '' + object;\n}\nfunction copy(a, s, t) {\n a.forEach(function (m) {\n if (s[m]) t[m] = s[m];\n });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n\n function canNotTraverseDeeper() {\n return !object || typeof object === 'string';\n }\n\n var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n while (stack.length > 1) {\n if (canNotTraverseDeeper()) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n }\n\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\n\nfunction setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object),\n obj = _getLastOfPath.obj,\n k = _getLastOfPath.k;\n\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object),\n obj = _getLastOfPath2.obj,\n k = _getLastOfPath2.k;\n\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path),\n obj = _getLastOfPath3.obj,\n k = _getLastOfPath3.k;\n\n if (!obj) return undefined;\n return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n var value = getPath(data, key);\n\n if (value !== undefined) {\n return value;\n }\n\n return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n for (var prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n\n return target;\n}\nfunction regexEscape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nfunction escape(data) {\n if (typeof data === 'string') {\n return data.replace(/[&<>\"'\\/]/g, function (s) {\n return _entityMap[s];\n });\n }\n\n return data;\n}\nvar isIE10 = typeof window !== 'undefined' && window.navigator && typeof window.navigator.userAgentData === 'undefined' && window.navigator.userAgent && window.navigator.userAgent.indexOf('MSIE') > -1;\nvar chars = [' ', ',', '?', '!', ';'];\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n var possibleChars = chars.filter(function (c) {\n return nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0;\n });\n if (possibleChars.length === 0) return true;\n var r = new RegExp(\"(\".concat(possibleChars.map(function (c) {\n return c === '?' ? '\\\\?' : c;\n }).join('|'), \")\"));\n var matched = !r.test(key);\n\n if (!matched) {\n var ki = key.indexOf(keySeparator);\n\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n\n return matched;\n}\n\nfunction ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction deepFind(obj, path) {\n var keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n if (!obj) return undefined;\n if (obj[path]) return obj[path];\n var paths = path.split(keySeparator);\n var current = obj;\n\n for (var i = 0; i < paths.length; ++i) {\n if (!current) return undefined;\n\n if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) {\n return undefined;\n }\n\n if (current[paths[i]] === undefined) {\n var j = 2;\n var p = paths.slice(i, i + j).join(keySeparator);\n var mix = current[p];\n\n while (mix === undefined && paths.length > i + j) {\n j++;\n p = paths.slice(i, i + j).join(keySeparator);\n mix = current[p];\n }\n\n if (mix === undefined) return undefined;\n if (mix === null) return null;\n\n if (path.endsWith(p)) {\n if (typeof mix === 'string') return mix;\n if (p && typeof mix[p] === 'string') return mix[p];\n }\n\n var joinedPath = paths.slice(i + j).join(keySeparator);\n if (joinedPath) return deepFind(mix, joinedPath, keySeparator);\n return undefined;\n }\n\n current = current[paths[i]];\n }\n\n return current;\n}\n\nvar ResourceStore = function (_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(ResourceStore, _EventEmitter);\n\n var _super = _createSuper(ResourceStore);\n\n function ResourceStore(data) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, ResourceStore);\n\n _this = _super.call(this);\n\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n\n _this.data = data || {};\n _this.options = options;\n\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n\n if (_this.options.ignoreJSONStructure === undefined) {\n _this.options.ignoreJSONStructure = true;\n }\n\n return _this;\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(ResourceStore, [{\n key: \"addNamespaces\",\n value: function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n }, {\n key: \"removeNamespaces\",\n value: function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n }, {\n key: \"getResource\",\n value: function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n var path = [lng, ns];\n if (key && typeof key !== 'string') path = path.concat(key);\n if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n }\n\n var result = getPath(this.data, path);\n if (result || !ignoreJSONStructure || typeof key !== 'string') return result;\n return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n }\n }, {\n key: \"addResource\",\n value: function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = '.';\n var path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n }, {\n key: \"addResources\",\n value: function addResources(lng, ns, resources) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n\n for (var m in resources) {\n if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n }, {\n key: \"addResourceBundle\",\n value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false\n };\n var path = [lng, ns];\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n var pack = getPath(this.data, path) || {};\n\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = _objectSpread$1(_objectSpread$1({}, pack), resources);\n }\n\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n }, {\n key: \"removeResourceBundle\",\n value: function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n }, {\n key: \"hasResourceBundle\",\n value: function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n }, {\n key: \"getResourceBundle\",\n value: function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === 'v1') return _objectSpread$1(_objectSpread$1({}, {}), this.getResource(lng, ns));\n return this.getResource(lng, ns);\n }\n }, {\n key: \"getDataByLanguage\",\n value: function getDataByLanguage(lng) {\n return this.data[lng];\n }\n }, {\n key: \"hasLanguageSomeTranslations\",\n value: function hasLanguageSomeTranslations(lng) {\n var data = this.getDataByLanguage(lng);\n var n = data && Object.keys(data) || [];\n return !!n.find(function (v) {\n return data[v] && Object.keys(data[v]).length > 0;\n });\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n return this.data;\n }\n }]);\n\n return ResourceStore;\n}(EventEmitter);\n\nvar postProcessor = {\n processors: {},\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n\n processors.forEach(function (processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\n\nfunction ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(Object(source), true).forEach(function (key) { (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result); }; }\n\nfunction _isNativeReflectConstruct$1() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nvar checkedLoadedFor = {};\n\nvar Translator = function (_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(Translator, _EventEmitter);\n\n var _super = _createSuper$1(Translator);\n\n function Translator(services) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Translator);\n\n _this = _super.call(this);\n\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n _this.options = options;\n\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n\n _this.logger = baseLogger.create('translator');\n return _this;\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Translator, [{\n key: \"changeLanguage\",\n value: function changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n }, {\n key: \"exists\",\n value: function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n\n if (key === undefined || key === null) {\n return false;\n }\n\n var resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n }, {\n key: \"extractFromKey\",\n value: function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var namespaces = options.ns || this.options.defaultNS || [];\n var wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n var seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n var m = key.match(this.interpolator.nestingRegexp);\n\n if (m && m.length > 0) {\n return {\n key: key,\n namespaces: namespaces\n };\n }\n\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n\n if (typeof namespaces === 'string') namespaces = [namespaces];\n return {\n key: key,\n namespaces: namespaces\n };\n }\n }, {\n key: \"translate\",\n value: function translate(keys, options, lastKey) {\n var _this2 = this;\n\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(options) !== 'object' && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n\n if (!options) options = {};\n if (keys === undefined || keys === null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)];\n var returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n key = _this$extractFromKey.key,\n namespaces = _this$extractFromKey.namespaces;\n\n var namespace = namespaces[namespaces.length - 1];\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n\n if (returnDetails) {\n resolved.res = \"\".concat(namespace).concat(nsSeparator).concat(key);\n return resolved;\n }\n\n return \"\".concat(namespace).concat(nsSeparator).concat(key);\n }\n\n if (returnDetails) {\n resolved.res = key;\n return resolved;\n }\n\n return key;\n }\n\n var resolved = this.resolve(keys, options);\n var res = resolved && resolved.res;\n var resUsedKey = resolved && resolved.usedKey || key;\n var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n var resType = Object.prototype.toString.apply(res);\n var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n\n var r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, _objectSpread$2(_objectSpread$2({}, options), {}, {\n ns: namespaces\n })) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n\n if (returnDetails) {\n resolved.res = r;\n return resolved;\n }\n\n return r;\n }\n\n if (keySeparator) {\n var resTypeIsArray = resType === '[object Array]';\n var copy = resTypeIsArray ? [] : {};\n var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n\n for (var m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n copy[m] = this.translate(deepKey, _objectSpread$2(_objectSpread$2({}, options), {\n joinArrays: false,\n ns: namespaces\n }));\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n var usedDefault = false;\n var usedKey = false;\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n var hasDefaultValue = Translator.hasDefaultValue(options);\n var defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n var defaultValue = options[\"defaultValue\".concat(defaultValueSuffix)] || options.defaultValue;\n\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n\n var missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n var resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n var updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n\n if (keySeparator) {\n var fk = this.resolve(key, _objectSpread$2(_objectSpread$2({}, options), {}, {\n keySeparator: false\n }));\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (var i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n\n var send = function send(l, k, specificDefaultValue) {\n var defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n\n if (_this2.options.missingKeyHandler) {\n _this2.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n _this2.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n\n _this2.emit('missingKey', l, namespace, k, res);\n };\n\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(function (language) {\n _this2.pluralResolver.getSuffixes(language, options).forEach(function (suffix) {\n send([language], key + suffix, options[\"defaultValue\".concat(suffix)] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key);\n\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n if (this.options.compatibilityAPI !== 'v1') {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? \"\".concat(namespace, \":\").concat(key) : key, usedDefault ? res : undefined);\n } else {\n res = this.options.parseMissingKeyHandler(res);\n }\n }\n }\n\n if (returnDetails) {\n resolved.res = res;\n return resolved;\n }\n\n return res;\n }\n }, {\n key: \"extendTranslation\",\n value: function extendTranslation(res, key, options, resolved, lastKey) {\n var _this3 = this;\n\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, _objectSpread$2(_objectSpread$2({}, this.options.interpolation.defaultVariables), options), resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved: resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init(_objectSpread$2(_objectSpread$2({}, options), {\n interpolation: _objectSpread$2(_objectSpread$2({}, this.options.interpolation), options.interpolation)\n }));\n var skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n var nestBef;\n\n if (skipOnVariables) {\n var nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n\n var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = _objectSpread$2(_objectSpread$2({}, this.options.interpolation.defaultVariables), data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n\n if (skipOnVariables) {\n var na = res.match(this.interpolator.nestingRegexp);\n var nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this3.logger.warn(\"It seems you are nesting recursively key: \".concat(args[0], \" in key: \").concat(key[0]));\n\n return null;\n }\n\n return _this3.translate.apply(_this3, args.concat([key]));\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? _objectSpread$2({\n i18nResolved: resolved\n }, options) : options, this);\n }\n\n return res;\n }\n }, {\n key: \"resolve\",\n value: function resolve(keys) {\n var _this4 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var found;\n var usedKey;\n var exactUsedKey;\n var usedLng;\n var usedNS;\n if (typeof keys === 'string') keys = [keys];\n keys.forEach(function (k) {\n if (_this4.isValidLookup(found)) return;\n\n var extracted = _this4.extractFromKey(k, options);\n\n var key = extracted.key;\n usedKey = key;\n var namespaces = extracted.namespaces;\n if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n\n var needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && _this4.pluralResolver.shouldUseIntlApi();\n\n var needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== '';\n var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n namespaces.forEach(function (ns) {\n if (_this4.isValidLookup(found)) return;\n usedNS = ns;\n\n if (!checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] && _this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] = true;\n\n _this4.logger.warn(\"key \\\"\".concat(usedKey, \"\\\" for languages \\\"\").concat(codes.join(', '), \"\\\" won't get resolved as namespace \\\"\").concat(usedNS, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n\n codes.forEach(function (code) {\n if (_this4.isValidLookup(found)) return;\n usedLng = code;\n var finalKeys = [key];\n\n if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n var pluralSuffix;\n if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count, options);\n var zeroSuffix = \"\".concat(_this4.options.pluralSeparator, \"zero\");\n\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n\n if (needsContextHandling) {\n var contextKey = \"\".concat(key).concat(_this4.options.contextSeparator).concat(options.context);\n finalKeys.push(contextKey);\n\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n\n var possibleKey;\n\n while (possibleKey = finalKeys.pop()) {\n if (!_this4.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = _this4.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey: usedKey,\n exactUsedKey: exactUsedKey,\n usedLng: usedLng,\n usedNS: usedNS\n };\n }\n }, {\n key: \"isValidLookup\",\n value: function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n }, {\n key: \"getResource\",\n value: function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n }], [{\n key: \"hasDefaultValue\",\n value: function hasDefaultValue(options) {\n var prefix = 'defaultValue';\n\n for (var option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n\n return false;\n }\n }]);\n\n return Translator;\n}(EventEmitter);\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil = function () {\n function LanguageUtil(options) {\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, LanguageUtil);\n\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(LanguageUtil, [{\n key: \"getScriptPartFromCode\",\n value: function getScriptPartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return null;\n var p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n }, {\n key: \"getLanguagePartFromCode\",\n value: function getLanguagePartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return code;\n var p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n }, {\n key: \"formatLanguageCode\",\n value: function formatLanguageCode(code) {\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n var p = code.split('-');\n\n if (this.options.lowerCaseLng) {\n p = p.map(function (part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n\n return p.join('-');\n }\n\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n }, {\n key: \"isSupportedCode\",\n value: function isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n }, {\n key: \"getBestMatchFromCodes\",\n value: function getBestMatchFromCodes(codes) {\n var _this = this;\n\n if (!codes) return null;\n var found;\n codes.forEach(function (code) {\n if (found) return;\n\n var cleanedLng = _this.formatLanguageCode(code);\n\n if (!_this.options.supportedLngs || _this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n\n if (!found && this.options.supportedLngs) {\n codes.forEach(function (code) {\n if (found) return;\n\n var lngOnly = _this.getLanguagePartFromCode(code);\n\n if (_this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = _this.options.supportedLngs.find(function (supportedLng) {\n if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n });\n });\n }\n\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n }, {\n key: \"getFallbackCodes\",\n value: function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n if (!code) return fallbacks[\"default\"] || [];\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks[\"default\"];\n return found || [];\n }\n }, {\n key: \"toResolveHierarchy\",\n value: function toResolveHierarchy(code, fallbackCode) {\n var _this2 = this;\n\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n var codes = [];\n\n var addCode = function addCode(c) {\n if (!c) return;\n\n if (_this2.isSupportedCode(c)) {\n codes.push(c);\n } else {\n _this2.logger.warn(\"rejecting language code not found in supportedLngs: \".concat(c));\n }\n };\n\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === 'string') {\n addCode(this.formatLanguageCode(code));\n }\n\n fallbackCodes.forEach(function (fc) {\n if (codes.indexOf(fc) < 0) addCode(_this2.formatLanguageCode(fc));\n });\n return codes;\n }\n }]);\n\n return LanguageUtil;\n}();\n\nvar sets = [{\n lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n nr: [1, 2],\n fc: 1\n}, {\n lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n nr: [1, 2],\n fc: 2\n}, {\n lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n nr: [1],\n fc: 3\n}, {\n lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n nr: [1, 2, 5],\n fc: 4\n}, {\n lngs: ['ar'],\n nr: [0, 1, 2, 3, 11, 100],\n fc: 5\n}, {\n lngs: ['cs', 'sk'],\n nr: [1, 2, 5],\n fc: 6\n}, {\n lngs: ['csb', 'pl'],\n nr: [1, 2, 5],\n fc: 7\n}, {\n lngs: ['cy'],\n nr: [1, 2, 3, 8],\n fc: 8\n}, {\n lngs: ['fr'],\n nr: [1, 2],\n fc: 9\n}, {\n lngs: ['ga'],\n nr: [1, 2, 3, 7, 11],\n fc: 10\n}, {\n lngs: ['gd'],\n nr: [1, 2, 3, 20],\n fc: 11\n}, {\n lngs: ['is'],\n nr: [1, 2],\n fc: 12\n}, {\n lngs: ['jv'],\n nr: [0, 1],\n fc: 13\n}, {\n lngs: ['kw'],\n nr: [1, 2, 3, 4],\n fc: 14\n}, {\n lngs: ['lt'],\n nr: [1, 2, 10],\n fc: 15\n}, {\n lngs: ['lv'],\n nr: [1, 2, 0],\n fc: 16\n}, {\n lngs: ['mk'],\n nr: [1, 2],\n fc: 17\n}, {\n lngs: ['mnk'],\n nr: [0, 1, 2],\n fc: 18\n}, {\n lngs: ['mt'],\n nr: [1, 2, 11, 20],\n fc: 19\n}, {\n lngs: ['or'],\n nr: [2, 1],\n fc: 2\n}, {\n lngs: ['ro'],\n nr: [1, 2, 20],\n fc: 20\n}, {\n lngs: ['sl'],\n nr: [5, 1, 2, 3],\n fc: 21\n}, {\n lngs: ['he', 'iw'],\n nr: [1, 2, 20, 21],\n fc: 22\n}];\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\nvar deprecatedJsonVersions = ['v1', 'v2', 'v3'];\nvar suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\n\nfunction createRules() {\n var rules = {};\n sets.forEach(function (set) {\n set.lngs.forEach(function (l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\n\nvar PluralResolver = function () {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, PluralResolver);\n\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n\n if ((!this.options.compatibilityJSON || this.options.compatibilityJSON === 'v4') && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n this.options.compatibilityJSON = 'v3';\n this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n }\n\n this.rules = createRules();\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(PluralResolver, [{\n key: \"addRule\",\n value: function addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n }, {\n key: \"getRule\",\n value: function getRule(code) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.shouldUseIntlApi()) {\n try {\n return new Intl.PluralRules(code, {\n type: options.ordinal ? 'ordinal' : 'cardinal'\n });\n } catch (_unused) {\n return;\n }\n }\n\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n }, {\n key: \"needsPlural\",\n value: function needsPlural(code) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var rule = this.getRule(code, options);\n\n if (this.shouldUseIntlApi()) {\n return rule && rule.resolvedOptions().pluralCategories.length > 1;\n }\n\n return rule && rule.numbers.length > 1;\n }\n }, {\n key: \"getPluralFormsOfKey\",\n value: function getPluralFormsOfKey(code, key) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(function (suffix) {\n return \"\".concat(key).concat(suffix);\n });\n }\n }, {\n key: \"getSuffixes\",\n value: function getSuffixes(code) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var rule = this.getRule(code, options);\n\n if (!rule) {\n return [];\n }\n\n if (this.shouldUseIntlApi()) {\n return rule.resolvedOptions().pluralCategories.sort(function (pluralCategory1, pluralCategory2) {\n return suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2];\n }).map(function (pluralCategory) {\n return \"\".concat(_this.options.prepend).concat(pluralCategory);\n });\n }\n\n return rule.numbers.map(function (number) {\n return _this.getSuffix(code, number, options);\n });\n }\n }, {\n key: \"getSuffix\",\n value: function getSuffix(code, count) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var rule = this.getRule(code, options);\n\n if (rule) {\n if (this.shouldUseIntlApi()) {\n return \"\".concat(this.options.prepend).concat(rule.select(count));\n }\n\n return this.getSuffixRetroCompatible(rule, count);\n }\n\n this.logger.warn(\"no plural rule found for: \".concat(code));\n return '';\n }\n }, {\n key: \"getSuffixRetroCompatible\",\n value: function getSuffixRetroCompatible(rule, count) {\n var _this2 = this;\n\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx];\n\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n\n var returnSuffix = function returnSuffix() {\n return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n };\n\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n return returnSuffix();\n } else if (this.options.compatibilityJSON === 'v2') {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n }, {\n key: \"shouldUseIntlApi\",\n value: function shouldUseIntlApi() {\n return !deprecatedJsonVersions.includes(this.options.compatibilityJSON);\n }\n }]);\n\n return PluralResolver;\n}();\n\nfunction ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$3(Object(source), true).forEach(function (key) { (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar Interpolator = function () {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Interpolator);\n\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n\n this.format = options.interpolation && options.interpolation.format || function (value) {\n return value;\n };\n\n this.init(options);\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Interpolator, [{\n key: \"init\",\n value: function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n var iOpts = options.interpolation;\n this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n this.resetRegExp();\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (this.options) this.init(this.options);\n }\n }, {\n key: \"resetRegExp\",\n value: function resetRegExp() {\n var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n this.regexp = new RegExp(regexpStr, 'g');\n var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(str, data, lng, options) {\n var _this = this;\n\n var match;\n var value;\n var replaces;\n var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n\n function regexSafe(val) {\n return val.replace(/\\$/g, '$$$$');\n }\n\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) {\n var path = getPathWithDefaults(data, defaultData, key);\n return _this.alwaysFormat ? _this.format(path, undefined, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, {\n interpolationkey: key\n })) : path;\n }\n\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n return _this.format(getPathWithDefaults(data, defaultData, k), f, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, {\n interpolationkey: k\n }));\n };\n\n this.resetRegExp();\n var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n var skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n var todos = [{\n regex: this.regexpUnescape,\n safeValue: function safeValue(val) {\n return regexSafe(val);\n }\n }, {\n regex: this.regexp,\n safeValue: function safeValue(val) {\n return _this.escapeValue ? regexSafe(_this.escape(val)) : regexSafe(val);\n }\n }];\n todos.forEach(function (todo) {\n replaces = 0;\n\n while (match = todo.regex.exec(str)) {\n var matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n var temp = missingInterpolationHandler(str, match, options);\n value = typeof temp === 'string' ? temp : '';\n } else if (options && options.hasOwnProperty(matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n _this.logger.warn(\"missed to pass in variable \".concat(matchedVar, \" for interpolating \").concat(str));\n\n value = '';\n }\n } else if (typeof value !== 'string' && !_this.useRawValueToEscape) {\n value = makeString(value);\n }\n\n var safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n\n replaces++;\n\n if (replaces >= _this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n }, {\n key: \"nest\",\n value: function nest(str, fc) {\n var _this2 = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var match;\n var value;\n\n var clonedOptions = _objectSpread$3({}, options);\n\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n\n function handleHasOptions(key, inheritedOptions) {\n var sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n var c = key.split(new RegExp(\"\".concat(sep, \"[ ]*{\")));\n var optionsString = \"{\".concat(c[1]);\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n var matchedSingleQuotes = optionsString.match(/'/g);\n var matchedDoubleQuotes = optionsString.match(/\"/g);\n\n if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = _objectSpread$3(_objectSpread$3({}, inheritedOptions), clonedOptions);\n } catch (e) {\n this.logger.warn(\"failed parsing options string in nesting for key \".concat(key), e);\n return \"\".concat(key).concat(sep).concat(optionsString);\n }\n\n delete clonedOptions.defaultValue;\n return key;\n }\n\n while (match = this.nestingRegexp.exec(str)) {\n var formatters = [];\n var doReduce = false;\n\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n var r = match[1].split(this.formatSeparator).map(function (elem) {\n return elem.trim();\n });\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && typeof value !== 'string') return value;\n if (typeof value !== 'string') value = makeString(value);\n\n if (!value) {\n this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n value = '';\n }\n\n if (doReduce) {\n value = formatters.reduce(function (v, f) {\n return _this2.format(v, f, options.lng, _objectSpread$3(_objectSpread$3({}, options), {}, {\n interpolationkey: match[1].trim()\n }));\n }, value.trim());\n }\n\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n\n return str;\n }\n }]);\n\n return Interpolator;\n}();\n\nfunction ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$4(Object(source), true).forEach(function (key) { (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction parseFormatStr(formatStr) {\n var formatName = formatStr.toLowerCase().trim();\n var formatOptions = {};\n\n if (formatStr.indexOf('(') > -1) {\n var p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n var optStr = p[1].substring(0, p[1].length - 1);\n\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n var opts = optStr.split(';');\n opts.forEach(function (opt) {\n if (!opt) return;\n\n var _opt$split = opt.split(':'),\n _opt$split2 = (0,_babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_opt$split),\n key = _opt$split2[0],\n rest = _opt$split2.slice(1);\n\n var val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n if (val === 'false') formatOptions[key.trim()] = false;\n if (val === 'true') formatOptions[key.trim()] = true;\n if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n });\n }\n }\n\n return {\n formatName: formatName,\n formatOptions: formatOptions\n };\n}\n\nvar Formatter = function () {\n function Formatter() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Formatter);\n\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.formats = {\n number: function number(val, lng, options) {\n return new Intl.NumberFormat(lng, options).format(val);\n },\n currency: function currency(val, lng, options) {\n return new Intl.NumberFormat(lng, _objectSpread$4(_objectSpread$4({}, options), {}, {\n style: 'currency'\n })).format(val);\n },\n datetime: function datetime(val, lng, options) {\n return new Intl.DateTimeFormat(lng, _objectSpread$4({}, options)).format(val);\n },\n relativetime: function relativetime(val, lng, options) {\n return new Intl.RelativeTimeFormat(lng, _objectSpread$4({}, options)).format(val, options.range || 'day');\n },\n list: function list(val, lng, options) {\n return new Intl.ListFormat(lng, _objectSpread$4({}, options)).format(val);\n }\n };\n this.init(options);\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Formatter, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n var iOpts = options.interpolation;\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n }\n }, {\n key: \"add\",\n value: function add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n }, {\n key: \"format\",\n value: function format(value, _format, lng, options) {\n var _this = this;\n\n var formats = _format.split(this.formatSeparator);\n\n var result = formats.reduce(function (mem, f) {\n var _parseFormatStr = parseFormatStr(f),\n formatName = _parseFormatStr.formatName,\n formatOptions = _parseFormatStr.formatOptions;\n\n if (_this.formats[formatName]) {\n var formatted = mem;\n\n try {\n var valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n var l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = _this.formats[formatName](mem, l, _objectSpread$4(_objectSpread$4(_objectSpread$4({}, formatOptions), options), valOptions));\n } catch (error) {\n _this.logger.warn(error);\n }\n\n return formatted;\n } else {\n _this.logger.warn(\"there was no format function for \".concat(formatName));\n }\n\n return mem;\n }, value);\n return result;\n }\n }]);\n\n return Formatter;\n}();\n\nfunction ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$5(Object(source), true).forEach(function (key) { (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result); }; }\n\nfunction _isNativeReflectConstruct$2() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction removePending(q, name) {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n}\n\nvar Connector = function (_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(Connector, _EventEmitter);\n\n var _super = _createSuper$2(Connector);\n\n function Connector(backend, store, services) {\n var _this;\n\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Connector);\n\n _this = _super.call(this);\n\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n\n _this.backend = backend;\n _this.store = store;\n _this.services = services;\n _this.languageUtils = services.languageUtils;\n _this.options = options;\n _this.logger = baseLogger.create('backendConnector');\n _this.waitingReads = [];\n _this.maxParallelReads = options.maxParallelReads || 10;\n _this.readingCalls = 0;\n _this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n _this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n _this.state = {};\n _this.queue = [];\n\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n\n return _this;\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Connector, [{\n key: \"queueLoad\",\n value: function queueLoad(languages, namespaces, options, callback) {\n var _this2 = this;\n\n var toLoad = {};\n var pending = {};\n var toLoadLanguages = {};\n var toLoadNamespaces = {};\n languages.forEach(function (lng) {\n var hasAllNamespaces = true;\n namespaces.forEach(function (ns) {\n var name = \"\".concat(lng, \"|\").concat(ns);\n\n if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2;\n } else if (_this2.state[name] < 0) ; else if (_this2.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n _this2.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending: pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n }, {\n key: \"loaded\",\n value: function loaded(name, err, data) {\n var s = name.split('|');\n var lng = s[0];\n var ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n\n this.state[name] = err ? -1 : 2;\n var loaded = {};\n this.queue.forEach(function (q) {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(function (l) {\n if (!loaded[l]) loaded[l] = {};\n var loadedKeys = q.loaded[l];\n\n if (loadedKeys.length) {\n loadedKeys.forEach(function (ns) {\n if (loaded[l][ns] === undefined) loaded[l][ns] = true;\n });\n }\n });\n q.done = true;\n\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(function (q) {\n return !q.done;\n });\n }\n }, {\n key: \"read\",\n value: function read(lng, ns, fcName) {\n var _this3 = this;\n\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n var callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng: lng,\n ns: ns,\n fcName: fcName,\n tried: tried,\n wait: wait,\n callback: callback\n });\n return;\n }\n\n this.readingCalls++;\n return this.backend[fcName](lng, ns, function (err, data) {\n _this3.readingCalls--;\n\n if (_this3.waitingReads.length > 0) {\n var next = _this3.waitingReads.shift();\n\n _this3.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n\n if (err && data && tried < _this3.maxRetries) {\n setTimeout(function () {\n _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n\n callback(err, data);\n });\n }\n }, {\n key: \"prepareLoading\",\n value: function prepareLoading(languages, namespaces) {\n var _this4 = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n\n if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === 'string') namespaces = [namespaces];\n var toLoad = this.queueLoad(languages, namespaces, options, callback);\n\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n\n toLoad.toLoad.forEach(function (name) {\n _this4.loadOne(name);\n });\n }\n }, {\n key: \"load\",\n value: function load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n }, {\n key: \"reload\",\n value: function reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n }, {\n key: \"loadOne\",\n value: function loadOne(name) {\n var _this5 = this;\n\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var s = name.split('|');\n var lng = s[0];\n var ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, function (err, data) {\n if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n\n _this5.loaded(name, err, data);\n });\n }\n }, {\n key: \"saveMissing\",\n value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn(\"did not save key \\\"\".concat(key, \"\\\" as the namespace \\\"\").concat(namespace, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n\n if (key === undefined || key === null || key === '') return;\n\n if (this.backend && this.backend.create) {\n this.backend.create(languages, namespace, key, fallbackValue, null, _objectSpread$5(_objectSpread$5({}, options), {}, {\n isUpdate: isUpdate\n }));\n }\n\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n }]);\n\n return Connector;\n}(EventEmitter);\n\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: true,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n var ret = {};\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[1]) === 'object') ret = args[1];\n if (typeof args[1] === 'string') ret.defaultValue = args[1];\n if (typeof args[2] === 'string') ret.tDescription = args[2];\n\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[2]) === 'object' || (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[3]) === 'object') {\n var options = args[3] || args[2];\n Object.keys(options).forEach(function (key) {\n ret[key] = options[key];\n });\n }\n\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng, options) {\n return value;\n },\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n }\n };\n}\nfunction transformOptions(options) {\n if (typeof options.ns === 'string') options.ns = [options.ns];\n if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n\n if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n\n return options;\n}\n\nfunction ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$6(Object(source), true).forEach(function (key) { (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result); }; }\n\nfunction _isNativeReflectConstruct$3() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction noop() {}\n\nfunction bindMemberFunctions(inst) {\n var mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(function (mem) {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n}\n\nvar I18n = function (_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(I18n, _EventEmitter);\n\n var _super = _createSuper$3(I18n);\n\n function I18n() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, I18n);\n\n _this = _super.call(this);\n\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = {\n external: []\n };\n bindMemberFunctions((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n\n if (callback && !_this.isInitialized && !options.isClone) {\n if (!_this.options.initImmediate) {\n _this.init(options, callback);\n\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(_this, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n\n setTimeout(function () {\n _this.init(options, callback);\n }, 0);\n }\n\n return _this;\n }\n\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(I18n, [{\n key: \"init\",\n value: function init() {\n var _this2 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n if (typeof options.ns === 'string') {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n\n var defOpts = get();\n this.options = _objectSpread$6(_objectSpread$6(_objectSpread$6({}, defOpts), this.options), transformOptions(options));\n\n if (this.options.compatibilityAPI !== 'v1') {\n this.options.interpolation = _objectSpread$6(_objectSpread$6({}, defOpts.interpolation), this.options.interpolation);\n }\n\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n\n function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n }\n\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n\n var formatter;\n\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else if (typeof Intl !== 'undefined') {\n formatter = Formatter;\n }\n\n var lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n s.languageDetector.init(s, this.options.detection, this.options);\n }\n\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n this.modules.external.forEach(function (m) {\n if (m.init) m.init(_this2);\n });\n }\n\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n var codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n\n var storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _this2$store;\n\n return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n };\n });\n var storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _this2$store2;\n\n (_this2$store2 = _this2.store)[fcName].apply(_this2$store2, arguments);\n\n return _this2;\n };\n });\n var deferred = defer();\n\n var load = function load() {\n var finish = function finish(err, t) {\n if (_this2.isInitialized && !_this2.initializedStoreOnce) _this2.logger.warn('init: i18next is already initialized. You should call init just once!');\n _this2.isInitialized = true;\n if (!_this2.options.isClone) _this2.logger.log('initialized', _this2.options);\n\n _this2.emit('initialized', _this2.options);\n\n deferred.resolve(t);\n callback(err, t);\n };\n\n if (_this2.languages && _this2.options.compatibilityAPI !== 'v1' && !_this2.isInitialized) return finish(null, _this2.t.bind(_this2));\n\n _this2.changeLanguage(_this2.options.lng, finish);\n };\n\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n\n return deferred;\n }\n }, {\n key: \"loadResources\",\n value: function loadResources(language) {\n var _this3 = this;\n\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var usedCallback = callback;\n var usedLng = typeof language === 'string' ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === 'cimode') return usedCallback();\n var toLoad = [];\n\n var append = function append(lng) {\n if (!lng) return;\n\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n\n if (!usedLng) {\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function (l) {\n return append(l);\n });\n } else {\n append(usedLng);\n }\n\n if (this.options.preload) {\n this.options.preload.forEach(function (l) {\n return append(l);\n });\n }\n\n this.services.backendConnector.load(toLoad, this.options.ns, function (e) {\n if (!e && !_this3.resolvedLanguage && _this3.language) _this3.setResolvedLanguage(_this3.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n }, {\n key: \"reloadResources\",\n value: function reloadResources(lngs, ns, callback) {\n var deferred = defer();\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, function (err) {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n }, {\n key: \"use\",\n value: function use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n\n return this;\n }\n }, {\n key: \"setResolvedLanguage\",\n value: function setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n\n for (var li = 0; li < this.languages.length; li++) {\n var lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n }, {\n key: \"changeLanguage\",\n value: function changeLanguage(lng, callback) {\n var _this4 = this;\n\n this.isLanguageChangingTo = lng;\n var deferred = defer();\n this.emit('languageChanging', lng);\n\n var setLngProps = function setLngProps(l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n _this4.resolvedLanguage = undefined;\n\n _this4.setResolvedLanguage(l);\n };\n\n var done = function done(err, l) {\n if (l) {\n setLngProps(l);\n\n _this4.translator.changeLanguage(l);\n\n _this4.isLanguageChangingTo = undefined;\n\n _this4.emit('languageChanged', l);\n\n _this4.logger.log('languageChanged', l);\n } else {\n _this4.isLanguageChangingTo = undefined;\n }\n\n deferred.resolve(function () {\n return _this4.t.apply(_this4, arguments);\n });\n if (callback) callback(err, function () {\n return _this4.t.apply(_this4, arguments);\n });\n };\n\n var setLng = function setLng(lngs) {\n if (!lng && !lngs && _this4.services.languageDetector) lngs = [];\n var l = typeof lngs === 'string' ? lngs : _this4.services.languageUtils.getBestMatchFromCodes(lngs);\n\n if (l) {\n if (!_this4.language) {\n setLngProps(l);\n }\n\n if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n\n _this4.loadResources(l, function (err) {\n done(err, l);\n });\n };\n\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n this.services.languageDetector.detect(setLng);\n } else {\n setLng(lng);\n }\n\n return deferred;\n }\n }, {\n key: \"getFixedT\",\n value: function getFixedT(lng, ns, keyPrefix) {\n var _this5 = this;\n\n var fixedT = function fixedT(key, opts) {\n var options;\n\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(opts) !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n\n options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = _objectSpread$6({}, opts);\n }\n\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n var keySeparator = _this5.options.keySeparator || '.';\n var resultKey = options.keyPrefix ? \"\".concat(options.keyPrefix).concat(keySeparator).concat(key) : key;\n return _this5.t(resultKey, options);\n };\n\n if (typeof lng === 'string') {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n }, {\n key: \"t\",\n value: function t() {\n var _this$translator;\n\n return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n }\n }, {\n key: \"exists\",\n value: function exists() {\n var _this$translator2;\n\n return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n }\n }, {\n key: \"setDefaultNamespace\",\n value: function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n }, {\n key: \"hasLoadedNamespace\",\n value: function hasLoadedNamespace(ns) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n\n var lng = this.resolvedLanguage || this.languages[0];\n var fallbackLng = this.options ? this.options.fallbackLng : false;\n var lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = _this6.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n\n return loadState === -1 || loadState === 2;\n };\n\n if (options.precheck) {\n var preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n }, {\n key: \"loadNamespaces\",\n value: function loadNamespaces(ns, callback) {\n var _this7 = this;\n\n var deferred = defer();\n\n if (!this.options.ns) {\n callback && callback();\n return Promise.resolve();\n }\n\n if (typeof ns === 'string') ns = [ns];\n ns.forEach(function (n) {\n if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);\n });\n this.loadResources(function (err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n }, {\n key: \"loadLanguages\",\n value: function loadLanguages(lngs, callback) {\n var deferred = defer();\n if (typeof lngs === 'string') lngs = [lngs];\n var preloaded = this.options.preload || [];\n var newLngs = lngs.filter(function (lng) {\n return preloaded.indexOf(lng) < 0;\n });\n\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(function (err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n }, {\n key: \"dir\",\n value: function dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n }, {\n key: \"cloneInstance\",\n value: function cloneInstance() {\n var _this8 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n var mergedOptions = _objectSpread$6(_objectSpread$6(_objectSpread$6({}, this.options), options), {\n isClone: true\n });\n\n var clone = new I18n(mergedOptions);\n\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n\n var membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(function (m) {\n clone[m] = _this8[m];\n });\n clone.services = _objectSpread$6({}, this.services);\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n clone.emit.apply(clone, [event].concat(args));\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = clone.options;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n }]);\n\n return I18n;\n}(EventEmitter);\n\n(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(I18n, \"createInstance\", function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n});\n\nvar instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nvar createInstance = instance.createInstance;\nvar init = instance.init;\nvar loadResources = instance.loadResources;\nvar reloadResources = instance.reloadResources;\nvar use = instance.use;\nvar changeLanguage = instance.changeLanguage;\nvar getFixedT = instance.getFixedT;\nvar t = instance.t;\nvar exists = instance.exists;\nvar setDefaultNamespace = instance.setDefaultNamespace;\nvar hasLoadedNamespace = instance.hasLoadedNamespace;\nvar loadNamespaces = instance.loadNamespaces;\nvar loadLanguages = instance.loadLanguages;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (instance);\n\n\n\n//# sourceURL=webpack://pokeclicker/./node_modules/i18next/dist/esm/i18next.js?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/create fake namespace object */ +/******/ (() => { +/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); +/******/ var leafPrototypes; +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 16: return value when it's Promise-like +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = this(value); +/******/ if(mode & 8) return value; +/******/ if(typeof value === 'object' && value) { +/******/ if((mode & 4) && value.__esModule) return value; +/******/ if((mode & 16) && typeof value.then === 'function') return value; +/******/ } +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ var def = {}; +/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; +/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) { +/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); +/******/ } +/******/ def['default'] = () => (value); +/******/ __webpack_require__.d(ns, def); +/******/ return ns; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/modules/index.ts"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/docs/preview/pr-5723/scripts/script.min.js b/docs/preview/pr-5723/scripts/script.min.js new file mode 100644 index 00000000000..9335ce68d13 --- /dev/null +++ b/docs/preview/pr-5723/scripts/script.min.js @@ -0,0 +1,49480 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +/// +/// +/// +class App { + static start() { + // Hide tooltips that stay on game load + $('.tooltip').tooltip('hide'); + if (!App.debug) { + Object.freeze(GameConstants); + } + Preload.load(App.debug).then(() => { + ko.options.deferUpdates = true; + console.log(`[${GameConstants.formatDate(new Date())}] %cLoading Game Data..`, 'color:#8e44ad;font-weight:900;'); + App.game = new Game(); + console.log(`[${GameConstants.formatDate(new Date())}] %cGame loaded`, 'color:#2ecc71;font-weight:900;'); + Notifier.notify({ message: 'Game loaded', type: NotificationConstants.NotificationOption.info }); + console.log(`[${GameConstants.formatDate(new Date())}] %cStarting game..`, 'color:#8e44ad;font-weight:900;'); + GameController.bindToolTips(); + GameController.addKeyListeners(); + App.game.initialize(); + GameLoadState.updateLoadState(GameLoadState.states.initialized); + // Fix any settings that conflict with the now-loaded game data + Settings.checkAndFix(); + // Fixes custom theme css if Default theme was different from save theme (must be done before bindings) + document.body.className = 'no-select'; + ko.applyBindings(App.game); + GameLoadState.updateLoadState(GameLoadState.states.appliedBindings); + Preload.hideSplashScreen(); + App.game.start(); + GameLoadState.updateLoadState(GameLoadState.states.running); + // Check if Mobile and deliver a warning around mobile compatability / performance issues + const isMobile = /Mobile/.test(navigator.userAgent); + const isTouchDevice = 'ontouchstart' in document.documentElement; + const hasSeenWarning = localStorage.getItem('hasSeenMobileWarning'); + if (isMobile && isTouchDevice && hasSeenWarning != 'true') { + Notifier.warning({ + title: 'Mobile Device Detected', + message: 'Please Note: \n\nYou may experience performance issues playing on mobile, especially on older models. \n\nWhile it is ' + + 'possible to play on a phone or tablet, please be aware that the controls and features are designed with a mouse and keyboard in ' + + 'mind and may not work as well on a mobile device. \n\nFor the best gameplay experience we highly recommend playing on a PC ' + + 'browser or our desktop client by downloading here' + + '\n\nThank You!', + }).then((result) => { + if (result) { + localStorage.setItem('hasSeenMobileWarning', 'true'); + } + }); + } + }); + } +} +App.debug = false; +App.isUsingClient = typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0; +App.translation = new Translate(Settings.getSetting('translation.language')); +App; +/// +class BattlePokemon { + /** + * In case you want to manually create a Pokémon instead of generating it from the route number + * @param name Pokémon name + * @param id Pokémon + * @param type1 First type of the Pokémon + * @param type2 Second type of the Pokémon + * @param maxHealth max health that the Pokémon can have + * @param level level is 2 times the current route + * @param catchRate base chance of catching this Pokémon + * @param exp base exp reward for defeating this Pokémon + * @param reward currency reward for defeating this Pokémon + * @param shiny is a shiny variant + * @param gender Pokémon gender + * @param [heldItem] item to possibly gain for defeating this Pokémon + * @param shadow is shadow or purified + */ + constructor(name, id, type1 = PokemonType.None, type2 = PokemonType.None, maxHealth, level, catchRate, exp, reward = new Amount(0, GameConstants.Currency.money), shiny, gemReward = 1, gender, shadow, encounterType, heldItem, ep = GameConstants.BASE_EP_YIELD) { + this.name = name; + this.id = id; + this.type1 = type1; + this.type2 = type2; + this.level = level; + this.catchRate = catchRate; + this.exp = exp; + this.reward = reward; + this.shiny = shiny; + this.gemReward = gemReward; + this.gender = gender; + this.shadow = shadow; + this.encounterType = encounterType; + this.heldItem = heldItem; + this.ep = ep; + this.health = ko.observable(maxHealth); + this.maxHealth = ko.observable(maxHealth); + this.healthPercentage = ko.observable(100); + this._displayName = PokemonHelper.displayName(name); + } + isAlive() { + return this.health() > 0; + } + /** + * Lost health without + * @param damage + */ + damage(damage) { + this.health(Math.max(0, this.health() - damage)); + this.healthPercentage(Math.floor(this.health() / this.maxHealth() * 100)); + } + defeat(trainer = false) { + PokemonHelper.incrementPokemonStatistics(this.id, GameConstants.PokemonStatisticsType.Defeated, this.shiny, this.gender, this.shadow); + if (this.reward.amount > 0) { + App.game.wallet.addAmount(this.reward); + } + if (this.heldItem) { + const name = BagHandler.displayName(this.heldItem); + BagHandler.gainItem(this.heldItem); + const msg = `${this.displayName} dropped ${GameHelper.anOrA(name)} ${name}!`; + Notifier.notify({ + message: `The enemy ${msg} `, + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Items.dropped_item, + }); + App.game.logbook.newLog(LogBookTypes.FOUND, createLogContent.enemyDrop({ pokemon: this.name, item: name })); + } + App.game.party.gainExp(this.exp, this.level, trainer); + App.game.gems.gainGems(this.gemReward * (this.type2 == PokemonType.None ? 2 : 1), this.type1); + App.game.gems.gainGems(this.gemReward, this.type2); + } + get displayName() { + return this._displayName(); + } +} +/// +/// +class PokemonFactory { + /** + * Generate a wild pokemon based on route, region and the dataList. + * @param route route that the player is on. + * @param region region that the player is in. + * @returns {any} + */ + static generateWildPokemon(route, region, subRegion) { + if (!MapHelper.validRoute(route, region)) { + return new BattlePokemon('MissingNo.', 0, PokemonType.None, PokemonType.None, 0, 0, 0, 0, new Amount(0, GameConstants.Currency.money), false, 0, GameConstants.BattlePokemonGender.NoGender, GameConstants.ShadowStatus.None, EncounterType.route); + } + let name; + const roaming = PokemonFactory.roamingEncounter(route, region, subRegion); + if (roaming) { + name = PokemonFactory.generateRoamingEncounter(region, subRegion); + } + else { + name = Rand.fromArray(RouteHelper.getAvailablePokemonList(route, region)); + } + const basePokemon = PokemonHelper.getPokemonByName(name); + const id = basePokemon.id; + const routeAvgHp = (region, route) => { + const poke = [...new Set(Object.values(Routes.getRoute(region, route).pokemon).flat().map(p => { var _a; return (_a = p.pokemon) !== null && _a !== void 0 ? _a : p; }).flat())]; + const total = poke.map(p => pokemonMap[p].base.hitpoints).reduce((s, a) => s + a, 0); + return total / poke.length; + }; + // TODO this monster formula needs to be improved. Preferably with graphs :D + // Health has a +/- 10% variable based on base health stat compared to the average of the route + const maxHealth = Math.round(PokemonFactory.routeHealth(route, region) * (0.9 + (basePokemon.hitpoints / routeAvgHp(region, route)) / 10)); + const catchRate = this.catchRateHelper(basePokemon.catchRate); + const exp = basePokemon.exp; + const level = this.routeLevel(route, region); + const heldItem = this.generateHeldItem(basePokemon.heldItem, GameConstants.ROUTE_HELD_ITEM_MODIFIER); + const money = this.routeMoney(route, region); + const shiny = this.generateShiny(GameConstants.SHINY_CHANCE_BATTLE); + const gender = this.generateGender(basePokemon.gender.femaleRatio, basePokemon.gender.type); + const encounterType = roaming ? EncounterType.roamer : EncounterType.route; + if (shiny) { + Notifier.notify({ + message: `✨ You encountered a shiny ${PokemonHelper.displayName(name)()}! ✨`, + pokemonImage: PokemonHelper.getImage(id, shiny, basePokemon.gender), + type: NotificationConstants.NotificationOption.warning, + sound: NotificationConstants.NotificationSound.General.shiny_long, + setting: NotificationConstants.NotificationSetting.General.encountered_shiny, + }); + } + if (roaming) { + Notifier.notify({ + message: `You encountered a roaming ${name}!`, + pokemonImage: PokemonHelper.getImage(id, shiny, basePokemon.gender), + type: NotificationConstants.NotificationOption.warning, + sound: NotificationConstants.NotificationSound.General.roaming, + setting: NotificationConstants.NotificationSetting.General.encountered_roaming, + }); + App.game.logbook.newLog(LogBookTypes.ROAMER, (shiny + ? App.game.party.alreadyCaughtPokemon(id, true) + ? createLogContent.roamerShinyDupe + : createLogContent.roamerShiny + : createLogContent.roamer)({ + location: Routes.getRoute(player.region, player.route).routeName, + pokemon: name, + })); + } + const ep = GameConstants.BASE_EP_YIELD * (roaming ? GameConstants.ROAMER_EP_MODIFIER : 1); + return new BattlePokemon(name, id, basePokemon.type1, basePokemon.type2, maxHealth, level, catchRate, exp, new Amount(money, GameConstants.Currency.money), shiny, 1, gender, GameConstants.ShadowStatus.None, encounterType, heldItem, ep); + } + static routeLevel(route, region) { + return Math.floor(20 * Math.pow(MapHelper.normalizeRoute(route, region), (1 / 2.25))); + } + static routeHealth(route, region) { + const regionRoute = Routes.regionRoutes.find((routeData) => routeData.region === region && routeData.number === route); + if (regionRoute === null || regionRoute === void 0 ? void 0 : regionRoute.routeHealth) { + return regionRoute.routeHealth; + } + route = MapHelper.normalizeRoute(route, region); + const health = Math.max(20, Math.floor(Math.pow((100 * Math.pow(route, 2.2) / 12), 1.15) * (1 + region / 20))) || 20; + return health; + } + static routeMoney(route, region, useRandomDeviation = true) { + route = MapHelper.normalizeRoute(route, region); + //If it's not random, we take the mean value (truncated) + const deviation = useRandomDeviation ? Rand.intBetween(-25, 25) : 12; + const money = Math.max(10, 3 * route + 5 * Math.pow(route, 1.15) + deviation); + return money; + } + static routeDungeonTokens(route, region) { + route = MapHelper.normalizeRoute(route, region); + const tokens = Math.max(1, 6 * Math.pow(route * 2 / (2.8 / (1 + region / 3)), 1.08)); + return tokens; + } + /** + * Calculate if a shiny has spawned. + * @param chance Base chance, should be from GameConstants.SHINY_CHANCE.* + * @returns {boolean} + */ + static generateShiny(chance, skipBonus = false) { + const bonus = skipBonus ? 1 : App.game.multiplier.getBonus('shiny'); + if (Rand.chance(chance / bonus)) { + App.game.oakItems.use(OakItemType.Shiny_Charm); + return true; + } + return false; + } + static generatePartyPokemon(id, shiny = false, gender = GameConstants.BattlePokemonGender.NoGender, shadow = GameConstants.ShadowStatus.None) { + const dataPokemon = PokemonHelper.getPokemonById(id); + return new PartyPokemon(dataPokemon.id, dataPokemon.name, dataPokemon.evolutions, dataPokemon.attack, dataPokemon.eggCycles, shiny, gender, shadow); + } + /** + * Generate a Gym trainer pokemon based on gymName, index and the dataList. + * @param gymName name of the gym that the player is fighting. + * @param index index of the Pokémon that is being generated. + * @returns {any} + */ + static generateGymPokemon(gym, index) { + const pokemon = gym.getPokemonList()[index]; + const basePokemon = PokemonHelper.getPokemonByName(pokemon.name); + const exp = basePokemon.exp; + const shiny = pokemon.shiny ? pokemon.shiny : this.generateShiny(GameConstants.SHINY_CHANCE_BATTLE); + const gender = this.generateGender(basePokemon.gender.femaleRatio, basePokemon.gender.type); + const shadow = pokemon.shadow; + const catchRate = this.catchRateHelper(basePokemon.catchRate); + return new BattlePokemon(pokemon.name, basePokemon.id, basePokemon.type1, basePokemon.type2, pokemon.maxHealth, pokemon.level, catchRate, exp, new Amount(0, GameConstants.Currency.money), shiny, GameConstants.GYM_GEMS, gender, shadow, EncounterType.trainer); + } + static generateDungeonPokemon(name, chestsOpened, baseHealth, level, mimic = false) { + const basePokemon = PokemonHelper.getPokemonByName(name); + const id = basePokemon.id; + const maxHealth = Math.floor(baseHealth * (1 + (chestsOpened / 5))); + const catchRate = this.catchRateHelper(basePokemon.catchRate); + const exp = basePokemon.exp; + const money = 0; + const heldItem = this.generateHeldItem(basePokemon.heldItem, GameConstants.DUNGEON_HELD_ITEM_MODIFIER); + const shiny = this.generateShiny(GameConstants.SHINY_CHANCE_DUNGEON); + const gender = this.generateGender(basePokemon.gender.femaleRatio, basePokemon.gender.type); + if (shiny) { + Notifier.notify({ + message: `✨ You encountered a shiny ${PokemonHelper.displayName(name)()}! ✨`, + pokemonImage: PokemonHelper.getImage(id, shiny, basePokemon.gender), + type: NotificationConstants.NotificationOption.warning, + sound: NotificationConstants.NotificationSound.General.shiny_long, + setting: NotificationConstants.NotificationSetting.General.encountered_shiny, + }); + } + const ep = GameConstants.BASE_EP_YIELD * (mimic ? GameConstants.DUNGEON_BOSS_EP_MODIFIER : GameConstants.DUNGEON_EP_MODIFIER); + const et = mimic ? EncounterType.mimic : EncounterType.dungeon; + return new BattlePokemon(name, id, basePokemon.type1, basePokemon.type2, maxHealth, level, catchRate, exp, new Amount(money, GameConstants.Currency.money), shiny, GameConstants.DUNGEON_GEMS, gender, GameConstants.ShadowStatus.None, et, heldItem, ep); + } + static generateDungeonTrainerPokemon(pokemon, chestsOpened, baseHealth, level, isBoss, trainerPokemon = 1) { + const name = pokemon.name; + const basePokemon = PokemonHelper.getPokemonByName(name); + const maxHealth = Math.floor(baseHealth * (1 + (chestsOpened / 5)) / (isBoss ? 1 : Math.pow(trainerPokemon, 0.75))); + const exp = basePokemon.exp; + const shiny = pokemon.shiny ? pokemon.shiny : this.generateShiny(GameConstants.SHINY_CHANCE_DUNGEON); + const catchRate = this.catchRateHelper(basePokemon.catchRate); + // Reward 2% or 5% (boss) of dungeon DT cost when the trainer mons are defeated + const money = 0; + const gender = this.generateGender(basePokemon.gender.femaleRatio, basePokemon.gender.type); + const shadow = pokemon.shadow; + const ep = GameConstants.BASE_EP_YIELD * (isBoss ? GameConstants.DUNGEON_BOSS_EP_MODIFIER : GameConstants.DUNGEON_EP_MODIFIER); + return new BattlePokemon(name, basePokemon.id, basePokemon.type1, basePokemon.type2, maxHealth, level, catchRate, exp, new Amount(money, GameConstants.Currency.money), shiny, GameConstants.DUNGEON_GEMS, gender, shadow, EncounterType.trainer, undefined, ep); + } + static generateDungeonBoss(bossPokemon, chestsOpened) { + const name = bossPokemon.name; + const basePokemon = PokemonHelper.getPokemonByName(name); + const id = basePokemon.id; + const maxHealth = Math.floor(bossPokemon.baseHealth * (1 + (chestsOpened / 5))); + const catchRate = this.catchRateHelper(basePokemon.catchRate); + const exp = basePokemon.exp; + const money = 0; + const heldItem = this.generateHeldItem(basePokemon.heldItem, GameConstants.DUNGEON_BOSS_HELD_ITEM_MODIFIER); + const shiny = this.generateShiny(GameConstants.SHINY_CHANCE_DUNGEON); + const gender = this.generateGender(basePokemon.gender.femaleRatio, basePokemon.gender.type); + if (shiny) { + Notifier.notify({ + message: `✨ You encountered a shiny ${PokemonHelper.displayName(name)()}! ✨`, + pokemonImage: PokemonHelper.getImage(id, shiny, basePokemon.gender), + type: NotificationConstants.NotificationOption.warning, + sound: NotificationConstants.NotificationSound.General.shiny_long, + setting: NotificationConstants.NotificationSetting.General.encountered_shiny, + }); + } + const ep = GameConstants.BASE_EP_YIELD * GameConstants.DUNGEON_BOSS_EP_MODIFIER; + return new BattlePokemon(name, id, basePokemon.type1, basePokemon.type2, maxHealth, bossPokemon.level, catchRate, exp, new Amount(money, GameConstants.Currency.money), shiny, GameConstants.DUNGEON_BOSS_GEMS, gender, GameConstants.ShadowStatus.None, EncounterType.dungeonBoss, heldItem, ep); + } + static generateTemporaryBattlePokemon(battle, index) { + const pokemon = battle.getPokemonList()[index]; + const basePokemon = PokemonHelper.getPokemonByName(pokemon.name); + const catchRate = this.catchRateHelper(basePokemon.catchRate); + const encounterType = battle.optionalArgs.isTrainerBattle + ? EncounterType.trainer + : App.game.gameState === GameConstants.GameState.dungeon + ? EncounterType.dungeon + : EncounterType.route; + const exp = basePokemon.exp; + const shiny = pokemon.shiny ? pokemon.shiny : this.generateShiny(GameConstants.SHINY_CHANCE_BATTLE); + const gender = this.generateGender(basePokemon.gender.femaleRatio, basePokemon.gender.type); + const shadow = pokemon.shadow; + return new BattlePokemon(pokemon.name, basePokemon.id, basePokemon.type1, basePokemon.type2, pokemon.maxHealth, pokemon.level, catchRate, exp, new Amount(0, GameConstants.Currency.money), shiny, GameConstants.GYM_GEMS, gender, shadow, encounterType); + } + static generateRoamingEncounter(region, subRegion) { + const possible = RoamingPokemonList.getSubRegionalGroupRoamers(region, RoamingPokemonList.findGroup(region, subRegion.id)); + // Double the chance of encountering a roaming Pokemon you have not yet caught + return Rand.fromWeightedArray(possible, possible.map(r => App.game.party.alreadyCaughtPokemonByName(r.pokemon.name) ? 1 : 2)).pokemon.name; + } + static roamingEncounter(routeNum, region, subRegion) { + // Map to the route numbers + const route = Routes.getRoute(region, routeNum); + const routes = Routes.getRoutesByRegion(region).filter(r => RoamingPokemonList.findGroup(region, r.subRegion || 0) == RoamingPokemonList.findGroup(region, subRegion.id)); + // Check if the dice rolls in their favor + const encounter = PokemonFactory.roamingChance(route, routes, region, subRegion); + if (!encounter) { + return false; + } + // There is likely to be a roamer available, so we can check this last + const roamingPokemon = RoamingPokemonList.getSubRegionalGroupRoamers(region, RoamingPokemonList.findGroup(region, subRegion.id)); + if (!routes || !routes.length || !roamingPokemon || !roamingPokemon.length) { + return false; + } + // Roaming encounter + return true; + } + static roamingChance(curRoute, allRoutes, region, subRegion, max = GameConstants.ROAMING_MAX_CHANCE, min = GameConstants.ROAMING_MIN_CHANCE, skipBonus = false) { + var _a; + const bonus = skipBonus ? 1 : App.game.multiplier.getBonus('roaming'); + const maxRoute = allRoutes.length - 1; + const routeInd = allRoutes.indexOf(curRoute); + // Check if we should have increased chances on this route (3 x rate) + const increasedChance = ((_a = RoamingPokemonList.getIncreasedChanceRouteBySubRegionGroup(player.region, RoamingPokemonList.findGroup(region, subRegion.id))()) === null || _a === void 0 ? void 0 : _a.number) == (curRoute === null || curRoute === void 0 ? void 0 : curRoute.number); + const roamingChance = (max + ((min - max) * (maxRoute - routeInd) / (maxRoute))) / ((increasedChance ? GameConstants.ROAMING_INCREASED_CHANCE : 1) * bonus); + return Rand.chance(roamingChance); + } + static catchRateHelper(baseCatchRate, noVariation = false) { + const catchVariation = noVariation ? 0 : Rand.intBetween(-3, 3); + const catchRateRaw = Math.floor(Math.pow(baseCatchRate, 0.75)) + catchVariation; + return GameConstants.clipNumber(catchRateRaw, 0, 100); + } + static generateHeldItem(item, modifier) { + var _a, _b; + if (!item || !BagHandler.displayName(item)) { + return null; + } + if (!((_b = (_a = item.requirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true)) { + return null; + } + let chance = GameConstants.HELD_ITEM_CHANCE; + // Apply drop chance by item type + switch (item.type) { + case ItemType.underground: + chance = GameConstants.HELD_UNDERGROUND_ITEM_CHANCE; + break; + } + // Apply drop chance by item ID + switch (item.id) { + case 'Griseous_Orb': + chance = GameConstants.GRISEOUS_ITEM_CHANCE; + break; + case 'Black_DNA': + case 'White_DNA': + chance = GameConstants.DNA_ITEM_CHANCE; + break; + case 'Solar_light': + case 'Lunar_light': + case 'Pure_light': + chance = GameConstants.LIGHT_ITEM_CHANCE; + break; + case 'Crystallized_shadow': + chance = GameConstants.SHADOW_ITEM_CHANCE; + break; + case 'Rusted_Sword': + case 'Rusted_Shield': + chance = GameConstants.RUST_ITEM_CHANCE; + break; + case 'Black_mane_hair': + case 'White_mane_hair': + chance = GameConstants.MANE_ITEM_CHANCE; + break; + case 'Magikarp_Biscuit': + chance = GameConstants.HELD_MAGIKARP_BISCUIT; + break; + case 'Rare_Candy': + chance = GameConstants.HELD_CANDY_ITEM_CHANCE; + break; + case 'Christmas_present': + chance = GameConstants.CHRISTMAS_ITEM_CHANCE; + break; + } + chance /= modifier; + if (EffectEngineRunner.isActive(GameConstants.BattleItemType.Dowsing_machine)()) { + chance /= 1.5; + } + if (Rand.chance(chance)) { + return item; + } + return null; + } + // Gender functions + /** + * generateGender but using Pokemon ID + */ + static generateGenderById(id) { + const pokemon = PokemonHelper.getPokemonById(id); + return this.generateGender(pokemon.gender.femaleRatio, pokemon.gender.type); + } + /** + * Calculate which gender has the pokemon. + * @param chance Base chance, should be from GameConstants under Gender Ratio comment + * @param genderType Gender type (Genderless, male only, etc.), should be from GameConstants under Gender Types comment + * @returns GameConstants.BattlePokemonGender + */ + static generateGender(chance, genderType) { + let gender; + switch (genderType) { + case GameConstants.Genders.Genderless: + gender = GameConstants.BattlePokemonGender.NoGender; + break; + case GameConstants.Genders.MaleFemale: + if (Rand.chance(chance)) { // Female + gender = GameConstants.BattlePokemonGender.Female; + } + else { // Male + gender = GameConstants.BattlePokemonGender.Male; + } + break; + default: + console.warn('Invalid gender'); + } + return gender; + } + static generateWandererData(plot) { + const berry = plot.berryData; + const mulch = plot.mulch; + const availablePokemon = []; + const weights = []; + berry.wander.forEach((p, i) => { + if (pokemonMap[p].nativeRegion <= player.highestRegion()) { + availablePokemon.push(p); + weights.push(mulch === MulchType.Gooey_Mulch && i >= Berry.baseWander.length ? 2 : 1); + } + }); + const pokemon = Rand.fromWeightedArray(availablePokemon, weights); + const pokemonData = pokemonMap[pokemon]; + const shiny = PokemonFactory.generateShiny(GameConstants.SHINY_CHANCE_FARM); + const catchChance = PokemonFactory.catchRateHelper(pokemonData.catchRate + 25, true); + const wanderer = new WandererPokemon(pokemon, berry.type, catchChance, shiny); + return wanderer; + } +} +PokemonFactory; +/// +/// +/// +/** + * Handles all logic related to battling + */ +class Battle { + /** + * Probably not needed right now, but might be if we add more logic to a gameTick. + */ + static tick() { + this.counter = 0; + this.pokemonAttack(); + } + /** + * Attacks with Pokémon and checks if the enemy is defeated. + */ + static pokemonAttack() { + var _a; + if (!((_a = this.enemyPokemon()) === null || _a === void 0 ? void 0 : _a.isAlive())) { + return; + } + this.enemyPokemon().damage(App.game.party.calculatePokemonAttack(this.enemyPokemon().type1, this.enemyPokemon().type2)); + if (!this.enemyPokemon().isAlive()) { + this.defeatPokemon(); + } + } + /** + * Attacks with clicks and checks if the enemy is defeated. + */ + static clickAttack() { + var _a; + // click attacks disabled and we already beat the starter + if (App.game.challenges.list.disableClickAttack.active() && player.regionStarters[GameConstants.Region.kanto]() != GameConstants.Starter.None) { + return; + } + // TODO: figure out a better way of handling this + // Limit click attack speed, Only allow 1 attack per 50ms (20 per second) + const now = Date.now(); + if (this.lastClickAttack > now - 50) { + return; + } + this.lastClickAttack = now; + if (!((_a = this.enemyPokemon()) === null || _a === void 0 ? void 0 : _a.isAlive())) { + return; + } + GameHelper.incrementObservable(App.game.statistics.clickAttacks); + this.enemyPokemon().damage(App.game.party.calculateClickAttack(true)); + if (!this.enemyPokemon().isAlive()) { + this.defeatPokemon(); + } + } + /** + * Award the player with money and exp, and throw a Pokéball if applicable + */ + static defeatPokemon() { + const enemyPokemon = this.enemyPokemon(); + Battle.route = player.route; + const region = player.region; + const catchRoute = player.route; // Has to be set, the Battle.route is "zeroed" on region change + enemyPokemon.defeat(); + GameHelper.incrementObservable(App.game.statistics.routeKills[player.region][Battle.route]); + App.game.breeding.progressEggsBattle(Battle.route, player.region); + const isShiny = enemyPokemon.shiny; + const isShadow = enemyPokemon.shadow == GameConstants.ShadowStatus.Shadow; + const pokeBall = App.game.pokeballs.calculatePokeballToUse(enemyPokemon.id, isShiny, isShadow, enemyPokemon.encounterType); + if (pokeBall !== GameConstants.Pokeball.None) { + this.prepareCatch(enemyPokemon, pokeBall); + setTimeout(() => { + this.attemptCatch(enemyPokemon, catchRoute, region); + if (Battle.route != 0) { + this.generateNewEnemy(); + } + }, App.game.pokeballs.calculateCatchTime(pokeBall)); + } + else { + this.generateNewEnemy(); + } + this.gainItem(); + player.lowerItemMultipliers(MultiplierDecreaser.Battle); + } + /** + * Generate a new enemy based on the current route and region. + * Reset the counter. + */ + static generateNewEnemy() { + this.counter = 0; + this.enemyPokemon(PokemonFactory.generateWildPokemon(player.route, player.region, player.subregionObject())); + const enemyPokemon = this.enemyPokemon(); + PokemonHelper.incrementPokemonStatistics(enemyPokemon.id, GameConstants.PokemonStatisticsType.Encountered, enemyPokemon.shiny, enemyPokemon.gender, enemyPokemon.shadow); + // Shiny + if (enemyPokemon.shiny) { + App.game.logbook.newLog(LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemon(enemyPokemon.id, true) + ? createLogContent.encounterShinyDupe({ + location: Routes.getRoute(player.region, player.route).routeName, + pokemon: enemyPokemon.name, + }) + : createLogContent.encounterShiny({ + location: Routes.getRoute(player.region, player.route).routeName, + pokemon: enemyPokemon.name, + })); + } + else if (!App.game.party.alreadyCaughtPokemon(enemyPokemon.id) && enemyPokemon.health()) { + App.game.logbook.newLog(LogBookTypes.NEW, createLogContent.encounterWild({ + location: Routes.getRoute(player.region, player.route).routeName, + pokemon: enemyPokemon.name, + })); + } + } + static calculateActualCatchRate(enemyPokemon, pokeBall) { + const pokeballBonus = App.game.pokeballs.getCatchBonus(pokeBall); + const oakBonus = App.game.oakItems.calculateBonus(OakItemType.Magic_Ball); + const totalChance = GameConstants.clipNumber(enemyPokemon.catchRate + pokeballBonus + oakBonus, 0, 100); + return totalChance; + } + static prepareCatch(enemyPokemon, pokeBall) { + this.pokeball(pokeBall); + this.catching(true); + this.catchRateActual(this.calculateActualCatchRate(enemyPokemon, pokeBall)); + App.game.pokeballs.usePokeball(pokeBall); + } + static attemptCatch(enemyPokemon, route, region) { + if (enemyPokemon == null) { + this.catching(false); + return; + } + if (Rand.chance(this.catchRateActual() / 100)) { // Caught + this.catchPokemon(enemyPokemon, route, region); + } + else if (enemyPokemon.shiny) { // Failed to catch, Shiny + App.game.logbook.newLog(LogBookTypes.ESCAPED, App.game.party.alreadyCaughtPokemon(enemyPokemon.id, true) + ? createLogContent.escapedShinyDupe({ pokemon: enemyPokemon.name }) + : createLogContent.escapedShiny({ pokemon: enemyPokemon.name })); + } + else if (!App.game.party.alreadyCaughtPokemon(enemyPokemon.id)) { // Failed to catch, Uncaught + App.game.logbook.newLog(LogBookTypes.ESCAPED, createLogContent.escapedWild({ pokemon: enemyPokemon.name })); + } + this.catching(false); + this.catchRateActual(null); + } + static catchPokemon(enemyPokemon, route, region) { + this.gainTokens(route, region); + App.game.oakItems.use(OakItemType.Magic_Ball); + App.game.party.gainPokemonById(enemyPokemon.id, enemyPokemon.shiny, undefined, enemyPokemon.gender, enemyPokemon.shadow); + const partyPokemon = App.game.party.getPokemon(enemyPokemon.id); + const epBonus = App.game.pokeballs.getEPBonus(this.pokeball()); + partyPokemon.effortPoints += App.game.party.calculateEffortPoints(partyPokemon, enemyPokemon.shiny, enemyPokemon.shadow, enemyPokemon.ep * epBonus); + } + static gainTokens(route, region, pokeball = this.pokeball()) { + let currencyKinds = [GameConstants.Currency.dungeonToken]; + if (pokeball === GameConstants.Pokeball.Luxuryball) { + //currencyKinds = [ + // GameConstants.Currency.dungeonToken, + // GameConstants.Currency.money, + // GameConstants.Currency.questPoint, + // GameConstants.Currency.diamond, + // GameConstants.Currency.farmPoint, + // GameConstants.Currency.battlePoint, + // GameConstants.Currency.contestToken, + //]; + currencyKinds = [ + GameConstants.Currency.dungeonToken, + GameConstants.Currency.money, + GameConstants.Currency.questPoint, + GameConstants.Currency.diamond, + GameConstants.Currency.farmPoint, + GameConstants.Currency.battlePoint, + ]; + } + const currencyUnits = PokemonFactory.routeDungeonTokens(route, region) + / GameConstants.LuxuryBallCurrencyRate[GameConstants.Currency.dungeonToken]; + const chosenCurrency = currencyKinds[Math.floor(Math.random() * currencyKinds.length)]; + App.game.wallet.addAmount(new Amount(Math.ceil(currencyUnits * GameConstants.LuxuryBallCurrencyRate[chosenCurrency]), chosenCurrency), false); + } + static gainItem() { + const p = MapHelper.normalizeRoute(Battle.route, player.region) / 1600 + 0.009375; + if (Rand.chance(p)) { + App.game.farming.gainRandomBerry(); + } + } +} +Battle.enemyPokemon = ko.observable(null); +Battle.counter = 0; +Battle.catching = ko.observable(false); +Battle.catchRateActual = ko.observable(null); +Battle.pokeball = ko.observable(GameConstants.Pokeball.Pokeball); +Battle.lastPokemonAttack = Date.now(); +Battle.lastClickAttack = Date.now(); +Battle.pokemonAttackTooltip = ko.pureComputed(() => { + if (Battle.enemyPokemon()) { + const pokemonAttack = App.game.party.calculatePokemonAttack(Battle.enemyPokemon().type1, Battle.enemyPokemon().type2); + return `${pokemonAttack.toLocaleString('en-US')} against ${pokemonMap[Battle.enemyPokemon().name].type.map(t => PokemonType[t]).join(' / ')}`; + } + else { + return ''; + } +}).extend({ rateLimit: 1000 }); +Battle; +class ExternalHelper { + static isInLiveVersion(content) { + if (content instanceof Town) { + if (content.region > GameConstants.MAX_AVAILABLE_REGION) { + return false; + } + if (ExternalHelper.townCache[content.name] == undefined) { + ExternalHelper.townCache[content.name] = ExternalHelper.containsDevRequirement(content.requirements); + } + return !ExternalHelper.townCache[content.name]; + } + if (content instanceof QuestLine) { + if (ExternalHelper.questlineCache[content.name] == undefined) { + ExternalHelper.questlineCache[content.name] = ExternalHelper.containsDevRequirement(content.requirement); + } + return !ExternalHelper.questlineCache[content.name]; + } + if (content instanceof TemporaryBattle) { + if (ExternalHelper.temporaryBattleCache[content.name] == undefined) { + ExternalHelper.temporaryBattleCache[content.name] = ExternalHelper.containsDevRequirement(content.requirements); + } + return !ExternalHelper.temporaryBattleCache[content.name]; + } + if (content instanceof RegionRoute) { + if (content.region > GameConstants.MAX_AVAILABLE_REGION) { + return false; + } + if (ExternalHelper.routeCache[content.routeName] == undefined) { + ExternalHelper.routeCache[content.routeName] = ExternalHelper.containsDevRequirement(content.requirements); + } + return !ExternalHelper.routeCache[content.routeName]; + } + if (content instanceof Gym) { + if (ExternalHelper.gymCache[content.town] == undefined) { + ExternalHelper.gymCache[content.town] = ExternalHelper.containsDevRequirement(content.requirements); + } + return !ExternalHelper.gymCache[content.town]; + } + return true; + } + static containsDevRequirement(requirements) { + if (!requirements) { + return false; + } + if (requirements instanceof Requirement) { + requirements = [requirements]; + } + let containsDevRequirement = false; + requirements.forEach((r) => { + if (r instanceof DevelopmentRequirement) { + containsDevRequirement = true; + } + else if (r instanceof QuestLineCompletedRequirement) { + containsDevRequirement = ExternalHelper.isInLiveVersion(r.cachedQuest); + } + else if (r instanceof QuestLineStartedRequirement) { + containsDevRequirement = ExternalHelper.isInLiveVersion(r.cachedQuest); + } + else if (r instanceof QuestLineStepCompletedRequirement) { + containsDevRequirement = ExternalHelper.isInLiveVersion(r.cachedQuest); + } + else if (r instanceof TemporaryBattleRequirement) { + containsDevRequirement = ExternalHelper.isInLiveVersion(TemporaryBattleList[r.battleName]); + } + else if (r instanceof RouteKillRequirement) { + containsDevRequirement = ExternalHelper.isInLiveVersion(Routes.getRoute(r.region, r.route)); + } + else if (r instanceof ClearGymRequirement) { + containsDevRequirement = ExternalHelper.isInLiveVersion(Object.values(GymList).find(g => GameConstants.getGymIndex(g.town) == r.gymIndex)); + } + else if (r instanceof MaxRegionRequirement) { + containsDevRequirement = r.requiredValue > GameConstants.MAX_AVAILABLE_REGION; + } + else if (r instanceof ObtainedPokemonRequirement) { + containsDevRequirement = ExternalHelper.pokemonIsInLiveVersion(r.pokemon); + } + else if (r instanceof PokemonLevelRequirement) { + containsDevRequirement = ExternalHelper.pokemonIsInLiveVersion(r.pokemon); + } + else if (r instanceof StarterRequirement) { + containsDevRequirement = r.region > GameConstants.MAX_AVAILABLE_REGION; + } + else if (r instanceof MultiRequirement) { + r.requirements.forEach(r2 => { + if (!containsDevRequirement) { + containsDevRequirement = ExternalHelper.containsDevRequirement(r2); + } + }); + } + else if (r instanceof OneFromManyRequirement) { + let containsNonDevRequirement = false; + r.requirements.forEach(r2 => { + if (!containsNonDevRequirement) { + containsNonDevRequirement = !ExternalHelper.containsDevRequirement(r2); + } + containsDevRequirement = !containsNonDevRequirement; + }); + } + if (containsDevRequirement) { + return false; + } + }); + return containsDevRequirement; + } + static pokemonIsInLiveVersion(name) { + if (PokemonHelper.calcNativeRegion(name) > GameConstants.MAX_AVAILABLE_REGION) { + return false; + } + const locations = PokemonLocations.getPokemonLocations(name); + if (!locations) { + return false; + } + //TODO: run ExternalHelper.isInLiveVersion for each location + return true; + } +} +ExternalHelper.townCache = {}; +ExternalHelper.questlineCache = {}; +ExternalHelper.temporaryBattleCache = {}; +ExternalHelper.routeCache = {}; +ExternalHelper.gymCache = {}; +/// +/// +/// +/// +/// +/// +/** + * Main game class. + */ +class Game { + constructor() { + // Needs to be loaded first so save data can be updated (specifically "player" data) + this.update = new Update(); + this.multiplier = new Multiplier(); + // Load player + player = Save.load(); + // Load other Features + this.profile = new Profile(); + this.breeding = new Breeding(this.multiplier); + this.pokeballs = new Pokeballs(); + this.pokeballFilters = new PokeballFilters(); + this.wallet = new Wallet(this.multiplier); + this.keyItems = new KeyItems(); + this.badgeCase = new BadgeCase(); + this.oakItems = new OakItems([20, 50, 100], this.multiplier); + this.oakItemLoadouts = new OakItemLoadouts(); + this.categories = new PokemonCategories(); + this.party = new Party(this.multiplier); + this.gems = new Gems(); + this.underground = new Underground(); + this.farming = new Farming(this.multiplier); + this.logbook = new LogBook(); + this.redeemableCodes = new RedeemableCodes(); + this.statistics = new Statistics(); + this.quests = new Quests(); + this.specialEvents = new SpecialEvents(); + this.discord = new Discord(); + this.achievementTracker = new AchievementTracker(); + this.challenges = new Challenges(); + this.battleFrontier = new BattleFrontier(); + this.saveReminder = new SaveReminder(); + this.battleCafe = new BattleCafeSaveObject(); + this.dreamOrbController = new DreamOrbController(); + this.purifyChamber = new PurifyChamber(); + this.weatherApp = new WeatherApp(); + this.zMoves = new ZMoves(); + this.pokemonContest = new PokemonContest(); + this._gameState = ko.observable(GameConstants.GameState.loading); + } + load() { + const saveJSON = localStorage.getItem(`save${Save.key}`); + const saveObject = JSON.parse(saveJSON || '{}'); + Object.keys(this).filter(key => { var _a; return (_a = this[key]) === null || _a === void 0 ? void 0 : _a.saveKey; }).forEach(key => { + try { + const saveKey = this[key].saveKey; + // Load our save object or the default save data + this[key].fromJSON(saveObject[saveKey] || this[key].toJSON()); + } + catch (error) { + console.error('Unable to load sava data from JSON for:', key, '\nError:\n', error); + } + }); + AchievementHandler.fromJSON(saveObject.achievements); + } + initialize() { + AchievementHandler.initialize(this.multiplier, this.challenges); + FarmController.initialize(); + EffectEngineRunner.initialize(this.multiplier, GameHelper.enumStrings(GameConstants.BattleItemType).map((name) => ItemList[name])); + ItemHandler.initializeItems(); + BreedingController.initialize(); + PokedexHelper.initialize(); + this.profile.initialize(); + this.breeding.initialize(); + this.pokeballs.initialize(); + this.keyItems.initialize(); + this.oakItems.initialize(); + this.underground.initialize(); + this.farming.initialize(); + this.specialEvents.initialize(); + this.pokeballFilters.initialize(); + this.load(); + // Unlock achievements that have already been completed, avoids renotifying + AchievementHandler.preCheckAchievements(); + // Flute bonuses depend on achievements so should be initialized afterwards + // but the bonuses can affect some achievements so we need to recheck them once flutes are online + FluteEffectRunner.initialize(this.multiplier); + AchievementHandler.preCheckAchievements(); + // TODO refactor to proper initialization methods + if (player.regionStarters[GameConstants.Region.kanto]() != GameConstants.Starter.None) { + Battle.generateNewEnemy(); + } + else { + const battlePokemon = new BattlePokemon('MissingNo.', 0, PokemonType.None, PokemonType.None, 0, 0, 0, 0, new Amount(0, GameConstants.Currency.money), false, 0, GameConstants.BattlePokemonGender.NoGender, GameConstants.ShadowStatus.None, EncounterType.route); + Battle.enemyPokemon(battlePokemon); + } + //Safari.load(); + Underground.energyTick(this.underground.getEnergyRegenTime()); + AchievementHandler.calculateMaxBonus(); //recalculate bonus based on active challenges + const now = new Date(); + SeededDateRand.seedWithDate(now); + DailyDeal.generateDeals(this.underground.getDailyDealsMax(), now); + BerryDeal.generateDeals(now); + Weather.generateWeather(now); + GemDeals.generateDeals(); + ShardDeal.generateDeals(); + SafariPokemonList.generateSafariLists(); + RoamingPokemonList.generateIncreasedChanceRoutes(now); + WeatherApp.initialize(); + PokemonContestController.generateDailyContest(now); + DamageCalculator.initialize(); + if (Settings.getSetting('disableOfflineProgress').value === false) { + this.computeOfflineEarnings(); + } + this.checkAndFix(); + if (Settings.getSetting('disableAutoSave').value === true) { + Notifier.notify({ + type: NotificationConstants.NotificationOption.danger, + title: 'Auto Save Disabled', + message: 'You have disabled auto saving! Be sure to manually save before exiting or any progress will be lost!', + timeout: 5 * GameConstants.MINUTE, + }); + } + // If the player isn't on a route, they're in a town/dungeon + this.gameState = player.route ? GameConstants.GameState.fighting : GameConstants.GameState.town; + } + computeOfflineEarnings() { + const now = Date.now(); + const timeDiffInSeconds = Math.floor((now - player._lastSeen) / 1000); + if (timeDiffInSeconds > 1) { + // Only allow up to 24 hours worth of bonuses + const timeDiffOverride = Math.min(86400, timeDiffInSeconds); + let region = player.region; + let route = player.route || GameConstants.StartingRoutes[region]; + if (!MapHelper.validRoute(route, region)) { + route = 1; + region = GameConstants.Region.kanto; + } + const availablePokemonMap = RouteHelper.getAvailablePokemonList(route, region).map(name => pokemonMap[name]); + const maxHealth = PokemonFactory.routeHealth(route, region); + let hitsToKill = 0; + for (const pokemon of availablePokemonMap) { + const type1 = pokemon.type[0]; + const type2 = pokemon.type.length > 1 ? pokemon.type[1] : PokemonType.None; + const attackAgainstPokemon = App.game.party.calculatePokemonAttack(type1, type2); + const currentHitsToKill = Math.ceil(maxHealth / attackAgainstPokemon); + hitsToKill += currentHitsToKill; + } + hitsToKill = Math.ceil(hitsToKill / availablePokemonMap.length); + const numberOfPokemonDefeated = Math.floor(timeDiffOverride / hitsToKill); + if (numberOfPokemonDefeated === 0) { + return; + } + const routeMoney = PokemonFactory.routeMoney(player.route, player.region, false); + const baseMoneyToEarn = numberOfPokemonDefeated * routeMoney; + const moneyToEarn = Math.floor(baseMoneyToEarn * 0.5); //Debuff for offline money + App.game.wallet.gainMoney(moneyToEarn, true); + Notifier.notify({ + type: NotificationConstants.NotificationOption.info, + title: 'Offline Bonus', + message: `Defeated: ${numberOfPokemonDefeated.toLocaleString('en-US')} Pokémon\nEarned: ${moneyToEarn.toLocaleString('en-US')}`, + strippedMessage: `Defeated: ${numberOfPokemonDefeated.toLocaleString('en-US')} Pokémon\nEarned: ${moneyToEarn.toLocaleString('en-US')} Pokédollars`, + timeout: 2 * GameConstants.MINUTE, + setting: NotificationConstants.NotificationSetting.General.offline_earnings, + }); + // Dream orbs + if ((new DreamOrbTownContent()).isUnlocked()) { + const orbsUnlocked = App.game.dreamOrbController.orbs.filter((o) => !o.requirement || o.requirement.isCompleted()); + const orbsEarned = Math.floor(timeDiffOverride / 3600); + if (orbsEarned > 0) { + const orbAmounts = Object.fromEntries(orbsUnlocked.map(o => [o.color, 0])); + for (let i = 0; i < orbsEarned; i++) { + const orb = Rand.fromArray(orbsUnlocked); + GameHelper.incrementObservable(orb.amount); + orbAmounts[orb.color]++; + } + const messageAppend = Object.keys(orbAmounts).filter(key => orbAmounts[key] > 0).map(key => `
  • ${orbAmounts[key]} ${key}
  • `).join(''); + Notifier.notify({ + type: NotificationConstants.NotificationOption.info, + title: 'Dream Orbs', + message: `Gained ${orbsEarned} Dream Orbs while offline:
      ${messageAppend}
    `, + timeout: 2 * GameConstants.MINUTE, + setting: NotificationConstants.NotificationSetting.General.offline_earnings, + }); + } + } + } + } + checkAndFix() { + // Quest box not showing (game thinking tutorial is not completed) + if (App.game.quests.getQuestLine('Tutorial Quests').state() == QuestLineState.inactive) { + if (App.game.statistics.gymsDefeated[GameConstants.getGymIndex('Pewter City')]() >= 1) { + // Defeated Brock, Has completed the Tutorial + App.game.quests.getQuestLine('Tutorial Quests').state(QuestLineState.ended); + } + else if (player.regionStarters[GameConstants.Region.kanto]() > GameConstants.Starter.None) { + // Has chosen a starter, Tutorial is started + App.game.quests.getQuestLine('Tutorial Quests').state(QuestLineState.started); + App.game.quests.getQuestLine('Tutorial Quests').beginQuest(App.game.quests.getQuestLine('Tutorial Quests').curQuest()); + } + } + // Mining expedition questline + if (App.game.quests.getQuestLine('Mining Expedition').state() == QuestLineState.inactive) { + if (App.game.party.alreadyCaughtPokemon(142)) { + // Has obtained Aerodactyl + App.game.quests.getQuestLine('Mining Expedition').state(QuestLineState.ended); + } + else if (App.game.badgeCase.badgeList[BadgeEnums.Soul]()) { + // Has the soul badge, Quest is started + App.game.quests.getQuestLine('Mining Expedition').state(QuestLineState.started); + App.game.quests.getQuestLine('Mining Expedition').beginQuest(App.game.quests.getQuestLine('Mining Expedition').curQuest()); + } + } + // Check if Koga has been defeated, but have no safari ticket yet + if (App.game.badgeCase.badgeList[BadgeEnums.Soul]() && !App.game.keyItems.itemList[KeyItemType.Safari_ticket].isUnlocked()) { + App.game.keyItems.gainKeyItem(KeyItemType.Safari_ticket, true); + } + // Check if Giovanni has been defeated, but have no gem case yet + if (App.game.badgeCase.badgeList[BadgeEnums.Earth]() && !App.game.keyItems.itemList[KeyItemType.Gem_case].isUnlocked()) { + App.game.keyItems.gainKeyItem(KeyItemType.Gem_case, true); + } + // Check that none of our quest are less than their initial value + App.game.quests.questLines().filter(q => q.state() == 1 && q.curQuest() < q.quests().length).forEach(questLine => { + const quest = questLine.curQuestObject(); + if (quest instanceof MultipleQuestsQuest) { + quest.quests.forEach((q) => { + if (q.initial() > q.focus()) { + q.initial(q.focus()); + } + }); + } + else { + if (quest.initial() > quest.focus()) { + quest.initial(quest.focus()); + questLine.curQuestInitial(quest.initial()); + } + } + }); + // Check for breeding pokemons not in queue + const breeding = [...App.game.breeding.eggList.map((l) => l().pokemon), ...App.game.breeding.queueList()]; + App.game.party.caughtPokemon.filter((p) => p.breeding).forEach((p) => { + if (!breeding.includes(p.id)) { + p.breeding = false; + } + }); + // Egg partyPokemon requires App.game.party and cannot be set until after loading is complete + App.game.breeding.eggList.filter(e => e().pokemon).forEach(e => { + e().setPartyPokemon(); + }); + // Kick player out of Client Island if they are not on the client + if (!App.isUsingClient && player._townName === 'Client Island') { + MapHelper.moveToTown('One Island'); + } + } + start() { + var _a; + console.log(`[${GameConstants.formatDate(new Date())}] %cGame started`, 'color:#2ecc71;font-weight:900;'); + if (player.regionStarters[GameConstants.Region.kanto]() === GameConstants.Starter.None) { + StartSequenceRunner.start(); + } + let pageHidden = document.hidden; + // requestAnimationFrame (consistent if page visible) + let lastFrameTime = 0; + let ticks = 0; + const tick = (currentFrameTime) => { + // Don't process while page hidden + if (pageHidden) { + this.frameRequest = requestAnimationFrame(tick); + return; + } + const delta = currentFrameTime - lastFrameTime; + ticks += delta; + lastFrameTime = currentFrameTime; + if (ticks >= GameConstants.TICK_TIME) { + // Skip the ticks if we have too many... + if (ticks >= GameConstants.TICK_TIME * 2) { + ticks = 0; + } + else { + ticks -= GameConstants.TICK_TIME; + } + this.gameTick(); + } + this.frameRequest = requestAnimationFrame(tick); + }; + this.frameRequest = requestAnimationFrame(tick); + // Try start our webworker so we can process stuff while the page isn't focused + try { + console.log(`[${GameConstants.formatDate(new Date())}] %cStarting web worker..`, 'color:#8e44ad;font-weight:900;'); + const blob = new Blob([ + ` + // Window visibility state + let pageHidden = false; + self.onmessage = function(e) { + if (e.data.pageHidden != undefined) { + pageHidden = e.data.pageHidden; + } + }; + + // setInterval (slightly slower on FireFox) + const tickInterval = setInterval(() => { + // Don't process while page visible + if (!pageHidden) return; + + postMessage('tick') + }, ${GameConstants.TICK_TIME}); + `, + ]); + const blobURL = window.URL.createObjectURL(blob); + this.worker = new Worker(blobURL); + // use a setTimeout to queue the event + (_a = this.worker) === null || _a === void 0 ? void 0 : _a.addEventListener('message', () => Settings.getSetting('useWebWorkerForGameTicks').value ? this.gameTick() : null); + document.addEventListener('visibilitychange', () => { + // Let our worker know if the page is visible or not + if (pageHidden != document.hidden) { + pageHidden = document.hidden; + this.worker.postMessage({ 'pageHidden': pageHidden }); + } + // Save resources by not displaying updates if game is not currently visible + const gameEl = document.getElementById('game'); + document.hidden ? gameEl.classList.add('hidden') : gameEl.classList.remove('hidden'); + }); + this.worker.postMessage({ 'pageHidden': pageHidden }); + if (this.worker) { + console.log(`[${GameConstants.formatDate(new Date())}] %cWeb worker started`, 'color:#2ecc71;font-weight:900;'); + } + } + catch (e) { + console.error(`[${GameConstants.formatDate(new Date())}] Web worker error`, e); + } + window.onbeforeunload = () => { + this.save(); + }; + console.log('%cStop!', 'color: red; font-size: 36px; font-weight: bold;'); + console.log('%cThis is a browser feature intended for developers. If you were told to copy-paste or enter something here to obtain an easter egg or unlock a secret, it can corrupt your save file, cause bugs, or otherwise break your game.', 'color: red; font-size: 16px;'); + } + stop() { + cancelAnimationFrame(this.frameRequest); + window.onbeforeunload = () => { }; + } + gameTick() { + // Acheivements + Game.achievementCounter += GameConstants.TICK_TIME; + if (Game.achievementCounter >= GameConstants.ACHIEVEMENT_TICK) { + Game.achievementCounter = 0; + AchievementHandler.checkAchievements(); + GameHelper.incrementObservable(App.game.statistics.secondsPlayed); + } + // Battles + switch (this.gameState) { + case GameConstants.GameState.fighting: { + Battle.counter += GameConstants.TICK_TIME; + if (Battle.counter >= GameConstants.BATTLE_TICK) { + Battle.tick(); + } + break; + } + case GameConstants.GameState.gym: { + GymBattle.counter += GameConstants.TICK_TIME; + if (GymBattle.counter >= GameConstants.BATTLE_TICK) { + GymBattle.tick(); + } + GymRunner.tick(); + break; + } + case GameConstants.GameState.dungeon: { + DungeonBattle.counter += GameConstants.TICK_TIME; + if (DungeonBattle.counter >= GameConstants.BATTLE_TICK) { + DungeonBattle.tick(); + } + DungeonRunner.tick(); + break; + } + case GameConstants.GameState.battleFrontier: { + BattleFrontierBattle.counter += GameConstants.TICK_TIME; + if (BattleFrontierBattle.counter >= GameConstants.BATTLE_FRONTIER_TICK) { + BattleFrontierBattle.tick(); + } + BattleFrontierRunner.tick(); + break; + } + case GameConstants.GameState.temporaryBattle: { + TemporaryBattleBattle.counter += GameConstants.TICK_TIME; + if (TemporaryBattleBattle.counter >= GameConstants.BATTLE_TICK) { + TemporaryBattleBattle.tick(); + } + TemporaryBattleRunner.tick(); + break; + } + } + // Auto Save + Save.counter += GameConstants.TICK_TIME; + if (Save.counter > GameConstants.SAVE_TICK) { + const old = new Date(player._lastSeen); + const now = new Date(); + // Check if it's a new day + if (old.toLocaleDateString() !== now.toLocaleDateString()) { + // Time traveller flag + if (old > now) { + Notifier.notify({ + title: 'Welcome Time Traveller!', + message: `Please ensure you keep a backup of your old save as travelling through time can cause some serious problems. + + Any Pokémon you may have obtained in the future could cease to exist which could corrupt your save file!`, + type: NotificationConstants.NotificationOption.danger, + timeout: GameConstants.HOUR, + }); + player._timeTraveller = true; + } + GameHelper.updateDay(); + SeededDateRand.seedWithDate(now); + // Give the player a free quest refresh + this.quests.freeRefresh(true); + //Refresh the Underground deals + DailyDeal.generateDeals(this.underground.getDailyDealsMax(), now); + BerryDeal.generateDeals(now); + if (this.underground.canAccess() || App.game.quests.isDailyQuestsUnlocked()) { + Notifier.notify({ + title: 'It\'s a new day!', + message: `${this.underground.canAccess() ? 'Your Underground deals have been updated.\n' : ''}` + + `${App.game.quests.isDailyQuestsUnlocked() ? 'You have a free quest refresh.' : ''}`, + type: NotificationConstants.NotificationOption.info, + timeout: 3e4, + }); + } + // Give the players more Battle Cafe spins + BattleCafeController.spinsLeft(BattleCafeController.spinsPerDay()); + // Generate the weather forecast + WeatherApp.initialize(); + // Refresh Friend Safari Pokemon List + SafariPokemonList.generateKalosSafariList(); + // Reset some temporary battles + Object.values(TemporaryBattleList).forEach(t => { + var _a; + if ((_a = t.optionalArgs) === null || _a === void 0 ? void 0 : _a.resetDaily) { + this.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex(t.name)](0); + } + }); + } + // Check if it's a new hour + if (old.getHours() !== now.getHours()) { + Weather.generateWeather(now); + RoamingPokemonList.generateIncreasedChanceRoutes(now); + // Check if it's weather change time + if (now.getHours() % Weather.period === 0) { + WeatherApp.checkDateHasPassed(); + } + } + player._lastSeen = Date.now(); + this.save(); + } + // Underground + Underground.counter += GameConstants.TICK_TIME; + if (Underground.counter >= GameConstants.UNDERGROUND_TICK) { + Underground.energyTick(Math.max(0, Underground.energyTick() - 1)); + if (Underground.energyTick() == 0) { + // Check completed in case mine is locked out + Mine.checkCompleted(); + this.underground.gainEnergy(); + Underground.energyTick(this.underground.getEnergyRegenTime()); + } + Underground.counter = 0; + } + // Farm + this.farming.update(GameConstants.TICK_TIME / GameConstants.SECOND); + // Effect Engine (battle items and flutes) + EffectEngineRunner.counter += GameConstants.TICK_TIME; + if (EffectEngineRunner.counter >= GameConstants.EFFECT_ENGINE_TICK) { + EffectEngineRunner.tick(); + } + FluteEffectRunner.counter += GameConstants.TICK_TIME; + if (FluteEffectRunner.counter >= GameConstants.EFFECT_ENGINE_TICK) { + FluteEffectRunner.tick(); + } + this.zMoves.counter += GameConstants.TICK_TIME; + if (this.zMoves.counter >= GameConstants.ZMOVE_TICK) { + this.zMoves.tick(); + } + // Game timers + GameHelper.counter += GameConstants.TICK_TIME; + if (GameHelper.counter >= GameConstants.MINUTE) { + GameHelper.tick(); + } + // Check our save reminder once every 5 minutes + SaveReminder.counter += GameConstants.TICK_TIME; + if (SaveReminder.counter >= 5 * GameConstants.MINUTE) { + SaveReminder.tick(); + } + // update event calendar + this.specialEvents.counter += GameConstants.TICK_TIME; + if (this.specialEvents.counter >= GameConstants.SPECIAL_EVENT_TICK) { + this.specialEvents.tick(); + } + } + save() { + if (Settings.getSetting('disableAutoSave').value === false) { + Save.store(player); + } + } + // Knockout getters/setters + get gameState() { + return this._gameState(); + } + set gameState(value) { + this._gameState(value); + } +} +Game.achievementCounter = 0; +/** + * Class which controls the UI of the game. + */ +class GameController { + static showMapTooltip(tooltipText) { + if (tooltipText) { + const tooltip = $('#mapTooltip'); + tooltip.text(tooltipText); + tooltip.css('visibility', 'visible'); + } + } + static hideMapTooltip() { + const tooltip = $('#mapTooltip'); + tooltip.text(''); + tooltip.css('visibility', 'hidden'); + } + static convertKey(key) { + let newKey = key.length > 1 ? key : key.toUpperCase(); + if (newKey == ' ') { + newKey = 'Space'; + } + return newKey; + } + static simulateKey(code, type = 'keydown', modifiers = {}) { + const evtName = type.startsWith('key') ? type : `key${type}`; + const event = document.createEvent('HTMLEvents'); + Object.defineProperties(event, { + key: { value: code }, + }); + event.initEvent(evtName, true, false); + for (const i in modifiers) { + event[i] = modifiers[i]; + } + document.dispatchEvent(event); + } + static bindToolTips() { + $('[data-toggle="popover"]').popover(); + $('[data-toggle="tooltip"]').tooltip(); + } + //Event listeners for hide, hidden and shown. hide is required to prevent 'softlocking' and bricking Bootstrap when closed externally + static addKeyListeners() { + // Oak Items + const oakItems = App.game.oakItems; + const $oakItemsModal = $('#oakItemsModal'); + $oakItemsModal.on('hide.bs.modal', _ => $oakItemsModal.data('disable-toggle', true)); + $oakItemsModal.on('hidden.bs.modal shown.bs.modal', _ => $oakItemsModal.data('disable-toggle', false)); + // Pokeball Selector + const pokeballs = App.game.pokeballs; + const $pokeballSelector = $('#pokeballSelectorModal'); + $pokeballSelector.on('hide.bs.modal', _ => $pokeballSelector.data('disable-toggle', true)); + $pokeballSelector.on('hidden.bs.modal shown.bs.modal', _ => $pokeballSelector.data('disable-toggle', false)); + // Underground + const underground = App.game.underground; + const $undergroundModal = $('#mineModal'); + $undergroundModal.on('hide.bs.modal', _ => $undergroundModal.data('disable-toggle', true)); + $undergroundModal.on('hidden.bs.modal shown.bs.modal', _ => $undergroundModal.data('disable-toggle', false)); + // Quests + const quests = App.game.quests; + const $questModal = $('#QuestModal'); + $questModal.on('hide.bs.modal', _ => $questModal.data('disable-toggle', true)); + $questModal.on('hidden.bs.modal shown.bs.modal', _ => $questModal.data('disable-toggle', false)); + // Farm + const farms = App.game.farming; + const $farmsModal = $('#farmModal'); + $farmsModal.on('hide.bs.modal', _ => $farmsModal.data('disable-toggle', true)); + $farmsModal.on('hidden.bs.modal shown.bs.modal', _ => $farmsModal.data('disable-toggle', false)); + // Hatchery + const hatchery = App.game.breeding; + const $hatcheryModal = $('#breedingModal'); + $hatcheryModal.on('hide.bs.modal', _ => $hatcheryModal.data('disable-toggle', true)); + $hatcheryModal.on('hidden.bs.modal shown.bs.modal', _ => $hatcheryModal.data('disable-toggle', false)); + // Shop + const $shopModal = $('#shopModal'); + $shopModal.on('hide.bs.modal', _ => $shopModal.data('disable-toggle', true)); + $shopModal.on('hidden.bs.modal shown.bs.modal', _ => $shopModal.data('disable-toggle', false)); + // Ship + const $shipModal = $('#ShipModal'); + // Modal Collapse + $(GameConstants.ModalCollapseList).map(function () { + const id = `#${this}`; + const method = Settings.getSetting(`modalCollapse.${this}`).value ? 'show' : 'hide'; + $(id).collapse(method); + return $(id).get(); + }).on('show.bs.collapse', function () { + Settings.setSettingByName(`modalCollapse.${this.id}`, true); + }).on('hide.bs.collapse', function () { + Settings.setSettingByName(`modalCollapse.${this.id}`, false); + }); + $(document).on('keydown', e => { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u; + // Ignore any of our controls if focused on an input element + if (GameHelper.focusedOnEditableElement()) { + return; + } + const key = GameController.convertKey(e.key); + // Set flags for any key currently pressed down (used to check if key held down currently) + if (GameController.keyHeld[key]) { + GameController.keyHeld[key](true); + } + else { + GameController.keyHeld[key] = ko.observable(true).extend({ boolean: null }); + } + // Set our number key if defined (-1 for 0 indexed) + const numberKey = (+key) - 1; + const isNumberKey = !isNaN(numberKey) && numberKey >= 0; + const visibleModals = $('.modal:visible').length; + //Global Multi-key combinations + if (isNumberKey) { + if ((_b = (_a = GameController.keyHeld)[Settings.getSetting('hotkey.pokeballSelection').value]) === null || _b === void 0 ? void 0 : _b.call(_a)) { + // Open pokeball selector modal using P + (1-4) for each condition + if (!((_c = $pokeballSelector.data('bs.modal')) === null || _c === void 0 ? void 0 : _c._isShown) && !$pokeballSelector.data('disable-toggle')) { + $('.modal').modal('hide'); + (_d = $('#pokeballSelectorBody .clickable.pokeball-selected').eq(numberKey)) === null || _d === void 0 ? void 0 : _d.trigger('click'); + return e.preventDefault(); + } + } + } + // Safari Zone + if (App.game.gameState === GameConstants.GameState.safari) { + switch (key) { + case 'ArrowUp': + case Settings.getSetting('hotkey.dungeon.up').value: + Safari.move('up'); + break; + case 'ArrowLeft': + case Settings.getSetting('hotkey.dungeon.left').value: + Safari.move('left'); + break; + case 'ArrowDown': + case Settings.getSetting('hotkey.dungeon.down').value: + Safari.move('down'); + break; + case 'ArrowRight': + case Settings.getSetting('hotkey.dungeon.right').value: + Safari.move('right'); + break; + case Settings.getSetting('hotkey.safari.ball').value: + SafariBattle.throwBall(); + break; + case Settings.getSetting('hotkey.safari.bait').value: + SafariBattle.throwBait(); + break; + case Settings.getSetting('hotkey.safari.rock').value: + SafariBattle.throwRock(); + break; + case Settings.getSetting('hotkey.safari.run').value: + SafariBattle.run(); + break; + } + // We don't want to process any other keys while in the Safari zone + return e.preventDefault(); + } + // Within modals + if ((_e = $farmsModal.data('bs.modal')) === null || _e === void 0 ? void 0 : _e._isShown) { + switch (key) { + case Settings.getSetting('hotkey.farm.toggleShovel').value: + [FarmingTool.Shovel, FarmingTool.MulchShovel].includes(FarmController.selectedFarmTool()) ? FarmController.selectedFarmTool(FarmController.berryListVisible() ? FarmingTool.Berry : FarmingTool.Mulch) : FarmController.selectedFarmTool(FarmController.berryListVisible() ? FarmingTool.Shovel : FarmingTool.MulchShovel); + return e.preventDefault(); + case Settings.getSetting('hotkey.farm.togglePlotSafeLock').value: + FarmController.selectedFarmTool() == FarmingTool.Lock ? FarmController.selectedFarmTool(FarmController.berryListVisible() ? FarmingTool.Berry : FarmingTool.Mulch) : FarmController.selectedFarmTool(FarmingTool.Lock); + return e.preventDefault(); + } + } + if ((_f = $undergroundModal.data('bs.modal')) === null || _f === void 0 ? void 0 : _f._isShown) { + switch (key) { + case Settings.getSetting('hotkey.underground.hammer').value: + Mine.toolSelected(Mine.Tool.Hammer); + return e.preventDefault(); + case Settings.getSetting('hotkey.underground.chisel').value: + Mine.toolSelected(Mine.Tool.Chisel); + return e.preventDefault(); + case Settings.getSetting('hotkey.underground.survey').value: + Mine.survey(); + return e.preventDefault(); + case Settings.getSetting('hotkey.underground.bomb').value: + Mine.bomb(); + return e.preventDefault(); + } + if (isNumberKey) { + if (numberKey === 0) { + ItemList.SmallRestore.use(1); + } + else if (numberKey === 1) { + ItemList.MediumRestore.use(1); + } + else if (numberKey === 2) { + ItemList.LargeRestore.use(1); + } + return e.preventDefault(); + } + } + if ((_g = $oakItemsModal.data('bs.modal')) === null || _g === void 0 ? void 0 : _g._isShown) { + // Toggle oak items + if (isNumberKey) { + if (oakItems.isUnlocked(numberKey)) { + if (oakItems.isActive(numberKey)) { + oakItems.deactivate(numberKey); + } + else { + oakItems.activate(numberKey); + } + } + return e.preventDefault(); + } + } + if ((_h = $pokeballSelector.data('bs.modal')) === null || _h === void 0 ? void 0 : _h._isShown) { + if (isNumberKey) { + // Switch selection type + if ((_k = (_j = GameController.keyHeld)[Settings.getSetting('hotkey.pokeballSelection').value]) === null || _k === void 0 ? void 0 : _k.call(_j)) { + (_l = $('#pokeballSelectorBody .clickable.pokeball-selected').eq(numberKey)) === null || _l === void 0 ? void 0 : _l.trigger('click'); + return e.preventDefault(); + } + // Select Pokeball from pokeball selector (0 = none) + if (numberKey < App.game.pokeballs.pokeballs.length) { + (_m = pokeballs.selectedSelection()) === null || _m === void 0 ? void 0 : _m(numberKey); + } + return e.preventDefault(); + } + } + if ((_o = $shipModal.data('bs.modal')) === null || _o === void 0 ? void 0 : _o._isShown) { + if (isNumberKey) { + if (numberKey <= player.highestRegion()) { + const regionButton = $('.ship-modal-region-button').eq(numberKey); + if (regionButton && !regionButton.prop('disabled')) { + regionButton.trigger('click'); + } + } + return e.preventDefault(); + } + } + if ((_p = $shopModal.data('bs.modal')) === null || _p === void 0 ? void 0 : _p._isShown) { + if (isNumberKey) { + if (numberKey <= ShopHandler.shopObservable().items.length) { + ShopHandler.setSelected(numberKey); + } + return e.preventDefault(); + } + switch (key) { + case Settings.getSetting('hotkey.shop.buy').value: + ShopHandler.buyItem(); + return e.preventDefault(); + case Settings.getSetting('hotkey.shop.max').value: + ShopHandler.maxAmount(); + return e.preventDefault(); + case Settings.getSetting('hotkey.shop.reset').value: + ShopHandler.resetAmount(); + return e.preventDefault(); + case Settings.getSetting('hotkey.shop.increase').value: + if (GameController.keyHeld.Shift()) { + switch (Settings.getSetting('shopButtons').value) { + case 'original': + ShopHandler.increaseAmount(100); + break; + case 'multiplication': + ShopHandler.multiplyAmount(0.1); + break; + case 'bigplus': + ShopHandler.increaseAmount(1000); + break; + } + } + else { + switch (Settings.getSetting('shopButtons').value) { + case 'original': + ShopHandler.increaseAmount(10); + break; + case 'multiplication': + ShopHandler.multiplyAmount(10); + break; + case 'bigplus': + ShopHandler.increaseAmount(100); + break; + } + } + return e.preventDefault(); + } + } + // Only run if no modals are open + if (visibleModals === 0) { + // Route Battles + if (App.game.gameState === GameConstants.GameState.fighting && !((_r = (_q = GameController.keyHeld).Control) === null || _r === void 0 ? void 0 : _r.call(_q))) { + const cycle = Routes.getRoutesByRegion(player.region).filter(r => r.isUnlocked()).map(r => r.number); + if (cycle.length > 1) { + const idx = cycle.findIndex(r => r == player.route); + // Allow '=' to fallthrough to '+' since they share a key on many keyboards + switch (key) { + case '=': + case '+': + MapHelper.moveToRoute(cycle[(idx + 1) % cycle.length], player.region); + return e.preventDefault(); + case '-': + MapHelper.moveToRoute(cycle[(idx + cycle.length - 1) % cycle.length], player.region); + return e.preventDefault(); + } + } + } + // Dungeons + if (App.game.gameState === GameConstants.GameState.dungeon) { + switch (key) { + case 'ArrowUp': + case Settings.getSetting('hotkey.dungeon.up').value: + DungeonRunner.map.moveUp(); + return e.preventDefault(); + case 'ArrowLeft': + case Settings.getSetting('hotkey.dungeon.left').value: + DungeonRunner.map.moveLeft(); + return e.preventDefault(); + case 'ArrowDown': + case Settings.getSetting('hotkey.dungeon.down').value: + DungeonRunner.map.moveDown(); + return e.preventDefault(); + case 'ArrowRight': + case Settings.getSetting('hotkey.dungeon.right').value: + DungeonRunner.map.moveRight(); + return e.preventDefault(); + case Settings.getSetting('hotkey.dungeon.interact').value: + DungeonRunner.handleInteraction(GameConstants.DungeonInteractionSource.Keybind); + DungeonRunner.continuousInteractionInput = true; + return e.preventDefault(); + } + } + // Within towns + if (App.game.gameState === GameConstants.GameState.town) { + if (key === Settings.getSetting('hotkey.town.start').value) { + if (player.town instanceof DungeonTown) { + DungeonRunner.initializeDungeon(player.town.dungeon); + } + else { + player.town.content[0].protectedOnclick(); + } + return e.preventDefault(); + } + else if (isNumberKey) { + // Check if a number higher than 0 and less than our towns content was pressed + const filteredContent = player.town.content.filter(c => c.isVisible()); + const filteredNPCs = (_s = player.town.npcs) === null || _s === void 0 ? void 0 : _s.filter(n => n.isVisible()); + if (numberKey < filteredContent.length) { + filteredContent[numberKey].protectedOnclick(); + } + else if (filteredNPCs && numberKey < filteredContent.length + filteredNPCs.length) { + NPCController.openDialog(filteredNPCs[numberKey - filteredContent.length]); + } + return e.preventDefault(); + } + else if (player.town instanceof DungeonTown && !((_u = (_t = GameController.keyHeld).Control) === null || _u === void 0 ? void 0 : _u.call(_t))) { + const cycle = Object.values(TownList).filter(t => t instanceof DungeonTown && t.region == player.region && t.isUnlocked()); + const idx = cycle.findIndex(d => d.name == player.town.name); + switch (key) { + case '=': + case '+': + MapHelper.moveToTown(cycle[(idx + 1) % cycle.length].name); + return e.preventDefault(); + case '-': + MapHelper.moveToTown(cycle[(idx + cycle.length - 1) % cycle.length].name); + return e.preventDefault(); + } + } + } + } + // Anywhere keys + switch (key) { + case Settings.getSetting('hotkey.farm').value: + // Open the Farm + if (farms.canAccess() && !$farmsModal.data('disable-toggle')) { + $('.modal').modal('hide'); + $farmsModal.modal('toggle'); + return e.preventDefault(); + } + break; + case Settings.getSetting('hotkey.hatchery').value: + // Open the Hatchery + if (hatchery.canAccess() && !$hatcheryModal.data('disable-toggle')) { + $('.modal').modal('hide'); + $hatcheryModal.modal('toggle'); + return e.preventDefault(); + } + break; + case Settings.getSetting('hotkey.oakItems').value: + // Open oak items + if (oakItems.canAccess() && !$oakItemsModal.data('disable-toggle')) { + $('.modal').modal('hide'); + $oakItemsModal.modal('toggle'); + return e.preventDefault(); + } + break; + case Settings.getSetting('hotkey.underground').value: + // Open the Underground + if (underground.canAccess() && !$undergroundModal.data('disable-toggle')) { + $('.modal').modal('hide'); + $undergroundModal.modal('toggle'); + return e.preventDefault(); + } + break; + case Settings.getSetting('hotkey.shop').value: + // Open the Poke Mart + if (App.game.statistics.gymsDefeated[GameConstants.getGymIndex('Champion Lance')]() >= 1 && !$shopModal.data('disable-toggle')) { + $('.modal').modal('hide'); + ShopHandler.showShop(pokeMartShop); + $shopModal.modal('toggle'); + return e.preventDefault(); + } + break; + case Settings.getSetting('hotkey.forceSave').value: + if (GameController.keyHeld.Shift()) { + Save.store(player); + Notifier.notify({ message: 'Game Saved!' }); + return e.preventDefault(); + } + break; + case Settings.getSetting('hotkey.downloadSave').value: + if (GameController.keyHeld.Shift()) { + Save.download(); + return e.preventDefault(); + } + break; + case Settings.getSetting('hotkey.mute').value: + if (GameController.keyHeld.Shift()) { + Settings.getSetting('sound.muted').toggle(); + return e.preventDefault(); + } + break; + case Settings.getSetting('hotkey.dailyQuests').value: + // Open the Quests + if (quests.isDailyQuestsUnlocked() && !$questModal.data('disable-toggle')) { + $('.modal').modal('hide'); + $questModal.modal('toggle'); + return e.preventDefault(); + } + break; + } + if (key === 'Space') { + return e.preventDefault(); + } + }); + $(document).on('keyup', e => { + var _a, _b; + // Ignore any of our controls if focused on an input element + if (GameHelper.focusedOnEditableElement()) { + return; + } + const key = GameController.convertKey(e.key); + // Our key is no longer being held down + (_b = (_a = GameController.keyHeld)[key]) === null || _b === void 0 ? void 0 : _b.call(_a, false); + if (App.game.gameState === GameConstants.GameState.safari) { + switch (key) { + case 'ArrowUp': + case Settings.getSetting('hotkey.dungeon.up').value: + Safari.stop('up'); + return e.preventDefault(); + case 'ArrowLeft': + case Settings.getSetting('hotkey.dungeon.left').value: + Safari.stop('left'); + return e.preventDefault(); + case 'ArrowDown': + case Settings.getSetting('hotkey.dungeon.down').value: + Safari.stop('down'); + return e.preventDefault(); + case 'ArrowRight': + case Settings.getSetting('hotkey.dungeon.right').value: + Safari.stop('right'); + return e.preventDefault(); + } + } + if (key === Settings.getSetting('hotkey.dungeon.interact').value) { + DungeonRunner.continuousInteractionInput = false; + return e.preventDefault(); + } + if (key === 'Space') { + return e.preventDefault(); + } + }); + } +} +// Store keys for multi-key combinations +GameController.keyHeld = { + Shift: ko.observable(false).extend({ boolean: null }), +}; +// when stacking modals allow scrolling after top modal hidden +$(document).on('hidden.bs.modal', '.modal', () => { + $('.modal:visible').length && $(document.body).addClass('modal-open'); +}); +/// +/// +/** + * Required modules before porting: + * Save.ts + * upgrades/Upgrade.ts + * towns/Town.ts - Town, TownList + * worldmap/MapHelper.ts + * items/Item.ts - ItemList + */ +/** + * Information about the player. + * All player variables need to be saved. + */ +class Player { + constructor(savedPlayer) { + var _a, _b, _c; + this._timeTraveller = false; + this.effectList = {}; + this.effectTimer = {}; + const saved = (savedPlayer != null); + savedPlayer = savedPlayer || { + _region: GameConstants.Region.kanto, + _route: 1, + }; + this._lastSeen = savedPlayer._lastSeen || 0; + this._timeTraveller = savedPlayer._timeTraveller || false; + if (this._lastSeen > Date.now()) { + Notifier.notify({ + title: 'Welcome Time Traveller!', + message: 'Please ensure you keep a backup of your old save as travelling through time can cause some serious problems.\n\nAny Pokémon you may have obtained in the future could cease to exist which could corrupt your save file!', + type: NotificationConstants.NotificationOption.danger, + timeout: GameConstants.HOUR, + }); + this._timeTraveller = true; + } + this._region = ko.observable(savedPlayer._region); + this._subregion = ko.observable(savedPlayer._subregion || 0); + this.subregionObject = ko.pureComputed(() => SubRegions.getSubRegionById(this.region, this.subregion)); + this._route = ko.observable(savedPlayer._route); + // Check that the route is valid, otherwise set it to the regions starting route (route 0 means they are in a town) + if (this.route > 0 && !MapHelper.validRoute(this.route, this.region)) { + this.route = GameConstants.StartingRoutes[this.region]; + } + // Return player to last town or starter town if their town no longer exist for whatever reason + this._townName = TownList[savedPlayer._townName] ? savedPlayer._townName : GameConstants.StartingTowns[this.region]; + this._town = ko.observable(TownList[this._townName]); + this._town.subscribe(value => this._townName = value.name); + this.highestRegion = ko.observable(savedPlayer.highestRegion || 0); + this.highestSubRegion = ko.observable(savedPlayer.highestSubRegion || 0); + this.regionStarters = new Array(); + for (let i = 0; i <= GameConstants.MAX_AVAILABLE_REGION; i++) { + if (savedPlayer.regionStarters && savedPlayer.regionStarters[i] != undefined) { + this.regionStarters.push(ko.observable(savedPlayer.regionStarters[i])); + } + else if (i < ((_a = savedPlayer.highestRegion) !== null && _a !== void 0 ? _a : 0)) { + this.regionStarters.push(ko.observable(GameConstants.Starter.Grass)); + } + else if (i == ((_b = savedPlayer.highestRegion) !== null && _b !== void 0 ? _b : 0)) { + this.regionStarters.push(ko.observable(GameConstants.Starter.None)); + if (i != GameConstants.Region.kanto) { // Kanto has it's own starter code + if (this.region != i) { + this.region = i; + this.subregion = 0; + this.route = undefined; + this._townName = GameConstants.StartingTowns[i]; + this.town = TownList[this._townName]; + } + $('#pickStarterModal').modal('show'); + } + } + else { + this.regionStarters.push(ko.observable(GameConstants.Starter.None)); + } + } + this._itemList = Save.initializeItemlist(); + if (savedPlayer._itemList) { + for (const key in savedPlayer._itemList) { + if (this.itemList[key]) { + this.itemList[key](savedPlayer._itemList[key]); + } + } + } + this._itemMultipliers = savedPlayer._itemMultipliers || Save.initializeMultipliers(); + this.effectList = Save.initializeEffects(savedPlayer.effectList || {}); + this.effectTimer = Save.initializeEffectTimer(); + // Save game origins, useful for tracking down any errors that may not be related to the main game + this._origins = [...new Set((savedPlayer._origins || [])).add((_c = window.location) === null || _c === void 0 ? void 0 : _c.origin)]; + this.trainerId = savedPlayer.trainerId || Rand.intBetween(0, 999999).toString().padStart(6, '0'); + } + get itemList() { + return this._itemList; + } + amountOfItem(itemName) { + return this.itemList[itemName](); + } + get itemMultipliers() { + return this._itemMultipliers; + } + get route() { + return this._route(); + } + set route(value) { + this._route(value); + } + get region() { + return this._region(); + } + set region(value) { + this._region(value); + } + get subregion() { + return this._subregion(); + } + set subregion(value) { + if (value < 0) { + value = Math.max(...SubRegions.getSubRegions(this.region).filter(sr => sr.unlocked()).map(sr => sr.id)); + } + if (value > Math.max(...SubRegions.getSubRegions(this.region).filter(sr => sr.unlocked()).map(sr => sr.id))) { + value = 0; + } + const changedSubregions = value !== this.subregion; + this._subregion(value); + if (value > this.highestSubRegion()) { + this.highestSubRegion(value); + } + if (changedSubregions) { + const subregion = SubRegions.getSubRegionById(this.region, value); + if (subregion.startRoute && subregion.startRoute !== this.route) { + MapHelper.moveToRoute(subregion.startRoute, this.region); + } + else if (subregion.startTown && subregion.startTown !== this.town.name) { + MapHelper.moveToTown(subregion.startTown); + } + } + } + get town() { + return this._town(); + } + set town(value) { + this._town(value); + } + gainItem(itemName, amount) { + this.itemList[itemName](this.itemList[itemName]() + amount); + } + loseItem(itemName, amount) { + this.itemList[itemName](this.itemList[itemName]() - amount); + } + lowerItemMultipliers(multiplierDecreaser, amount = 1) { + for (const obj in ItemList) { + const item = ItemList[obj]; + item.decreasePriceMultiplier(amount, multiplierDecreaser); + } + } + hasMegaStone(megaStone) { + return this.itemList[GameConstants.MegaStoneType[megaStone]]() > 0; + } + gainMegaStone(megaStone, notify = true) { + const name = GameConstants.MegaStoneType[megaStone]; + if (!this.itemList[name]()) { + this.gainItem(name, 1); + } + if (notify) { + const item = ItemList[GameConstants.MegaStoneType[megaStone]]; + const partyPokemon = App.game.party.getPokemonByName(item.basePokemon); + Notifier.notify({ + message: partyPokemon ? `${partyPokemon.displayName} has gained a Mega Stone!` : `You have gained a Mega Stone for ${item.basePokemon}!`, + type: NotificationConstants.NotificationOption.success, + }); + } + } + toJSON() { + const keep = [ + '_route', + '_region', + '_subregion', + '_townName', + '_itemList', + '_itemMultipliers', + '_lastSeen', + '_timeTraveller', + '_origins', + 'effectList', + 'highestRegion', + 'highestSubRegion', + 'regionStarters', + 'trainerId', + ]; + const plainJS = ko.toJS(this); + Object.entries(plainJS._itemMultipliers).forEach(([key, value]) => { + if (value <= 1) { + delete plainJS._itemMultipliers[key]; + } + }); + Object.entries(plainJS._itemList).forEach(([key, value]) => { + if (!value) { + delete plainJS._itemList[key]; + } + }); + Object.entries(plainJS.effectList).forEach(([key, value]) => { + if (!value) { + delete plainJS.effectList[key]; + } + }); + return Save.filter(plainJS, keep); + } +} +/// +/// +class Save { + static store(player) { + localStorage.setItem(`player${Save.key}`, JSON.stringify(player)); + localStorage.setItem(`save${Save.key}`, JSON.stringify(this.getSaveObject())); + localStorage.setItem(`settings${Save.key}`, JSON.stringify(Settings.toJSON())); + this.counter = 0; + //console.log('%cGame saved', 'color:#3498db;font-weight:900;'); + } + static getSaveObject() { + const saveObject = {}; + Object.keys(App.game).filter(key => App.game[key].saveKey).forEach(key => { + saveObject[App.game[key].saveKey] = App.game[key].toJSON(); + }); + saveObject.achievements = AchievementHandler.toJSON(); + return saveObject; + } + static load() { + const saved = localStorage.getItem(`player${Save.key}`); + // Load our settings, or the saved default settings, or no settings + const settings = localStorage.getItem(`settings${Save.key}`) || localStorage.getItem('settings') || '{}'; + Settings.fromJSON(JSON.parse(settings)); + // Sort modules now, save settings, load settings + SortModules(); + if (saved !== 'null') { + return new Player(JSON.parse(saved)); + } + else { + return new Player(); + } + } + static download() { + const backupSaveData = { player, save: this.getSaveObject(), settings: Settings.toJSON() }; + try { + const element = document.createElement('a'); + element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(SaveSelector.btoa(JSON.stringify(backupSaveData)))}`); + const datestr = GameConstants.formatDate(new Date()); + const filename = Settings.getSetting('saveFilename').value ? Settings.getSetting('saveFilename').value : Settings.getSetting('saveFilename').defaultValue; + element.setAttribute('download', GameHelper.saveFileName(filename, { '{date}': datestr, '{version}': App.game.update.version, '{name}': App.game.profile.name() })); + element.style.display = 'none'; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + App.game.saveReminder.lastDownloaded(App.game.statistics.secondsPlayed()); + } + catch (err) { + console.error('Error trying to download save', err); + Notifier.notify({ + title: 'Failed to download save data', + message: 'Please check the console for errors, and report them on our Discord.', + type: NotificationConstants.NotificationOption.primary, + timeout: 6e4, + }); + try { + localStorage.backupSave = JSON.stringify(backupSaveData); + } + catch (e) { } + } + } + static copySaveToClipboard() { + const backupSaveData = { player, save: this.getSaveObject(), settings: Settings.toJSON() }; + navigator.clipboard.writeText(SaveSelector.btoa(JSON.stringify(backupSaveData))); + Notifier.notify({ + title: 'Save copied', + message: 'Please paste the clipboard contents into a new \'.txt\' file.', + type: NotificationConstants.NotificationOption.info, + }); + } + static delete() { + return __awaiter(this, void 0, void 0, function* () { + const confirmDelete = yield Notifier.prompt({ + title: 'Delete save file', + message: 'Are you sure you want delete your save file?\n\nTo confirm, type "DELETE"', + type: NotificationConstants.NotificationOption.danger, + timeout: 6e4, + }); + if (confirmDelete == 'DELETE') { + localStorage.removeItem(`player${Save.key}`); + localStorage.removeItem(`save${Save.key}`); + localStorage.removeItem(`settings${Save.key}`); + // Prevent the old save from being saved again + window.onbeforeunload = () => { }; + location.reload(); + } + }); + } + /** Filters an object by property names + * @param object : any The object you want to filter + * @param keep : string[] An array of property names that should be kept + * @returns {Object} : The original object with only the specified properties + */ + static filter(object, keep) { + const filtered = {}; + let prop; + for (prop in object) { + if (keep.includes(prop)) { + filtered[prop] = object[prop]; + } + } + return filtered; + } + static initializeMultipliers() { + const res = {}; + for (const obj in ItemList) { + res[obj] = 1; + } + return res; + } + static initializeItemlist() { + const res = {}; + for (const obj in ItemList) { + res[obj] = ko.observable(0).extend({ numeric: 0 }); + } + return res; + } + static initializeGems(saved) { + let res; + if (saved) { + res = saved.map((type) => { + return type.map((effectiveness) => { + return ko.observable(effectiveness); + }); + }); + } + else { + res = []; + for (const item in PokemonType) { + if (!isNaN(Number(item))) { + res[item] = []; + res[item][GameConstants.TypeEffectiveness.Immune] = ko.observable(0); + res[item][GameConstants.TypeEffectiveness.NotVery] = ko.observable(0); + res[item][GameConstants.TypeEffectiveness.Neutral] = ko.observable(0); + res[item][GameConstants.TypeEffectiveness.Very] = ko.observable(0); + } + } + } + return res; + } + static initializeEffects(saved) { + const res = {}; + for (const obj in GameConstants.BattleItemType) { + res[obj] = ko.observable(saved ? saved[obj] || 0 : 0); + } + for (const obj in GameConstants.FluteItemType) { + res[obj] = ko.observable(saved ? saved[obj] || 0 : 0); + } + return res; + } + static initializeEffectTimer() { + const res = {}; + for (const obj in GameConstants.BattleItemType) { + res[obj] = ko.observable('00:00'); + } + for (const obj in GameConstants.FluteItemType) { + res[obj] = ko.observable('00:00'); + } + return res; + } + static loadFromFile(file) { + const fileToRead = file; + const fr = new FileReader(); + fr.readAsText(fileToRead); + setTimeout(() => { + try { + const decoded = SaveSelector.atob(fr.result); + console.debug('decoded:', decoded); + const json = JSON.parse(decoded); + console.debug('json:', json); + if (decoded && json && json.player && json.save) { + localStorage.setItem(`player${Save.key}`, JSON.stringify(json.player)); + localStorage.setItem(`save${Save.key}`, JSON.stringify(json.save)); + if (json.settings) { + localStorage.setItem(`settings${Save.key}`, JSON.stringify(json.settings)); + } + else { + localStorage.removeItem(`settings${Save.key}`); + } + // Prevent the old save from being saved again + window.onbeforeunload = () => { }; + location.reload(); + } + else { + Notifier.notify({ + message: 'This is not a valid decoded savefile', + type: NotificationConstants.NotificationOption.danger, + }); + } + } + catch (err) { + Notifier.notify({ + message: 'This is not a valid savefile', + type: NotificationConstants.NotificationOption.danger, + }); + } + }, 1000); + } + static convert() { + const base64 = $('#convertTextArea').val().toString(); + try { + const json = atob(base64); + const p = JSON.parse(json); + Save.convertShinies(p.caughtPokemonList); + $('#saveModal').modal('hide'); + } + catch (e) { + Notifier.notify({ + message: 'Invalid save data.', + type: NotificationConstants.NotificationOption.danger, + }); + } + } + static convertShinies(list) { + const converted = []; + list = list.filter(p => p.shiny); + for (const pokemon of list) { + const id = +pokemon.id; + const partyPokemon = App.game.party.getPokemon(id); + if (partyPokemon) { + converted.push(pokemon.name); + partyPokemon.shiny = true; + } + } + if (converted.length > 0) { + Notifier.notify({ + message: `You have gained the following shiny Pokémon:
    ${converted.join(',
    ')}`, + type: NotificationConstants.NotificationOption.success, + timeout: 1e4, + }); + } + else { + Notifier.notify({ + message: 'No new shiny Pokémon to import.', + type: NotificationConstants.NotificationOption.info, + }); + } + } +} +// Process new day events as soon as possible after loading a file. +Save.counter = GameConstants.SAVE_TICK - GameConstants.TICK_TIME; +Save.key = ''; +Save; +class StartSequenceRunner { + static start() { + App.game.gameState = GameConstants.GameState.paused; + $('#startSequenceModal').modal('show'); + } + static pickStarter(s) { + // Reload the achievements in case the user has any challenge modes activated + AchievementHandler.load(); + App.game.quests.getQuestLine('Tutorial Quests').beginQuest(0); + this.starterPicked = s; + $('#pickStarterTutorialModal').modal('hide'); + const dataPokemon = PokemonHelper.getPokemonById(GameConstants.RegionalStarters[GameConstants.Region.kanto][this.starterPicked]); + const shiny = PokemonFactory.generateShiny(GameConstants.SHINY_CHANCE_BATTLE); + const gender = PokemonFactory.generateGender(dataPokemon.gender.femaleRatio, dataPokemon.gender.type); + App.game.gameState = GameConstants.GameState.fighting; + const battlePokemon = new BattlePokemon(dataPokemon.name, dataPokemon.id, dataPokemon.type1, dataPokemon.type2, 10, 1, 100, 0, new Amount(0, GameConstants.Currency.money), shiny, 0, gender, GameConstants.ShadowStatus.None, EncounterType.route); + Battle.enemyPokemon(battlePokemon); + // Show the help information text + Information.show({ + steps: [ + { + element: document.getElementsByClassName('battle-view')[0], + intro: 'Click here to deal "Click Attack" damage to Pokémon.', + }, + ], + }); + // Set the function to call showCaughtMessage after pokemon is caught + battlePokemon.isAlive = function () { + if (battlePokemon.health() <= 0) { + setTimeout(() => { + Information.hide(); + player.regionStarters[GameConstants.Region.kanto](StartSequenceRunner.starterPicked); + App.game.profile.pokemon(dataPokemon.id); + StartSequenceRunner.showCaughtMessage(); + }, 1000); + //reset the function so you don't call it too many times :) + //What a beautiful piece of code + battlePokemon.isAlive = function () { + return false; + }; + } + return this.health() > 0; + }; + } + static showCaughtMessage() { + App.game.gameState = GameConstants.GameState.paused; + $('#starterCaughtModal').modal('show'); + $('#pokeballSelector').css('display', 'block'); + $('#pokemonListContainer').css('display', 'block'); + $('#oakItemsContainer').css('display', 'block'); + $('#questDisplayContainer').css('display', 'block'); + $('#currencyContainer').css('display', 'block'); + } +} +StartSequenceRunner.starterPicked = GameConstants.Starter.None; +StartSequenceRunner.noStarterCount = 0; +document.addEventListener('DOMContentLoaded', () => { + $('#startSequenceModal').on('hidden.bs.modal', () => { + $('#pickStarterTutorialModal').modal('show'); + }); + $('#pickStarterTutorialModal').on('hidden.bs.modal', () => { + if (StartSequenceRunner.starterPicked == GameConstants.Starter.None) { + StartSequenceRunner.noStarterCount++; + const startersCount = StartSequenceRunner.noStarterCount >= 5 ? 'four' : 'three'; + $('#pickStarterTutorialModalText').text(`I can't hold off all ${startersCount}! Please pick the Pokémon you want to fight!`); + $('#pickStarterTutorialModal').modal('show'); + if (StartSequenceRunner.noStarterCount == 5) { + // Add Pikachu to the selections + $('#starterSelection').append(`
    + +
    `); + } + } + }); + $('#starterCaughtModal').on('hidden.bs.modal', () => { + Save.store(player); + App.game.gameState = GameConstants.GameState.fighting; + Information.show({ + steps: [ + { + element: document.getElementById('questDisplayContainer'), + intro: 'Complete the tutorial quests to continue.', + }, + ], + }); + }); +}); +class Update { + constructor() { + this.saveKey = 'update'; + // Loaded from package.json + this.version = '0.10.22'; + this.saveVersion = '0.0.0'; + this.updateSteps = { + '0.4.0': ({ playerData, saveData }) => { + saveData.update = { version: '0.0.0' }; + // Update the save data as it is no longer a part of player data + saveData.statistics = Object.assign(Object.assign({}, playerData.statistics || {}), { pokemonCaptured: playerData._caughtAmount || 0, pokemonDefeated: playerData._defeatedAmount || 0, totalShinyPokemonCaptured: playerData._shinyCatches || 0, totalPokemonCaptured: playerData.statistics.pokemonCaptured || 0, totalPokemonDefeated: playerData.statistics.pokemonDefeated || 0 }); + }, + '0.4.4': ({ saveData }) => { + // Just incase statistics is not set + saveData.statistics = saveData.statistics || {}; + // Rename from the old statistic name + saveData.statistics = Object.assign(Object.assign({}, saveData.statistics), { clickAttacks: saveData.statistics.clicks || 0, totalDungeonTokens: saveData.statistics.totalTokens || 0, undergroundItemsFound: saveData.statistics.digItems || 0, undergroundLayersMined: saveData.statistics.digDeeper || 0 }); + }, + '0.4.15': ({ playerData, saveData }) => { + playerData._itemList.Lucky_egg = playerData._itemList.xExp; + delete playerData._itemList.xExp; + delete localStorage.mine; + }, + '0.4.17': ({ saveData }) => { + // Just incase statistics is not set + saveData.statistics = saveData.statistics || {}; + // Rename from the old statistic name + saveData.statistics = Object.assign(Object.assign({}, saveData.statistics), { totalPokemonHatched: saveData.statistics.hatchedEggs || 0 }); + }, + '0.4.18': ({ playerData, saveData }) => { + // Move quests from player data -> save data + saveData.quests = { + xp: Math.floor(playerData._questXP || 0), + refreshes: playerData.questRefreshes || 0, + lastRefresh: playerData._lastSeen, + questList: new Array(10).fill({}).map((q, index) => ({ index, initial: null })), + questLines: [ + { + state: playerData.tutorialComplete ? 2 : 1, + name: 'Tutorial Quests', + quest: playerData.tutorialProgress || 0, + }, + ], + }; + // Convert quest the player is currently doing + (playerData.currentQuests || []).forEach(quest => { + saveData.quests.questList[quest.index || 0].initial = quest.initial || null; + }); + // Convert quest the player has completed + (playerData.completedQuestList || []).forEach((complete, index) => { + if (complete) { + saveData.quests.questList[index].notified = true; + saveData.quests.questList[index].claimed = true; + saveData.quests.questList[index].initial = 0; + } + }); + }, + '0.5.0': ({ playerData }) => { + // Give the players Soothe Bells in place of Time stones + playerData._itemList = playerData._itemList || {}; + playerData._itemList.Soothe_bell = playerData._itemList.Time_stone || 0; + delete playerData._itemList.Time_stone; + }, + '0.5.2': ({ saveData }) => { + // Calculate hatched amount (we can't calculate the shiny hatches though) + const pokemonHatched = {}; + saveData.party.caughtPokemon.forEach(p => pokemonHatched[p.id] = p.attackBonus / 25); + // Rename from the old statistic name, add our new statistics + saveData.statistics = Object.assign(Object.assign({}, saveData.statistics), { totalBerriesHarvested: saveData.statistics.berriesHarvested.reduce((sum, b) => sum + b, 0) || 0, totalShardsGained: saveData.statistics.totalShards.reduce((sum, b) => sum + b, 0) || 0, shardsGained: saveData.statistics.totalShards || 0, pokemonHatched }); + // If the player has the Soul Badge already + // Not using game constants incase the badge value isn't 5 in the future + if (saveData.badgeCase[5]) { + Update.startQuestLine(saveData, 'Mining Expedition'); + } + }, + '0.5.5': ({ saveData }) => { + // Correct statistics + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 22, 34); // Petalburg Woods + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 30, 35); // New Mauville + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 56, 50); // Hall of Origin + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 33); // Sealed Chamber + }, + '0.5.7': ({ saveData }) => { + // Update shinies + saveData.party.shinyPokemon.forEach(name => { + const id = pokemonMap[name].id; + if (id) { + const pokemon = saveData.party.caughtPokemon.find(p => p.id == id); + if (pokemon) { + pokemon.shiny = true; + } + } + }); + }, + '0.5.8': ({ playerData, saveData }) => { + // Hardcoded to allow upgrading from an older save, if we change + // the Routes class in the future. Values are lowest/highest route + // index + const regionRoutes = { + kanto: [1, 25], + johto: [26, 48], + hoenn: [101, 134], + sinnoh: [201, 230], + }; + const result = saveData.statistics.routeKills.reduce((acc, nextValue, nextIndex) => { + const [region] = Object.entries(regionRoutes).find(([, check]) => ( + // Find the region that contains this index + check[0] <= nextIndex && nextIndex <= check[1])) || ['none']; + // Skip over any statistics for the 'none' region that are also 0, since + // these are just the gaps in the route numbers + if (region === 'none' && nextValue === 0) { + return acc; + } + // Ensure the region has been prepared + acc[region] = (acc[region] || {}); + // Track the route with its number in the statistics + acc[region][nextIndex] = nextValue; + return acc; + }, {}); + saveData.statistics.routeKills = result; + // Refund any shards spent on shard upgrades that have no effect + // Using magic number incase any of these values change in the future + const invalidUpgrades = { + 0: 3, + 1: 0, + 2: 0, + 4: 0, + 5: 0, + 9: 0, + 11: 0, + 12: 0, + 15: 0, + 16: 0, + 17: 0, + }; + Object.entries(invalidUpgrades).forEach(([type, effectiveness]) => { + const index = +type * 4 + effectiveness; + let level = saveData.shards.shardUpgrades[index]; + // Refund each level of upgrade purchased + while (level-- > 0) { + const cost = (level + 1) * 500; + saveData.shards.shardWallet[type] += cost; + } + }); + // Give breeding slots based on highest region + saveData.breeding.queueSlots = 0; + for (let region = 0; region < playerData.highestRegion; region++) { + saveData.breeding.queueSlots += Math.max(4, 4 * Math.pow(2, region - 1)); + } + }, + '0.6.0': ({ saveData }) => { + // Update the attack bonus percentages + saveData.party.caughtPokemon = saveData.party.caughtPokemon.map(p => { + p.attackBonusPercent = p.attackBonus; + delete p.attackBonus; + return p; + }); + // Update Farm data + // Refund Farm Points for current berries + for (let i = 0; i < 8; i++) { + const amount = 100 / i; + const refundTokens = Math.floor(saveData.farming.berryList[i] / amount); + saveData.wallet.currencies[4] += refundTokens; + saveData.farming.berryList[i] = 0; + } + // Unlock & Give 5 Cheri berries to start off with + saveData.farming.unlockedBerries = [true]; + saveData.farming.berryList[0] = 5; + // Refund Farm Points for plots previously unlocked + saveData.wallet.currencies[4] += saveData.farming.plotList.map((p, i) => p.isUnlocked ? 10 * Math.floor(Math.pow(i, 2)) : 0).reduce((s, a) => s + a, 0); + // Reset all plots + delete saveData.farming.plotList; + }, + '0.6.1': ({ saveData }) => { + // Only update if save is from v0.6.0+ + if (this.minUpdateVersion('0.6.0', saveData)) { + if (saveData.oakItems.purchaseList) { + if (saveData.oakItems.purchaseList[OakItemType.Squirtbottle]) { + saveData.oakItems[OakItemType[OakItemType.Squirtbottle]].purchased = true; + } + if (saveData.oakItems.purchaseList[OakItemType.Sprinklotad]) { + saveData.oakItems[OakItemType[OakItemType.Sprinklotad]].purchased = true; + } + } + } + }, + '0.6.5': ({ playerData, saveData }) => { + // Only update if save is from v0.6.0+ + if (this.minUpdateVersion('0.6.0', saveData)) { + // nerf amount of proteins used per Pokemon + const maxProteins = (playerData.highestRegion + 1) * 5; + let proteinsToRefund = 0; + saveData.party.caughtPokemon = saveData.party.caughtPokemon.map(p => { + if (!p.proteinsUsed || p.proteinsUsed <= maxProteins) { + return p; + } + proteinsToRefund += p.proteinsUsed - maxProteins; + p.proteinsUsed = maxProteins; + return p; + }); + playerData._itemList.Protein += proteinsToRefund || 0; + } + }, + '0.7.1': ({ playerData, saveData }) => { + var _a, _b; + saveData.breeding.eggList.map((egg) => { + egg.shinyChance = GameConstants.SHINY_CHANCE_BREEDING - (0.5 * GameConstants.SHINY_CHANCE_BREEDING * Math.min(1, egg.shinySteps / egg.steps)); + return egg; + }); + // Update underground item IDs + const itemMap = (id) => { + if (id <= 7) { // fossils + return id + 199; + } + else if (id <= 16) { // Diamond Items + return id - 7; + } + else if (id <= 22) { // Evolution Stones + return id + 283; + } + else if (id <= 28) { // Diamond Items + return id - 13; + } + else { // Shard Plates + return id + 71; + } + }; + playerData.mineInventory = ((_a = playerData.mineInventory) === null || _a === void 0 ? void 0 : _a.map(i => { + i.id = itemMap(i.id); + return i; + })) || []; + if ((_b = saveData.underground) === null || _b === void 0 ? void 0 : _b.mine) { + // Reset the mine + delete saveData.underground.mine; + } + }, + '0.7.4': ({ playerData, saveData }) => { + // Clear old quest data + saveData.quests.questList = []; + // Update starter selection + playerData.starter = playerData._starter; + /* + * Challenge Modes + */ + // Create empty challenges object + saveData.challenges = { list: {} }; + // Disable Click Attacks + if (saveData.statistics.clickAttacks <= 100) { + Notifier.notify({ + title: 'Active Challenge Mode?', + message: `Do you want to activate No Click Attack challenge mode? + + `, + timeout: GameConstants.HOUR, + }); + } + // Disable Battle Items + Notifier.notify({ + title: 'Active Challenge Mode?', + message: `Do you want to activate No Battle Item challenge mode? + + `, + timeout: GameConstants.HOUR, + }); + // Disable Master Balls + if (!saveData.statistics.pokeballsUsed[3]) { + Notifier.notify({ + title: 'Active Challenge Mode?', + message: `Do you want to activate No Masterball challenge mode? + + `, + timeout: GameConstants.HOUR, + }); + } + // Disable Oak Items + if (Object.values(saveData.oakItems).every((oi) => !oi.exp)) { + Notifier.notify({ + title: 'Active Challenge Mode?', + message: `Do you want to activate No Oak Item challenge mode? + + `, + timeout: GameConstants.HOUR, + }); + } + // Disable Shards + if (saveData.shards.shardUpgrades.every((s) => !s)) { + Notifier.notify({ + title: 'Active Challenge Mode?', + message: `Do you want to activate No Shard challenge mode? + + `, + timeout: GameConstants.HOUR, + }); + } + // Disable Proteins + if (saveData.party.caughtPokemon.every(p => !p.proteinsUsed)) { + Notifier.notify({ + title: 'Active Challenge Mode?', + message: `Do you want to activate No Protein challenge mode? + + `, + timeout: GameConstants.HOUR, + }); + } + // Add Solaceon Ruins + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 43); + // Multi saves profile + const firstPokemon = saveData.party.caughtPokemon[0]; + saveData.profile = { + name: 'Trainer', + pokemon: (firstPokemon === null || firstPokemon === void 0 ? void 0 : firstPokemon.id) || 0, + pokemonShiny: (firstPokemon === null || firstPokemon === void 0 ? void 0 : firstPokemon.shiny) || false, + }; + }, + '0.7.6': ({ playerData, saveData }) => { + Update.changeHatcheryKey(saveData, 'Lets go Pikachu', 'Let\'s Go Pikachu'); + Update.changeHatcheryKey(saveData, 'Lets go Eevee', 'Let\'s Go Eevee'); + // Check if the Let's Go Pikachu is hidden due to MissingNo (reset breeding status) + const pikachu = saveData.party.caughtPokemon.find(p => p.id == -8); + if (pikachu) { + pikachu.breeding = !!saveData.breeding.eggList.find((e) => e.pokemon == 'Let\'s Go Pikachu') + || !!saveData.breeding.queueList.find((p) => p == 'Let\'s Go Pikachu'); + } + // Check if the Let's Go Eevee is hidden due to MissingNo (reset breeding status) + const eevee = saveData.party.caughtPokemon.find(p => p.id == -9); + if (eevee) { + eevee.breeding = !!saveData.breeding.eggList.find((e) => e.pokemon == 'Let\'s Go Eevee') + || !!saveData.breeding.queueList.find((p) => p == 'Let\'s Go Eevee'); + } + }, + '0.8.1': ({ playerData, saveData }) => { + // Add Weather Institute + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 29); + // Add Magma Hideout + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 32); + // Add Aqua Hideout + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 33); + // Add Team Plasma Assault + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 72); + // Add Plasma Frigate + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 74); + }, + '0.8.3': ({ playerData, saveData }) => { + // If player has defeated the 8th Kalos gym, start the vivillon quest line + saveData.badgeCase = saveData.badgeCase || []; + // Not using game constants incase the value isn't 73 in the future + if (saveData.badgeCase[73]) { // Iceberg badge + Update.startQuestLine(saveData, 'The Great Vivillon Hunt!'); + } + // Add missing key items if the player has the badge + const badgeToKeyItems = { + [5]: 'Safari_ticket', + [8]: 'Shard_case', //Earth badge + }; + Object.keys(badgeToKeyItems).forEach(badge => { + const keyItem = badgeToKeyItems[badge]; + if (saveData.badgeCase[badge]) { + saveData.keyItems[keyItem] = true; + } + }); + }, + '0.8.4': ({ playerData, saveData }) => { + var _a; + // Update Pokemon names + Update.changeHatcheryKey(saveData, 'Vivillon', 'Vivillon (Meadow)'); + // Track Battle Frontier milestones earned + const milestones = [ + [5, '25 x Pokéball'], + [10, '100 x Pokéball'], + [20, '100 x Greatball'], + [30, '100 x Ultraball'], + [35, '100 x xClick'], + [40, '100 x xAttack'], + [50, '100 x Small Restore'], + [100, 'Deoxys'], + [110, '10 x Water Stone'], + [120, '10 x Leaf Stone'], + [130, '10 x Thunder Stone'], + [140, '10 x Fire Stone'], + [150, '200 x Medium Restore'], + [151, 'Deoxys (attack)'], + [160, '100 x Lucky Egg'], + [170, '100 x Lucky Incense'], + [180, '100 x Item Magnet'], + [190, '10 x Mystery Egg'], + [200, '100 x Large Restore'], + [210, '40 x Water Stone'], + [220, '40 x Leaf Stone'], + [230, '40 x Thunder Stone'], + [240, '40 x Moon Stone'], + [250, '6400 x Ultraball'], + [251, 'Deoxys (defense)'], + [300, '100 x Linking Cord'], + [386, 'Deoxys (speed)'], + ]; + const highestStageCompleted = ((_a = saveData.statistics) === null || _a === void 0 ? void 0 : _a.battleFrontierHighestStageCompleted) || 0; + saveData.battleFrontier = { + milestones: milestones.filter(([stage]) => stage <= highestStageCompleted), + }; + }, + '0.8.9': ({ playerData, saveData }) => { + var _a, _b, _c; + // Retroactively track proteins obtained + let proteinsObtained = 0; + // Only update if save is from v0.6.0+ (when proteins were added) + if (this.minUpdateVersion('0.6.0', saveData)) { + saveData.party.caughtPokemon.forEach(p => { + proteinsObtained += p.proteinsUsed; + }); + proteinsObtained += playerData._itemList.Protein; + } + saveData.statistics = Object.assign(Object.assign({}, saveData.statistics), { totalProteinsObtained: proteinsObtained }); + // Only run if save is from v0.8.7 (a forked version which is breaking stuff) + if (((_a = saveData.update) === null || _a === void 0 ? void 0 : _a.version) == '0.8.7') { + // Check if the save has the Vivillon quest line, otherwise it's not from the main website + const questLines = ((_c = (_b = saveData.quests) === null || _b === void 0 ? void 0 : _b.questLines) === null || _c === void 0 ? void 0 : _c.length) || 0; + if (questLines < 4) { + Notifier.notify({ + title: 'Importing this save will cause errors!', + message: 'Please only use saves from the main website https://pokeclicker.com/', + type: NotificationConstants.NotificationOption.danger, + timeout: GameConstants.DAY, + }); + throw new Error('Importing this save will cause errors'); + } + } + }, + '0.8.12': ({ playerData, saveData }) => { + // Add Team Rockets Hideout + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 19); + // Add Radio Tower + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 20); + // Add Victory Road Johto + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 23); + // If the player has the Fog Badge already + // Not using game constants incase the badge value isn't 17 in the future + if (saveData.badgeCase[17]) { + Update.startQuestLine(saveData, 'Team Rocket Again'); + } + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + // Check if player wants to activate the new challenge modes + if (yield Notifier.confirm({ title: 'Regional Attack Debuff (recommended)', message: 'New challenge mode added Regional Attack Debuff.\n\nLowers Pokémon attack based on native region and highest reached region.\n\nThis is the default and recommended way to play, but is now an optional challenge.\n\nPlease choose if you would like this challenge mode to be enabled or disabled (cannot be re-enabled later)', confirm: 'Disable', cancel: 'Enable' })) { + App.game.challenges.list.regionalAttackDebuff.disable(); + } + if (yield Notifier.confirm({ title: 'Require Complete Pokédex (recommended)', message: 'New challenge mode added Require Complete Pokédex.\n\nRequires a complete regional pokédex before moving on to the next region.\n\nThis is the default and recommended way to play, but is now an optional challenge.\n\nPlease choose if you would like this challenge mode to be enabled or disabled (cannot be re-enabled later)', confirm: 'Disable', cancel: 'Enable' })) { + App.game.challenges.list.requireCompletePokedex.disable(); + } + }), GameConstants.SECOND); + }, + '0.8.14': ({ playerData, saveData }) => { + // Start Aqua Magma questline if player has Dynamo Badge already + if (saveData.badgeCase[29]) { + Update.startQuestLine(saveData, 'Land vs. Water'); + } + // Just incase statistics is not set + saveData.statistics = saveData.statistics || {}; + // Rename from the old statistic name + saveData.statistics = Object.assign(Object.assign({}, saveData.statistics), { totalBerriesObtained: saveData.statistics.totalBerriesHarvested || 0, pokeballsObtained: saveData.statistics.pokeballsBought || 0, berriesObtained: saveData.statistics.berriesHarvested || 0 }); + }, + '0.8.15': ({ playerData, saveData }) => { + var _a, _b, _c, _d; + // Start Plasma questline if player has Jet Badge already + if (saveData.badgeCase[58]) { + Update.startQuestLine(saveData, 'Quest for the DNA Splicers'); + } + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 2, 1); // Digletts Cave + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 5, 4); // Power Plant + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 31, 28); // Jagged Pass + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 29, 30); // Mt. Chimney + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 32, 34); // New Mauville + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 84, 64); // Pledge Grove + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 78, 79); // Abundant Shrine + // Shards -> Gems + //Questlist update + saveData.quests.questList = ((_a = saveData.quests.questList) === null || _a === void 0 ? void 0 : _a.map(q => { + if (q.name == 'GainShardsQuest') { + q.name = 'GainGemsQuest'; + } + return q; + })) || []; + //Setting gems = shards + saveData.gems = { + gemWallet: saveData.shards.shardWallet || [], + gemCollapsed: saveData.shards.shardCollapsed || [], + gemUpgrades: saveData.shards.shardUpgrades || [], + }; + delete saveData.keyItems.Shard_case; + // Swapping Shard Case for Gem Case + if (saveData.badgeCase[8]) { + saveData.keyItems.Gem_case = true; + } + // Just incase statistics is not set + saveData.statistics = saveData.statistics || {}; + // Rename from the old statistic name + saveData.statistics = Object.assign(Object.assign({}, saveData.statistics), { totalGemsGained: saveData.statistics.totalShardsGained || 0, gemsGained: saveData.statistics.shardsGained || 0 }); + // Challenge update + saveData.challenges.list.disableGems = (_d = (_c = (_b = saveData.challenges) === null || _b === void 0 ? void 0 : _b.list) === null || _c === void 0 ? void 0 : _c.disableShards) !== null && _d !== void 0 ? _d : false; + }, + '0.9.0': ({ playerData, saveData }) => { + var _a; + // Migrate event negative ID's to decimals of base form + const eventIDs = [ + [-1, 25.08], + [-2, 25.09], + [-3, 150.1], + [-4, 143.1], + [-5, 175.1], + [-6, 1.2], + [-7, 25.1], + [-8, 25.11], + [-9, 133.1], + [-10, 1.1], + [-11, 2.1], + [-12, 3.1], + [-13, 4.1], + [-14, 5.1], + [-15, 6.1], + [-16, 7.1], + [-17, 8.1], + [-18, 9.1], + ]; + eventIDs.forEach(([oldID, newID]) => { + const pokemon = saveData.party.caughtPokemon.find(p => p.id === oldID); + // If player hasn't caught this mon yet, return. + if (pokemon == undefined) { + return; + } + // Update our ID + pokemon.id = newID; + if (!saveData.statistics.pokemonHatched) { + saveData.statistics.pokemonHatched = {}; + } + if (!saveData.statistics.shinyPokemonHatched) { + saveData.statistics.shinyPokemonHatched = {}; + } + // Update our statistics + saveData.statistics.pokemonEncountered[newID] = saveData.statistics.pokemonEncountered[oldID] || 0; + saveData.statistics.pokemonDefeated[newID] = saveData.statistics.pokemonDefeated[oldID] || 0; + saveData.statistics.pokemonCaptured[newID] = saveData.statistics.pokemonCaptured[oldID] || 0; + saveData.statistics.pokemonHatched[newID] = saveData.statistics.pokemonHatched[oldID] || 0; + saveData.statistics.shinyPokemonEncountered[newID] = saveData.statistics.shinyPokemonEncountered[oldID] || 0; + saveData.statistics.shinyPokemonDefeated[newID] = saveData.statistics.shinyPokemonDefeated[oldID] || 0; + saveData.statistics.shinyPokemonCaptured[newID] = saveData.statistics.shinyPokemonCaptured[oldID] || 0; + saveData.statistics.shinyPokemonHatched[newID] = saveData.statistics.shinyPokemonHatched[oldID] || 0; + // Delete our old statistics + delete saveData.statistics.pokemonEncountered[oldID]; + delete saveData.statistics.pokemonDefeated[oldID]; + delete saveData.statistics.pokemonCaptured[oldID]; + delete saveData.statistics.pokemonHatched[oldID]; + delete saveData.statistics.shinyPokemonEncountered[oldID]; + delete saveData.statistics.shinyPokemonDefeated[oldID]; + delete saveData.statistics.shinyPokemonCaptured[oldID]; + delete saveData.statistics.shinyPokemonHatched[oldID]; + }); + playerData.mineInventory = ((_a = playerData.mineInventory) === null || _a === void 0 ? void 0 : _a.map(i => { + i.sellLocked = false; + return i; + })) || []; + // Start Galactic questline if player has Coal Badge already + if (saveData.badgeCase[40]) { + Update.startQuestLine(saveData, 'A New World'); + } + // Clear Valley Windworks Clears + saveData.statistics.dungeonsCleared[44] = 0; + // Add Team Galactic Eterna Building + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 47); + // Move Lake Verity + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 53, 52); + // Move Lake Valor + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 52, 54); + // Add Team Galactic HQ + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 56); + // Move Spear Pillar + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 57, 59); + // Add Sendoff Spring + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 60); + }, + '0.9.4': ({ playerData, saveData }) => { + // Modifications relating to smaller save file sizes + const PartyKeyMap = { + 'attackBonusPercent': 0, + 'attackBonusAmount': 1, + 'proteinsUsed': 2, + 'exp': 3, + 'breeding': 4, + 'shiny': 5, + 'category': 6, + 'levelEvolutionTriggered': 7, + }; + Object.entries(PartyKeyMap).forEach(([oldKey, newKey]) => { + saveData.party.caughtPokemon.forEach(p => { + p[newKey] = p[oldKey]; + delete p[oldKey]; + }); + }); + saveData.farming.mutations = saveData.farming.mutations.map(m => m.hintsSeen || m.hintSeen); + // Change Ultra Wormhole to a Temporary Battle + saveData.statistics.temporaryBattleDefeated = new Array(); + saveData.statistics.temporaryBattleDefeated[0] = saveData.statistics.gymsDefeated[84]; + // Remove the Elite_Nihilego Gym, now a temporary battle instead of a gym + saveData.statistics.gymsDefeated.splice(84, 1); + saveData.badgeCase.splice(84, 1); + // Change Ultra Megalopolis to a Temporary Battle + saveData.statistics.temporaryBattleDefeated[1] = saveData.statistics.gymsDefeated[88]; + // Remove the Elite_ULtraNecrozma Gym, now a temporary battle instead of a gym + saveData.statistics.gymsDefeated.splice(88, 1); + saveData.badgeCase.splice(88, 1); + }, + '0.9.6': ({ playerData, saveData }) => { + // Set our last save reminder/download to our current in game time + // This way we won't get a reminder notification for at least 12 hours + saveData.saveReminder = { + lastReminder: saveData.statistics.secondsPlayed, + lastDownloaded: saveData.statistics.secondsPlayed, + }; + // Start Mina's Trial questline if player has cleared Ultra Necrozma already + if (saveData.statistics.temporaryBattleDefeated[1]) { + Update.startQuestLine(saveData, 'Mina\'s Trial'); + } + // Add Rocket Game Corner + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 4); + // Add Silph Co. + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 6); + // Start Team Rocket Kanto questline if player has Cascade Badge already + if (saveData.badgeCase[2]) { + Update.startQuestLine(saveData, 'Team Rocket'); + } + // Rename Land vs. Water questline, so QuestLineCompletedRequirement will work + saveData.quests.questLines.forEach(v => { + if (v.name === 'Land vs Water') { + v.name = 'Land vs. Water'; + } + }); + // Add AZ TemporaryBattle + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 0); + //Replace Poison Barb with Rocky Helmet + saveData.oakItems.Rocky_Helmet = saveData.oakItems.Poison_Barb; + delete saveData.oakItems.Poison_Barb; + // Give the players Dowsing Machines in place of Item Magnets + playerData._itemList.Dowsing_machine = playerData._itemList.Item_magnet; + playerData.effectList.Dowsing_machine = playerData.effectList.Item_magnet; + delete playerData._itemList.Item_magnet; + delete playerData.effectList.Item_magnet; + // Start pokerus + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + // Check if player wants to activate the new challenge modes + if (!(yield Notifier.confirm({ title: 'Slow EVs', message: 'New challenge mode added: Slow EVs.\n\nDiminishes the rate at which EVs are gained.\n\nThis is an optional challenge and is NOT the recommended way to play.\n\nPlease choose if you would like this challenge mode to be disabled or enabled.\n\nCan be disabled later. Can NOT be enabled later!', confirm: 'Disable', cancel: 'Enable' }))) { + App.game.challenges.list.slowEVs.activate(); + } + }), GameConstants.SECOND); + }, + '0.9.7': ({ playerData, saveData }) => { + // Fix people not getting the pokerus + if (saveData.keyItems.Pokerus_virus) { + let starter; + switch (playerData.starter) { + case 0: + starter = saveData.party.caughtPokemon.find(p => p.id == 1); + break; + case 1: + starter = saveData.party.caughtPokemon.find(p => p.id == 4); + break; + case 2: + starter = saveData.party.caughtPokemon.find(p => p.id == 7); + break; + case 3: + starter = saveData.party.caughtPokemon.find(p => p.id == 25); + break; + } + starter[8] = true; + } + // Add Fighting Dojo TemporaryBattle + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 0); + }, + '0.9.8': ({ playerData, saveData, settingsData }) => { + var _a, _b, _c, _d, _e; + // Add names to oak item loadouts + saveData.oakItemLoadouts = ((_a = saveData.oakItemLoadouts) === null || _a === void 0 ? void 0 : _a.map((list, index) => ({ name: `Loadout ${index + 1}`, loadout: list }))) || []; + // Fix pokerus & EVs moved from statistics + saveData.party.caughtPokemon.forEach(p => { + var _a; + // If has pokerus, set to "contagious" + let status = (p[8]) ? 2 : 0; + // Get effort points (0 if not infected), Multiply by 100 for finer control + const effortPoints = status ? ((_a = saveData.statistics.effortPoints) === null || _a === void 0 ? void 0 : _a[p.id]) * 100 || 0 : 0; + // Set to cured if reached required amount of EVs + const requiredForCured = saveData.challenges.list.slowEVs ? 500000 : 50000; + if (effortPoints >= requiredForCured) { + status = 3; + } + // Update status and EVs + p[8] = status; + p[9] = effortPoints; + }); + // Give the players Linking Cords in place of Trade Stones + playerData._itemList.Linking_cord = playerData._itemList.Trade_stone || 0; + delete playerData._itemList.Trade_stone; + // Start Sevii questline if player has Volcano Badge already + if (saveData.badgeCase[7]) { + Update.startQuestLine(saveData, 'Bill\'s Errand'); + } + // Start Persons of Interest questline if player has Earth Badge already + if (saveData.badgeCase[8]) { + Update.startQuestLine(saveData, 'Persons of Interest'); + } + // Just incase statistics is not set + saveData.statistics = saveData.statistics || {}; + // Add new statistic + saveData.statistics.totalProteinsPurchased = saveData.statistics.totalProteinsObtained || 0; + // Add Mt. Ember Summit + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 10); + // Add Berry Forest + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 11); + // Add Biker Gang Temporary Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 1); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 2); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 3); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 4); + // Add Galactic Boss Cyrus Temporary Battle + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 5); + // Add Ash Ketchum Temporary Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 7); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 8); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 9); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 10); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 11); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 12); + // Update settings + if (settingsData) { + // Update our default quest location color + if (settingsData['--questAtLocation'] === '#34BF45') { + settingsData['--questAtLocation'] = '#55ff00'; + } + // Remove current location color + delete settingsData['--currentPlace']; + // Split dungeon loot notifications into two + settingsData['notification.common_dungeon_item_found'] = (_b = settingsData['notification.dungeon_item_found']) !== null && _b !== void 0 ? _b : true; + settingsData['notification.common_dungeon_item_found.desktop'] = (_c = settingsData['notification.dungeon_item_found.desktop']) !== null && _c !== void 0 ? _c : false; + settingsData['notification.rare_dungeon_item_found'] = (_d = settingsData['notification.dungeon_item_found']) !== null && _d !== void 0 ? _d : true; + settingsData['notification.rare_dungeon_item_found.desktop'] = (_e = settingsData['notification.dungeon_item_found.desktop']) !== null && _e !== void 0 ? _e : false; + delete settingsData['notification.dungeon_item_found']; + delete settingsData['notification.dungeon_item_found.desktop']; + } + }, + '0.9.9': ({ playerData, saveData }) => { + // Fix pokemon having Pokérus early (key item not unlocked) + if (!saveData.keyItems.Pokerus_virus) { + saveData.party.caughtPokemon.forEach(p => { + // Pokérus State + p[8] = 0; + // Effort Points + p[9] = 0; + }); + } + }, + '0.9.10': ({ playerData, saveData }) => { + var _a; + // Rename statistic + saveData.statistics.pokeballsPurchased = saveData.statistics.pokeballsBought; + // Update total proteins obtained to be equal to the total purchased (or whichever is higher) + saveData.statistics.totalProteinsObtained = Math.max(saveData.statistics.totalProteinsPurchased, saveData.statistics.totalProteinsObtained); + // If Pokémon doesn't have Pokérus yet, it shouldn't have Effort Points + saveData.party.caughtPokemon.forEach(p => { + // Check Pokérus state + if (!p[8]) { + // Reset Effort Points + p[9] = 0; + } + }); + // Turn Parfum Palace into a town + saveData.statistics.dungeonsCleared.splice(96, 1); + // Filter already earned milestones due to item/Pokémon name updates + const milestones = [ + [5, '25 x Poké Ball'], + [10, '100 x Poké Ball'], + [20, '100 x Great Ball'], + [30, '100 x Ultra Ball'], + [35, '100 x X Click'], + [40, '100 x X Attack'], + [50, '100 x Small Restore'], + [100, 'Deoxys'], + [110, '10 x Water Stone'], + [120, '10 x Leaf Stone'], + [130, '10 x Thunder Stone'], + [140, '10 x Fire Stone'], + [150, '200 x Medium Restore'], + [151, 'Deoxys (Attack)'], + [160, '100 x Lucky Egg'], + [170, '100 x Lucky Incense'], + [180, '100 x Dowsing Machine'], + [190, '10 x Mystery Egg'], + [200, '100 x Large Restore'], + [210, '40 x Water Stone'], + [220, '40 x Leaf Stone'], + [230, '40 x Thunder Stone'], + [240, '40 x Moon Stone'], + [250, '6,400 x Ultra Ball'], + [251, 'Deoxys (Defense)'], + [300, '100 x Linking Cord'], + [386, 'Deoxys (Speed)'], + ]; + const highestStageCompleted = ((_a = saveData.statistics) === null || _a === void 0 ? void 0 : _a.battleFrontierHighestStageCompleted) || 0; + saveData.battleFrontier = { + milestones: milestones.filter(([stage]) => stage <= highestStageCompleted), + checkpoint: saveData.battleFrontier.checkpoint, + }; + // Update Pokemon name changes for hatchery/queue + const renamePokemon = Update.changeHatcheryKey; + renamePokemon(saveData, 'Bulbasaur (clone)', 'Bulbasaur (Clone)'); + renamePokemon(saveData, 'Ivysaur (clone)', 'Ivysaur (Clone)'); + renamePokemon(saveData, 'Venusaur (clone)', 'Venusaur (Clone)'); + renamePokemon(saveData, 'Charmander (clone)', 'Charmander (Clone)'); + renamePokemon(saveData, 'Charmeleon (clone)', 'Charmeleon (Clone)'); + renamePokemon(saveData, 'Charizard (clone)', 'Charizard (Clone)'); + renamePokemon(saveData, 'Pikachu (Original cap)', 'Pikachu (Original Cap)'); + renamePokemon(saveData, 'Pikachu (Hoenn cap)', 'Pikachu (Hoenn Cap)'); + renamePokemon(saveData, 'Pikachu (Sinnoh cap)', 'Pikachu (Sinnoh Cap)'); + renamePokemon(saveData, 'Pikachu (Unova cap)', 'Pikachu (Unova Cap)'); + renamePokemon(saveData, 'Pikachu (Kalos cap)', 'Pikachu (Kalos Cap)'); + renamePokemon(saveData, 'Pikachu (Alola cap)', 'Pikachu (Alola Cap)'); + renamePokemon(saveData, 'Pikachu (Partner cap)', 'Pikachu (Partner Cap)'); + renamePokemon(saveData, 'Castform (sunny)', 'Castform (Sunny)'); + renamePokemon(saveData, 'Castform (rainy)', 'Castform (Rainy)'); + renamePokemon(saveData, 'Castform (snowy)', 'Castform (Snowy)'); + renamePokemon(saveData, 'Deoxys (attack)', 'Deoxys (Attack)'); + renamePokemon(saveData, 'Deoxys (defense)', 'Deoxys (Defense)'); + renamePokemon(saveData, 'Deoxys (speed)', 'Deoxys (Speed)'); + renamePokemon(saveData, 'Burmy (plant)', 'Burmy (Plant)'); + renamePokemon(saveData, 'Burmy (sand)', 'Burmy (Sand)'); + renamePokemon(saveData, 'Burmy (trash)', 'Burmy (Trash)'); + renamePokemon(saveData, 'Wormadam (plant)', 'Wormadam (Plant)'); + renamePokemon(saveData, 'Wormadam (sand)', 'Wormadam (Sand)'); + renamePokemon(saveData, 'Wormadam (trash)', 'Wormadam (Trash)'); + renamePokemon(saveData, 'Cherrim (overcast)', 'Cherrim (Overcast)'); + renamePokemon(saveData, 'Cherrim (sunshine)', 'Cherrim (Sunshine)'); + renamePokemon(saveData, 'Shellos (west)', 'Shellos (West)'); + renamePokemon(saveData, 'Shellos (east)', 'Shellos (East)'); + renamePokemon(saveData, 'Gastrodon (west)', 'Gastrodon (West)'); + renamePokemon(saveData, 'Gastrodon (east)', 'Gastrodon (East)'); + renamePokemon(saveData, 'Rotom (heat)', 'Rotom (Heat)'); + renamePokemon(saveData, 'Rotom (wash)', 'Rotom (Wash)'); + renamePokemon(saveData, 'Rotom (frost)', 'Rotom (Frost)'); + renamePokemon(saveData, 'Rotom (fan)', 'Rotom (Fan)'); + renamePokemon(saveData, 'Rotom (mow)', 'Rotom (Mow)'); + renamePokemon(saveData, 'Rotom (discord)', 'Rotom (Discord)'); + renamePokemon(saveData, 'Giratina (altered)', 'Giratina (Altered)'); + renamePokemon(saveData, 'Shaymin (land)', 'Shaymin (Land)'); + renamePokemon(saveData, 'Shaymin (sky)', 'Shaymin (Sky)'); + renamePokemon(saveData, 'Arceus (normal)', 'Arceus (Normal)'); + renamePokemon(saveData, 'Meloetta (aria)', 'Meloetta (Aria)'); + renamePokemon(saveData, 'Meloetta (pirouette)', 'Meloetta (Pirouette)'); + renamePokemon(saveData, 'Ash Greninja', 'Ash-Greninja'); + renamePokemon(saveData, 'Vivillon (Pokéball)', 'Vivillon (Poké Ball)'); + renamePokemon(saveData, 'Oricorio (Pom-pom)', 'Oricorio (Pom-Pom)'); + renamePokemon(saveData, 'Minior (Blue-core)', 'Minior (Blue Core)'); + renamePokemon(saveData, 'Minior (Green-core)', 'Minior (Green Core)'); + renamePokemon(saveData, 'Minior (Indigo-core)', 'Minior (Indigo Core)'); + renamePokemon(saveData, 'Minior (Orange-core)', 'Minior (Orange Core)'); + renamePokemon(saveData, 'Minior (Red-core)', 'Minior (Red Core)'); + renamePokemon(saveData, 'Minior (Violet-core)', 'Minior (Violet Core)'); + renamePokemon(saveData, 'Minior (Yellow-core)', 'Minior (Yellow Core)'); + // Start Galactic questline if player has Coal Badge already + // Don't start completed questline again if updating from v0.9.8/9 to v0.9.16+ + const aNewWorld = saveData.quests.questLines.find(ql => ql.name == 'A new world'); + if (saveData.badgeCase[40] && !aNewWorld) { + Update.startQuestLine(saveData, 'A New World'); + } + // Update mine inventory + playerData.mineInventory.forEach(i => { + if (i.valueType == 'Diamond') { + // Shards + if (i.name.includes('Shard')) { + i.valueType = 2; + } + else { // Diamond items + i.valueType = 0; + } + } + // Fossils + if (i.valueType == 'Mine Egg') { + i.valueType = 3; + } + // Gems + if (i.value == 100) { + i.valueType = 1; + } + }); + }, + '0.9.11': ({ playerData, saveData }) => { + // Add Tohjo Falls + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 27); + // Add Celebi Temporary Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 5); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 6); + }, + '0.9.12': ({ playerData, saveData }) => { + // Revert player back to Alola if in Galar + if (playerData._region >= 7) { + playerData._region = 6; + playerData._subregion = 0; + playerData._route = 0; + playerData._townName = 'Iki Town Outskirts'; + } + }, + '0.9.13': ({ playerData, saveData }) => { + // Add sevii4567 temp battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 5); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 6); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 7); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 8); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 9); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 10); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 11); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 12); + // Pinkan Ash + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 23); + // Add sevii4567 dungeons + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 14); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 15); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 16); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 17); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 18); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 19); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 20); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 21); + // Add orange league badges + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 40); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 41); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 42); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 43); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 44); + // Start Plasma questline if player has Toxic Badge already + if (saveData.badgeCase[59]) { + Update.startQuestLine(saveData, 'Quest for the DNA Splicers'); + } + // Remove Team Plasma Assault dungeon + saveData.statistics.dungeonsCleared.splice(90, 1); + // Add Team Plasma Temporary Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 16); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 17); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 18); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 19); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 20); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 21); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 22); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 23); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 24); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 25); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 26); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 27); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 28); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 29); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 30); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 31); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 32); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 33); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 34); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 35); + // Move player out of Team Plasma Assault + if (playerData._townName == ('Team Plasma Assault')) { + playerData._townName = ('Opelucid City'); + } + // Move player out of Plasma Frigate + if (playerData._townName == ('Plasma Frigate')) { + playerData._townName = ('Humilau City'); + } + // Move player out of Giant Chasm + if (playerData._townName == ('Giant Chasm')) { + playerData._townName = ('Humilau City'); + } + // Add Detective Pikachu TemporaryBattles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 36); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 37); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 38); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 39); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 40); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 41); + }, + '0.9.14': ({ playerData, saveData }) => { + if (saveData.party.caughtPokemon.filter(p => p.id === 103.02).length) { + saveData.wallet.currencies[1] += 50000; + } + }, + '0.9.15': ({ playerData, saveData, settingsData }) => { + // Aegislash and Pumpkaboo line renames + const renamePokemon = Update.changeHatcheryKey; + renamePokemon(saveData, 'Aegislash', 'Aegislash (Shield)'); + renamePokemon(saveData, 'Pumpkaboo', 'Pumpkaboo (Average)'); + renamePokemon(saveData, 'Gourgeist', 'Gourgeist (Average)'); + // Add Snorlax Temporary Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 1); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 2); + // Add Suicune Temporary Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 7); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 8); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 9); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 10); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 11); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 12); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 13); + // Pinkan Berry + saveData.farming.berryList = Update.moveIndex(saveData.farming.berryList, 35); + saveData.farming.unlockedBerries = Update.moveIndex(saveData.farming.unlockedBerries, 35); + saveData.farming.mutations = Update.moveIndex(saveData.farming.mutations, 28); + saveData.farming.plotList.forEach(p => { + if (p.berry >= 35) { + p.berry++; + } + }); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 22); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 23); + // Add Princess Diancie Temporary Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 53); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 54); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 55); + // Replace Pokémon names to IDs + const eggList = saveData.breeding.eggList; + const queueList = saveData.breeding.queueList; + Update.changePokemonNameToId(saveData, eggList); + Update.changePokemonNameToId(saveData, queueList); + // Adding more Galar badges + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 109); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 110); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 111); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 112); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 113); + }, + '0.9.16': ({ playerData, saveData }) => { + // Pinkan Berry + saveData.statistics.berriesHarvested = Update.moveIndex(saveData.statistics.berriesHarvested, 35); + // Rename Pinkan Rocket questline and Sinnoh questline + saveData.quests.questLines.forEach(v => { + if (v.name === 'Team Rocket\'s Pinkan Themepark') { + v.name = 'Team Rocket\'s Pinkan Theme Park'; + } + }); + saveData.quests.questLines.forEach(v => { + if (v.name === 'A new world') { + v.name = 'A New World'; + } + }); + }, + '0.9.17': ({ playerData, saveData, settingsData }) => { + // Add Sudowoodo Temporary Battle + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 7); + // Pinkan Berry - Obtained Statistics + saveData.statistics.berriesObtained = Update.moveIndex(saveData.statistics.berriesObtained, 35); + // Fix A New World questline for players updating from v0.9.8/9 to v0.9.16+ + const aNewWorld = saveData.quests.questLines.find(ql => ql.name == 'A New World') || {}; + if (aNewWorld.state === 1 && aNewWorld.quest <= 3) { + saveData.statistics.temporaryBattleDefeated[27] = 0; + } + }, + '0.10.0': ({ playerData, saveData, settingsData }) => { + var _a; + // Add Kimono Girls Temporary Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 25); + // Create new Pokemon Gender Statistics if they don't exist + // Male + if (!saveData.statistics.malePokemonCaptured) { + saveData.statistics.malePokemonCaptured = {}; + } + if (!saveData.statistics.malePokemonDefeated) { + saveData.statistics.malePokemonDefeated = {}; + } + if (!saveData.statistics.malePokemonEncountered) { + saveData.statistics.malePokemonEncountered = {}; + } + if (!saveData.statistics.malePokemonHatched) { + saveData.statistics.malePokemonHatched = {}; + } + // Shiny male + if (!saveData.statistics.shinyMalePokemonCaptured) { + saveData.statistics.shinyMalePokemonCaptured = {}; + } + if (!saveData.statistics.shinyMalePokemonDefeated) { + saveData.statistics.shinyMalePokemonDefeated = {}; + } + if (!saveData.statistics.shinyMalePokemonEncountered) { + saveData.statistics.shinyMalePokemonEncountered = {}; + } + if (!saveData.statistics.shinyMalePokemonHatched) { + saveData.statistics.shinyMalePokemonHatched = {}; + } + // Female + if (!saveData.statistics.femalePokemonCaptured) { + saveData.statistics.femalePokemonCaptured = {}; + } + if (!saveData.statistics.femalePokemonDefeated) { + saveData.statistics.femalePokemonDefeated = {}; + } + if (!saveData.statistics.femalePokemonEncountered) { + saveData.statistics.femalePokemonEncountered = {}; + } + if (!saveData.statistics.femalePokemonHatched) { + saveData.statistics.femalePokemonHatched = {}; + } + // Shiny female + if (!saveData.statistics.shinyFemalePokemonCaptured) { + saveData.statistics.shinyFemalePokemonCaptured = {}; + } + if (!saveData.statistics.shinyFemalePokemonDefeated) { + saveData.statistics.shinyFemalePokemonDefeated = {}; + } + if (!saveData.statistics.shinyFemalePokemonEncountered) { + saveData.statistics.shinyFemalePokemonEncountered = {}; + } + if (!saveData.statistics.shinyFemalePokemonHatched) { + saveData.statistics.shinyFemalePokemonHatched = {}; + } + // Initialize total statistics + saveData.statistics.totalMalePokemonCaptured = 0; + saveData.statistics.totalMalePokemonDefeated = 0; + saveData.statistics.totalMalePokemonEncountered = 0; + saveData.statistics.totalMalePokemonHatched = 0; + saveData.statistics.totalShinyMalePokemonCaptured = 0; + saveData.statistics.totalShinyMalePokemonDefeated = 0; + saveData.statistics.totalShinyMalePokemonEncountered = 0; + saveData.statistics.totalShinyMalePokemonHatched = 0; + saveData.statistics.totalFemalePokemonCaptured = 0; + saveData.statistics.totalFemalePokemonDefeated = 0; + saveData.statistics.totalFemalePokemonEncountered = 0; + saveData.statistics.totalFemalePokemonHatched = 0; + saveData.statistics.totalShinyFemalePokemonCaptured = 0; + saveData.statistics.totalShinyFemalePokemonDefeated = 0; + saveData.statistics.totalShinyFemalePokemonEncountered = 0; + saveData.statistics.totalShinyFemalePokemonHatched = 0; + saveData.statistics.totalGenderlessPokemonCaptured = 0; + saveData.statistics.totalGenderlessPokemonDefeated = 0; + saveData.statistics.totalGenderlessPokemonEncountered = 0; + saveData.statistics.totalGenderlessPokemonHatched = 0; + saveData.statistics.totalShinyGenderlessPokemonCaptured = 0; + saveData.statistics.totalShinyGenderlessPokemonDefeated = 0; + saveData.statistics.totalShinyGenderlessPokemonEncountered = 0; + saveData.statistics.totalShinyGenderlessPokemonHatched = 0; + // Assign generic Pokemon statistics to the gendered Pokemon ones + (_a = saveData.party.caughtPokemon) === null || _a === void 0 ? void 0 : _a.forEach(pokemon => { + const capturedStatistic = saveData.statistics.pokemonCaptured[pokemon.id] || 0; + const defeatedStatistic = saveData.statistics.pokemonDefeated[pokemon.id] || 0; + const encounteredStatistic = saveData.statistics.pokemonEncountered[pokemon.id] || 0; + const hatchedStatistic = saveData.statistics.pokemonHatched[pokemon.id] || 0; + const shinyCapturedStatistic = saveData.statistics.shinyPokemonCaptured[pokemon.id] || 0; + const shinyDefeatedStatistic = saveData.statistics.shinyPokemonDefeated[pokemon.id] || 0; + const shinyEncounteredStatistic = saveData.statistics.shinyPokemonEncountered[pokemon.id] || 0; + const shinyHatchedStatistic = saveData.statistics.shinyPokemonHatched[pokemon.id] || 0; + if (pokemonMap[pokemon.id].gender.type == GameConstants.Genders.MaleFemale) { // No genderless + if (pokemonMap[pokemon.id].gender.femaleRatio != 1) { // Anything but female-only + saveData.statistics.malePokemonCaptured[pokemon.id] = capturedStatistic; + saveData.statistics.malePokemonDefeated[pokemon.id] = defeatedStatistic; + saveData.statistics.malePokemonEncountered[pokemon.id] = encounteredStatistic; + saveData.statistics.malePokemonHatched[pokemon.id] = hatchedStatistic; + saveData.statistics.shinyMalePokemonCaptured[pokemon.id] = shinyCapturedStatistic; + saveData.statistics.shinyMalePokemonDefeated[pokemon.id] = shinyDefeatedStatistic; + saveData.statistics.shinyMalePokemonEncountered[pokemon.id] = shinyEncounteredStatistic; + saveData.statistics.shinyMalePokemonHatched[pokemon.id] = shinyHatchedStatistic; + // Assign the generic total ones to the male ones + saveData.statistics.totalMalePokemonCaptured += capturedStatistic; + saveData.statistics.totalMalePokemonDefeated += defeatedStatistic; + saveData.statistics.totalMalePokemonEncountered += encounteredStatistic; + saveData.statistics.totalMalePokemonHatched += hatchedStatistic; + saveData.statistics.totalShinyMalePokemonCaptured += shinyCapturedStatistic; + saveData.statistics.totalShinyMalePokemonDefeated += shinyDefeatedStatistic; + saveData.statistics.totalShinyMalePokemonEncountered += shinyEncounteredStatistic; + saveData.statistics.totalShinyMalePokemonHatched += shinyHatchedStatistic; + } + else { // Female-only + saveData.statistics.femalePokemonCaptured[pokemon.id] = capturedStatistic; + saveData.statistics.femalePokemonDefeated[pokemon.id] = defeatedStatistic; + saveData.statistics.femalePokemonEncountered[pokemon.id] = encounteredStatistic; + saveData.statistics.femalePokemonHatched[pokemon.id] = hatchedStatistic; + saveData.statistics.shinyFemalePokemonCaptured[pokemon.id] = shinyCapturedStatistic; + saveData.statistics.shinyFemalePokemonDefeated[pokemon.id] = shinyDefeatedStatistic; + saveData.statistics.shinyFemalePokemonEncountered[pokemon.id] = shinyEncounteredStatistic; + saveData.statistics.shinyFemalePokemonHatched[pokemon.id] = shinyHatchedStatistic; + // Assign the generic total ones to the female ones + saveData.statistics.totalFemalePokemonCaptured += capturedStatistic; + saveData.statistics.totalFemalePokemonDefeated += defeatedStatistic; + saveData.statistics.totalFemalePokemonEncountered += encounteredStatistic; + saveData.statistics.totalFemalePokemonHatched += hatchedStatistic; + saveData.statistics.totalShinyFemalePokemonCaptured += shinyCapturedStatistic; + saveData.statistics.totalShinyFemalePokemonDefeated += shinyDefeatedStatistic; + saveData.statistics.totalShinyFemalePokemonEncountered += shinyEncounteredStatistic; + saveData.statistics.totalShinyFemalePokemonHatched += shinyHatchedStatistic; + } + } + else { // Genderless + // Assign the generic total ones to the genderless ones + saveData.statistics.totalGenderlessPokemonCaptured += capturedStatistic; + saveData.statistics.totalGenderlessPokemonDefeated += defeatedStatistic; + saveData.statistics.totalGenderlessPokemonEncountered += encounteredStatistic; + saveData.statistics.totalGenderlessPokemonHatched += hatchedStatistic; + saveData.statistics.totalShinyGenderlessPokemonCaptured += shinyCapturedStatistic; + saveData.statistics.totalShinyGenderlessPokemonDefeated += shinyDefeatedStatistic; + saveData.statistics.totalShinyGenderlessPokemonEncountered += shinyEncounteredStatistic; + saveData.statistics.totalShinyGenderlessPokemonHatched += shinyHatchedStatistic; + } + }); + // Update Region filter from integer to bitfield. + if (settingsData.breedingRegionFilter == -2) { + settingsData.breedingRegionFilter = (2 << playerData.highestRegion) - 1; + } + else { + settingsData.breedingRegionFilter = 1 << settingsData.breedingRegionFilter; + } + }, + '0.10.1': ({ playerData, saveData }) => { + var _a, _b; + // Brawlers Cave renamed + if (playerData._townName == 'Brawlers Cave') { + playerData._townName = 'Brawlers\' Cave'; + } + // Remove cleared BF milestones from save if corresponding Pokémon is not in party + if ((_b = (_a = saveData === null || saveData === void 0 ? void 0 : saveData.battleFrontier) === null || _a === void 0 ? void 0 : _a.milestones) === null || _b === void 0 ? void 0 : _b.length) { + const pokemonRewards = [ + ['Deoxys', 386], + ['Deoxys (Attack)', 386.1], + ['Deoxys (Defense)', 386.2], + ['Deoxys (Speed)', 386.3], + ['Vivillon (Poké Ball)', 666.01], + ]; + // Find Pokémon rewards that are not in our party + pokemonRewards + .filter(([name, id]) => { + return saveData.party.caughtPokemon.filter(p => p.id === id).length < 1; + }) + // And remove any cleared milestones corresponding to missing Pokémon + .forEach(([name, id]) => { + saveData.battleFrontier.milestones = saveData.battleFrontier.milestones.filter(milestone => milestone[1] !== name); + }); + } + }, + '0.10.2': ({ playerData, saveData }) => { + // Kecleon Fights + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 15); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 16); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 17); + // Zero Temporary Battle + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 32); + // Dream Researcher fight + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 53); + // Korrina fight + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 54); + // Translations + saveData.logbook.logs.forEach(log => log.content = createLogContent.notTranslated({ text: log.description })); + // Rotate form IDs + const formIDs = [ + // Vivillon (Poke Ball to before Fancy, Icy Snow to before Polar) + [666.01, 666.18, 666.17, 666.16, 666.15, 666.14, 666.13, 666.12, 666.11, 666.1, 666.09, 666.08, 666.07], + // Flabebe line (swap Blue and Orange) + [669.02, 669.03], + [670.02, 670.03], + [671.02, 671.03], + // ROYGBIV Minior instead of BGIORVY + [774.01, 774.05], + [774.02, 774.04], + [774.03, 774.06, 774.07], + ]; + formIDs.forEach(list => Update.rotatePokemonIDs(saveData, list)); + // Meltan Temp Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 85); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 86); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 87); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 88); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 89); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 90); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 91); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 92); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 93); + // Kanto starter should be saved in regionStarter, unless they update a very old save + if (!playerData.regionStarters) { + playerData.regionStarters = [playerData.starter]; + } + // Rivals Temp Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 0); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 1); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 2); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 3); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 7); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 12); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 13); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 14); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 16); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 17); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 18); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 26); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 27); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 28); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 29); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 30); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 31); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 32); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 36); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 37); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 51); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 52); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 53); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 54); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 56); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 57); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 58); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 60); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 61); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 63); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 66); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 67); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 68); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 73); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 87); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 88); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 89); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 91); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 92); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 93); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 94); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 95); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 103); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 104); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 105); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 106); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 107); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 108); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 109); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 110); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 122); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 123); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 124); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 125); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 126); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 127); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 128); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 129); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 130); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 131); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 133); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 134); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 135); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 136); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 145); + }, + '0.10.3': ({ playerData, saveData }) => { + const johtoBeastQL = saveData.quests.questLines.find((q) => q.name == 'The Legendary Beasts'); + if (johtoBeastQL && johtoBeastQL.state == 1 && johtoBeastQL.quest == 3 && johtoBeastQL.initial instanceof Array) { + johtoBeastQL.quest = 4; + } + // On the Rival fight, but already beat it before the quest + if (johtoBeastQL && johtoBeastQL.state == 1 && johtoBeastQL.quest == 2 && johtoBeastQL.initial > 0) { + johtoBeastQL.initial = 0; + } + }, + '0.10.4': ({ playerData, saveData }) => { + // Adding Magikarp Jump badges + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 101); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 102); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 103); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 104); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 105); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 106); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 107); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 108); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 109); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 110); + // Update starter pokerus status if it wasn't infected after unlocking the key item + if (saveData.keyItems.Pokerus_virus) { + let starter; + switch (playerData.regionStarters[0]) { + case 0: + starter = saveData.party.caughtPokemon.find(p => p.id == 1); + break; + case 1: + starter = saveData.party.caughtPokemon.find(p => p.id == 4); + break; + case 2: + starter = saveData.party.caughtPokemon.find(p => p.id == 7); + break; + case 3: + starter = saveData.party.caughtPokemon.find(p => p.id == 25); + break; + } + if (starter && (!starter[8] || starter[8] == 0)) { + starter[8] = 2; + } + } + }, + '0.10.5': ({ playerData, saveData, settingsData }) => { + // Red temporary battle + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 28); + // Magikarp Jump Temp Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 160); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 161); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 162); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 163); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 164); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 165); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 166); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 167); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 168); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 169); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 170); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 171); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 172); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 173); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 174); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 175); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 176); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 177); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 178); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 179); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 180); + // Rotate form IDs + const formIDs = [ + // Butterfree (Gigantamax before others) + [12.01, 12.02, 12.03, 12.04], + //Pikachu (Put World Cap after Alola Cap, Gigantamax after Partner Cap) + [25.07, 25.08, 25.09, 25.10, 25.11, 25.12], + [25.09, 25.10, 25.11, 25.12, 25.13, 25.14], + ]; + formIDs.forEach(list => Update.rotatePokemonIDs(saveData, list)); + // Move IDs from .x to .0x for consistency + const consistentIDs = [ + [1.1, 1.01], + [1.2, 1.02], + [1.3, 1.03], + [2.1, 2.01], + [2.2, 2.02], + [2.3, 2.03], + [3.1, 3.03], + [3.2, 3.04], + [3.3, 3.05], + [4.1, 4.01], + [5.1, 5.01], + [6.1, 6.04], + [7.1, 7.01], + [8.1, 8.01], + [9.1, 9.03], + [21.1, 21.01], + [52.01, 52.02], + [52.2, 52.03], + [77.1, 77.01], + [78.1, 78.01], + [79.1, 79.01], + [80.1, 80.02], + [83.1, 83.01], + [110.01, 110.02], + [110.1, 110.01], + [122.1, 122.01], + [133.1, 133.02], + [143.1, 143.02], + [144.1, 144.01], + [145.1, 145.01], + [146.1, 146.01], + [150.1, 150.03], + [172.1, 172.01], + [175.1, 175.01], + [175.2, 175.02], + [176.1, 176.01], + [199.1, 199.01], + [208.1, 208.02], + [222.1, 222.01], + [251.1, 251.02], + [251.2, 251.01], + [263.1, 263.01], + [264.1, 264.01], + [351.1, 351.01], + [351.2, 351.02], + [351.3, 351.03], + [386.1, 386.01], + [386.2, 386.02], + [386.3, 386.03], + [412.1, 412.01], + [412.2, 412.02], + [413.1, 413.01], + [413.2, 413.02], + [421.1, 421.01], + [422.1, 422.01], + [423.1, 423.01], + [446.1, 446.01], + [468.1, 468.01], + [479.1, 479.01], + [479.2, 479.02], + [479.3, 479.03], + [479.4, 479.04], + [479.5, 479.05], + [479.6, 479.06], + [487.1, 487.01], + [492.1, 492.01], + [554.1, 554.01], + [555.1, 555.01], + [555.2, 555.02], + [555.3, 555.03], + [562.1, 562.01], + [618.1, 618.01], + [641.1, 641.01], + [642.1, 642.01], + [645.1, 645.01], + [646.1, 646.01], + [646.2, 646.02], + [647.1, 647.01], + [648.1, 648.01], + [681.1, 681.01], + [710.1, 710.01], + [710.2, 710.02], + [710.3, 710.03], + [711.1, 711.01], + [711.2, 711.02], + [711.3, 711.03], + [791.1, 791.01], + [792.1, 792.01], + [801.1, 801.01], + [845.1, 845.01], + [845.2, 845.02], + [849.1, 849.01], + [869.01, -869.01], + [869.02, -869.02], + [869.03, -869.03], + [869.04, -869.04], + [869.05, -869.05], + [869.06, -869.06], + [869.07, -869.07], + [869.08, -869.08], + [869.11, -869.11], + [869.12, -869.12], + [869.13, -869.13], + [869.14, -869.14], + [869.15, -869.15], + [869.16, -869.16], + [869.17, -869.17], + [869.18, -869.18], + [869.21, -869.21], + [869.22, -869.22], + [869.23, -869.23], + [869.24, -869.24], + [869.25, -869.25], + [869.26, -869.26], + [869.27, -869.27], + [869.28, -869.28], + [869.31, -869.31], + [869.32, -869.32], + [869.33, -869.33], + [869.34, -869.34], + [869.35, -869.35], + [869.36, -869.36], + [869.37, -869.37], + [869.38, -869.38], + [869.41, -869.41], + [869.42, -869.42], + [869.43, -869.43], + [869.44, -869.44], + [869.45, -869.45], + [869.46, -869.46], + [869.47, -869.47], + [869.48, -869.48], + [869.51, -869.51], + [869.52, -869.52], + [869.53, -869.53], + [869.54, -869.54], + [869.55, -869.55], + [869.56, -869.56], + [869.57, -869.57], + [869.58, -869.58], + [869.61, -869.61], + [869.62, -869.62], + [869.63, -869.63], + [869.64, -869.64], + [869.65, -869.65], + [869.66, -869.66], + [869.67, -869.67], + [869.68, -869.68], + [-869.01, 869.06], + [-869.02, 869.07], + [-869.03, 869.04], + [-869.04, 869.01], + [-869.05, 869.02], + [-869.06, 869.08], + [-869.07, 869.03], + [-869.08, 869.05], + [-869.11, 869.16], + [-869.12, 869.17], + [-869.13, 869.14], + [-869.14, 869.11], + [-869.15, 869.12], + [-869.16, 869.18], + [-869.17, 869.13], + [-869.18, 869.15], + [-869.21, 869.26], + [-869.22, 869.27], + [-869.23, 869.24], + [-869.24, 869.21], + [-869.25, 869.22], + [-869.26, 869.28], + [-869.27, 869.23], + [-869.28, 869.25], + [-869.31, 869.36], + [-869.32, 869.37], + [-869.33, 869.34], + [-869.34, 869.31], + [-869.35, 869.32], + [-869.36, 869.38], + [-869.37, 869.33], + [-869.38, 869.35], + [-869.41, 869.46], + [-869.42, 869.47], + [-869.43, 869.44], + [-869.44, 869.41], + [-869.45, 869.42], + [-869.46, 869.48], + [-869.47, 869.43], + [-869.48, 869.45], + [-869.51, 869.56], + [-869.52, 869.57], + [-869.53, 869.54], + [-869.54, 869.51], + [-869.55, 869.52], + [-869.56, 869.58], + [-869.57, 869.53], + [-869.58, 869.55], + [-869.61, 869.66], + [-869.62, 869.67], + [-869.63, 869.64], + [-869.64, 869.61], + [-869.65, 869.62], + [-869.66, 869.68], + [-869.67, 869.63], + [-869.68, 869.65], + [875.1, 875.01], + [876.1, 876.01], + [877.1, 877.01], + [888.1, 888.01], + [889.1, 889.01], + [892.1, 892.01], + [893.1, 893.01], + [898.1, 898.01], + [898.2, 898.02], + ]; + consistentIDs.forEach(([oldID, newID]) => { + // Update all the Pokemon IDs + Update.updatePokemonId(saveData, oldID, newID); + }); + // Update proteins → vitamins + saveData.challenges.list.disableVitamins = saveData.challenges.list.disableProteins || false; + saveData.statistics.totalVitaminsObtained = saveData.statistics.totalProteinsObtained || 0; + saveData.statistics.totalVitaminsPurchased = saveData.statistics.totalProteinsPurchased || 0; + // Delete our old statistics + delete saveData.statistics.totalProteinsObtained; + delete saveData.statistics.totalProteinsPurchased; + // Update Vitamins used + saveData.party.caughtPokemon.forEach(p => { + // Check Proteins used + if (p[2]) { + // Update Proteins used + p[2] = { + 0: p[2], + }; + } + }); + // Update our settings + settingsData.vitaminSort = settingsData.proteinSort; + settingsData.vitaminSortDirection = settingsData.proteinSortDirection; + settingsData.vitaminHideMaxedPokemon = settingsData.proteinHideMaxedPokemon; + settingsData.vitaminHideShinyPokemon = settingsData.proteinHideShinyPokemon; + settingsData.vitaminSearchFilter = settingsData.proteinSearchFilter; + settingsData.vitaminRegionFilter = settingsData.proteinRegionFilter; + settingsData.vitaminTypeFilter = settingsData.proteinTypeFilter; + // Delete old settings + delete settingsData.proteinSort; + delete settingsData.proteinSortDirection; + delete settingsData.proteinHideMaxedPokemon; + delete settingsData.proteinHideShinyPokemon; + delete settingsData.proteinSearchFilter; + delete settingsData.proteinRegionFilter; + delete settingsData.proteinTypeFilter; + // Fix Galar main story temp battles + const darkestDayQL = saveData.quests.questLines.find((q) => q.name == 'The Darkest Day'); + if ((darkestDayQL === null || darkestDayQL === void 0 ? void 0 : darkestDayQL.state) < 2) { + // Fix temp battle indicies based on quest step. + if (darkestDayQL.quest <= 1) { + saveData.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Bede 3')] = 0; + } + if (darkestDayQL.quest <= 3) { + saveData.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Hop 6')] = 0; + } + if (darkestDayQL.quest <= 4) { + saveData.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Hop 7')] = 0; + } + if (darkestDayQL.quest <= 17) { + saveData.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Eternatus')] = 0; + } + if (darkestDayQL.quest <= 18) { + saveData.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('The Darkest Day')] = 0; + } + } + // Suicune Quest autostart for players too far in Legendary Beasts quest + const johtoBeastsQuestLine = saveData.quests.questLines.find((q) => q.name == 'The Legendary Beasts'); + const johtoSuicuneQuestLine = saveData.quests.questLines.find((q) => q.name == 'Eusine\'s Chase'); + if ((johtoBeastsQuestLine === null || johtoBeastsQuestLine === void 0 ? void 0 : johtoBeastsQuestLine.state) == 2 || ((johtoBeastsQuestLine === null || johtoBeastsQuestLine === void 0 ? void 0 : johtoBeastsQuestLine.state) == 1 && (johtoBeastsQuestLine === null || johtoBeastsQuestLine === void 0 ? void 0 : johtoBeastsQuestLine.quest) >= 4)) { + if (!johtoSuicuneQuestLine) { + // add to array + saveData.quests.questLines.push({ + state: 1, + name: 'Eusine\'s Chase', + quest: 0, + }); + } + else if (johtoSuicuneQuestLine.state == 0) { + // activate quest + johtoSuicuneQuestLine.state = 1; + } + } + //Red Gyarados + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 22); + }, + '0.10.6': ({ playerData, saveData }) => { + // Give the player any missing questline or temporary battle rewards + Update.giveMissingQuestLineProgressRewardPokemon(saveData, 'Unfinished Business', 8, 172.01); + Update.giveMissingQuestLineProgressRewardPokemon(saveData, 'Princess Diancie', 6, 681.01); + Update.giveMissingQuestLineProgressRewardPokemon(saveData, 'A Mystery Gift', 1, 801.01); + Update.giveMissingTempBattleRewardPokemon(saveData, 123, 25.14); // Ash Ketchum Pinkan + Update.giveMissingTempBattleRewardPokemon(saveData, 151, 25.08); // Ash Ketchum Alola + if (saveData.statistics.dungeonsCleared[157] > 0) { // Tower of Waters + Update.giveMissingPokemon(saveData, 892.01); + } + // Set 'Team Plasma Grunt 1' to 0 if quest step not completed + Update.fixTempBattleState(saveData, 64, 0, 'Quest for the DNA Splicers', 0); + // Set Cyrus as complete if 'A New World' completed + Update.fixTempBattleState(saveData, 57, 1, 'A New World', 3); + }, + '0.10.7': ({ playerData, saveData }) => { + //JirachiQuest + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 40); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 41); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 42); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 43); + }, + '0.10.8': ({ playerData, saveData }) => { + //Grand Duchess Diantha + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 129); + }, + '0.10.9': ({ playerData, saveData }) => { + saveData.pokeballs.alreadyCaughtContagiousSelection = saveData.pokeballs.alreadyCaughtSelection; + //Hex Maniac Aster + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 112); + //ManaphyQuest + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 65); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 66); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 67); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 68); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 69); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 70); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 71); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 72); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 73); + //Marquis Grant + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 139); + //Latios Latias Quest + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 44); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 45); + }, + '0.10.10': ({ playerData, saveData, settingsData }) => { + var _a; + // Bill's Grandpa + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 12); + //Mega Manectric/Houndoom + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 144); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 145); + // Derive Trainer Id from linked Discord Id to preserve Enigma hints + if ((_a = saveData === null || saveData === void 0 ? void 0 : saveData.discord) === null || _a === void 0 ? void 0 : _a.ID) { + const getDerivedTrainerId = (discordId) => { + const MULTIPLIER = 9301; + const OFFSET = 49297; + const MOD = 233280; + let val = (discordId * MULTIPLIER + OFFSET) % MOD; + val = (val - OFFSET + MOD) % MOD; + val = (val * 123901) % MOD; + return val; + }; + const trainerId = getDerivedTrainerId(saveData.discord.ID); + playerData.trainerId = trainerId.toString().padStart(6, '0'); + } + // Delta Episode + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 115); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 116); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 117); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 118); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 119); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 120); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 121); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 122); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 123); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 124); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 125); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 126); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 127); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 128); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 129); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 130); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 131); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 132); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 133); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 134); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 135); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 136); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 137); + // Add Near Space dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 56); + // Mega Diancie + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 156); + // If Distortion World has been cleared and no Pokémon in our party has Pokérus, infect the first Pokémon in our party + if (saveData.statistics.dungeonsCleared[72] && !saveData.party.caughtPokemon.some(pokemon => pokemon[8] > 0)) { + saveData.party.caughtPokemon[0][8] = 2; + } + //Joey + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 31); + }, + '0.10.11': ({ playerData, saveData, settingsData }) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; + // Hoenn Stone Shop fight + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 139); + // Updates Sorting + if (settingsData.hatcherySort > 5) { + settingsData.hatcherySort++; + } + if (settingsData.partySort > 5) { + settingsData.partySort++; + } + if (settingsData.vitaminSort > 5) { + settingsData.vitaminSort++; + } + if (settingsData.heldItemSort > 5) { + settingsData.heldItemSort++; + } + (_a = saveData.breeding.hatcheryHelpers) === null || _a === void 0 ? void 0 : _a.forEach(helper => { + if (helper.sortOption > 5) { + helper.sortOption++; + } + }); + // Update categories and fix category filters + const max = saveData.categories.categories.length - 1; + saveData.categories.categories.forEach((c, id) => { + c.id = id; + }); + if (settingsData.pokedexCategoryFilter > max) { + settingsData.pokedexCategoryFilter = -1; + } + if (settingsData.breedingCategoryFilter > max) { + settingsData.breedingCategoryFilter = -1; + } + // Reset Blue 5 to undefeated if he has been defeated before reaching the quest step to battle him + const teamRocketQuestLine = saveData.quests.questLines.find((q) => q.name == 'Team Rocket'); + if (saveData.statistics.temporaryBattleDefeated[7] + && ((teamRocketQuestLine === null || teamRocketQuestLine === void 0 ? void 0 : teamRocketQuestLine.state) == 0 || ((teamRocketQuestLine === null || teamRocketQuestLine === void 0 ? void 0 : teamRocketQuestLine.state) == 1 && (teamRocketQuestLine === null || teamRocketQuestLine === void 0 ? void 0 : teamRocketQuestLine.quest) <= 2))) { + saveData.statistics.temporaryBattleDefeated[7] = 0; + } + // Add Phenac City Battles dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 57); + // Add Pyrite Town Battles dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 58); + // Add Pyrite Colosseum Battles dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 59); + // Add Pyrite Blgd dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 60); + // Add Pyrite Cave dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 61); + // Add Relic Cave dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 62); + // Add Mt. Battle Battles dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 63); + // Add The Under Subway dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 64); + // Add Cipher Lab Battles dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 65); + // Add Realgam Tower Battles dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 66); + // Add Realgam Colosseum Battles dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 67); + // Add Snagem Hideout dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 68); + // Add Deep Colosseum dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 69); + // Add Phenac Stadium dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 70); + // Add Under Colosseum dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 71); + // Add Orre Colosseum dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 72); + //Team Flare Grunt 1 + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 114); + //Team Flare Grunt 2 + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 115); + //Team Flare Lysandre + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 152); + //Team Flare Xerosic + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 153); + //Xerneas + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 154); + //Yveltal + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 155); + //Team Flare Boss Lysandre 1 + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 156); + //Storyline AZ + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 166); + //Team Flare Boss Lysandre 2 + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 178); + // Start Team Flare questline if player has beaten Sycamore 1 already + if (saveData.statistics.temporaryBattleDefeated[111]) { + Update.startQuestLine(saveData, 'A Beautiful World'); + } + // Move pokeball selections onto new filters + saveData.pokeballFilters = { + list: [ + { + name: 'Caught', + options: { caught: true }, + ball: (_c = (_b = saveData.pokeballs) === null || _b === void 0 ? void 0 : _b.alreadyCaughtSelection) !== null && _c !== void 0 ? _c : GameConstants.Pokeball.None, + }, + { + name: 'Contagious', + options: { pokerus: GameConstants.Pokerus.Contagious }, + ball: (_e = (_d = saveData.pokeballs) === null || _d === void 0 ? void 0 : _d.alreadyCaughtContagiousSelection) !== null && _e !== void 0 ? _e : GameConstants.Pokeball.None, + }, + { + name: 'Caught Shiny', + options: { shiny: true, caughtShiny: true }, + ball: (_g = (_f = saveData.pokeballs) === null || _f === void 0 ? void 0 : _f.alreadyCaughtShinySelection) !== null && _g !== void 0 ? _g : GameConstants.Pokeball.Pokeball, + }, + { + name: 'New', + options: { caught: false }, + ball: (_j = (_h = saveData.pokeballs) === null || _h === void 0 ? void 0 : _h.notCaughtSelection) !== null && _j !== void 0 ? _j : GameConstants.Pokeball.Pokeball, + }, + { + name: 'New Shiny', + options: { shiny: true, caughtShiny: false }, + ball: (_l = (_k = saveData.pokeballs) === null || _k === void 0 ? void 0 : _k.notCaughtShinySelection) !== null && _l !== void 0 ? _l : GameConstants.Pokeball.Pokeball, + }, + ], + }; + // Add Hisui Gyms + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 114); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 115); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 116); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 117); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 118); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 119); + //Primal Reversion battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 142); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 143); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 144); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 145); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 146); + // Mega Stones are items now! + // Give the player the Mega Stone if they own the Mega form or have the mega stone on the base form. + // Then delete the megaStone property on all caught pokemon. + const updateMegaStone = (megaStone, basePokemonId, megaPokemonId) => { + const basePokemon = saveData.party.caughtPokemon.find(p => p.id === basePokemonId); + const megaPokemon = saveData.party.caughtPokemon.find(p => p.id === megaPokemonId); + if (megaPokemon || (basePokemon === null || basePokemon === void 0 ? void 0 : basePokemon[14])) { + playerData._itemList[megaStone] = 1; + } + }; + updateMegaStone('Abomasite', 460, 460.01); // Abomasnow + updateMegaStone('Absolite', 359, 359.01); // Absol + updateMegaStone('Aerodactylite', 142, 142.01); // Aerodactyl + updateMegaStone('Aggronite', 306, 306.01); // Aggron + updateMegaStone('Alakazite', 65, 65.01); // Alakazam + updateMegaStone('Ampharosite', 181, 181.01); // Ampharos + updateMegaStone('Audinite', 531, 531.01); // Audino + updateMegaStone('Beedrillite', 15, 15.01); // Beedrill + updateMegaStone('Cameruptite', 323, 323.01); // Camerupt + updateMegaStone('Diancite', 719, 719.01); // Diancie + updateMegaStone('Galladite', 475, 475.01); // Gallade + updateMegaStone('Garchompite', 445, 445.01); // Garchomp + updateMegaStone('Gardevoirite', 282, 282.01); // Gardevoir + updateMegaStone('Gengarite', 94, 94.01); // Gengar + updateMegaStone('Glalitite', 362, 362.01); // Glalie + updateMegaStone('Heracronite', 214, 214.01); // Heracross + updateMegaStone('Houndoominite', 229, 229.01); // Houndoom + updateMegaStone('Kangaskhanite', 115, 115.01); // Kangaskhan + updateMegaStone('Latiasite', 380, 380.01); // Latias + updateMegaStone('Latiosite', 381, 381.01); // Latios + updateMegaStone('Lopunnite', 428, 428.01); // Lopunny + updateMegaStone('Lucarionite', 448, 448.01); // Lucario + updateMegaStone('Manectite', 310, 310.01); // Manectric + updateMegaStone('Mawilite', 303, 303.01); // Mawile + updateMegaStone('Metagrossite', 376, 376.01); // Metagross + updateMegaStone('Meteorite', 384, 384.01); // Rayquaza + updateMegaStone('Pidgeotite', 18, 18.01); // Pidgeot + updateMegaStone('Sablenite', 302, 302.01); // Sableye + updateMegaStone('Salamencite', 373, 373.01); // Salamence + updateMegaStone('Sharpedonite', 319, 319.01); // Sharpedo + updateMegaStone('Slowbronite', 80, 80.01); // Slowbro + updateMegaStone('Steelixite', 208, 208.01); // Steelix + updateMegaStone('Tyranitarite', 248, 248.01); // Tyranitar + saveData.party.caughtPokemon.forEach(p => { + delete p[14]; // megaStone + }); + // Hopo Berry + saveData.farming.mutations = Update.moveIndex(saveData.farming.mutations, 70); + }, + '0.10.12': ({ playerData, saveData, settingsData }) => { + // Rename Unova's Quest for the DNA Splicers questline + saveData.quests.questLines.forEach(v => { + if (v.name === 'Quest for the DNA Splicers') { + v.name = 'Hollow Truth and Ideals'; + } + }); + //Colosseum battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 48); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 49); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 50); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 51); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 52); + //Kalos Stone Salesman battle + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 147); + //Silvally Types + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 215); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 216); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 217); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 218); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 219); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 220); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 221); + // Adding Orre badges + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 45); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 46); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 47); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 48); + // Changing MissingResistant to match new default + if (settingsData['--missingResistant'] === '#ffffff') { + settingsData['--missingResistant'] = Settings.getSetting('--missingResistant').defaultValue; + } + }, + '0.10.13': ({ playerData, saveData, settingsData }) => { + // Fix up any decoding errors from v0.10.12 + const decodeStringsDeep = (obj) => { + Object.keys(obj).forEach(key => { + if (typeof obj[key] === 'object' && obj[key] !== null) { + decodeStringsDeep(obj[key]); + } + if (typeof obj[key] === 'string') { + try { + obj[key] = decodeURI(obj[key]); + } + catch (e) { + console.warn('Unable to decode save file string', obj[key]); + } + } + }); + }; + // try and decode our data + decodeStringsDeep(saveData); + decodeStringsDeep(playerData); + decodeStringsDeep(settingsData); + // Fix up Zero's Ambition questline restarting + if (saveData.party.caughtPokemon.find(p => p.id === 487)) { // If Giratina Altered caught + const zeroQuestLine = saveData.quests.questLines.find(q => q.name === 'Zero\'s Ambition'); + if (zeroQuestLine) { + zeroQuestLine.state = 2; + } + } + else if (saveData.statistics.temporaryBattleDefeated[83] >= 1) { // If zero temp battle defeated + const zeroQuestLine = saveData.quests.questLines.find(q => q.name === 'Zero\'s Ambition'); + if (zeroQuestLine) { + zeroQuestLine.state = 1; + zeroQuestLine.quest = 14; + zeroQuestLine.initial = 0; + } + } + // Fix up Zero's Ambition questline starting early + const zeroQuestLine = saveData.quests.questLines.find(q => q.name === 'Zero\'s Ambition'); + if (zeroQuestLine && zeroQuestLine.state === 1) { + // Quest is started, check if the player has the rquirements for starting the quest + const caughtUxie = saveData.party.caughtPokemon.find(p => p.id === 480); + const caughtMesprit = saveData.party.caughtPokemon.find(p => p.id === 481); + const caughtAzelf = saveData.party.caughtPokemon.find(p => p.id === 482); + const hasSinnohChampionBadge = !!saveData.badgeCase[61]; + // If any of these requirements are not met, reset the questline + if (!caughtUxie || !caughtMesprit || !caughtAzelf || !hasSinnohChampionBadge) { + zeroQuestLine.state = 0; + zeroQuestLine.quest = 0; + zeroQuestLine.initial = 0; + } + } + }, + '0.10.14': ({ playerData, saveData, settingsData }) => { + var _a; + // Hoopa battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 167); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 168); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 169); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 170); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 171); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 172); + // Add XD dungeons + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 73); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 74); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 75); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 76); + // Update Mewtwo Strikes Back! event + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 12); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 12); + // Add XD Temp Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 54); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 55); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 56); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 57); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 58); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 59); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 60); + // Add Mega Mewtwo battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 205); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 206); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 207); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 208); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 209); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 210); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 211); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 212); + // Max Raids + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 340); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 341); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 342); + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 189); + // ZCrystals + const crystalOrder = [ + 'Normalium Z', + 'Fightinium Z', + 'Waterium Z', + 'Firium Z', + 'Grassium Z', + 'Rockium Z', + 'Electrium Z', + 'Ghostium Z', + 'Darkinium Z', + 'Dragonium Z', + 'Fairium Z', + 'Groundium Z', + ]; + const crystalFirstID = 88; + crystalOrder.forEach((crystalName, rid) => { + if (!!saveData.badgeCase[crystalFirstID + rid]) { + playerData._itemList[crystalName] = 1; + } + }); + // Fixing Silvally item amounts + Object.keys(playerData._itemList).filter(itemName => itemName.includes('Memory_Silvally')).forEach(itemName => playerData._itemList[itemName] = Math.min(1, playerData._itemList[itemName])); + //Replace Blaze Cassette with Magma Stone + saveData.oakItems.Magma_Stone = saveData.oakItems.Blaze_Cassette; + delete saveData.oakItems.Blaze_Cassette; + // Snover Berry + saveData.farming.berryList = Update.moveIndex(saveData.farming.berryList, 54); + saveData.farming.unlockedBerries = Update.moveIndex(saveData.farming.unlockedBerries, 54); + saveData.farming.mutations = Update.moveIndex(saveData.farming.mutations, 50); + saveData.statistics.berriesHarvested = Update.moveIndex(saveData.statistics.berriesHarvested, 54); + saveData.statistics.berriesObtained = Update.moveIndex(saveData.statistics.berriesObtained, 54); + saveData.farming.plotList.forEach(p => { + if (p.berry >= 54) { + p.berry++; + } + }); + // Add milestone for Vivillon (Poké Ball) if the quest is complete. + const vivillonQuestLine = saveData.quests.questLines.find((q) => q.name == 'The Great Vivillon Hunt!'); + if (((_a = saveData.battleFrontier) === null || _a === void 0 ? void 0 : _a.milestones) && (vivillonQuestLine === null || vivillonQuestLine === void 0 ? void 0 : vivillonQuestLine.state) == 2) { + saveData.battleFrontier.milestones.push([666, 'Vivillon (Poké Ball)']); + } + // Add Paldea Gyms + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 120); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 121); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 122); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 123); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 124); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 125); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 126); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 127); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 128); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 129); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 130); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 131); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 132); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 133); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 134); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 135); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 136); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 137); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 138); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 139); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 140); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 141); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 142); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 143); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 144); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 145); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 146); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 147); + saveData.statistics.gymsDefeated = Update.moveIndex(saveData.statistics.gymsDefeated, 148); + // Remove Orre Colosseum Dungeon + saveData.statistics.dungeonsCleared.splice(73, 1); + // Adding Orre XD badges + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 49); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 50); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 51); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 52); + saveData.badgeCase = Update.moveIndex(saveData.badgeCase, 53); + // Reset Red temp battle + saveData.statistics.temporaryBattleDefeated[31] = 0; + }, + '0.10.16': ({ saveData, settingsData }) => { + var _a; + // Fix None category color being incomplete + if (saveData.categories.categories[0].color === '#333') { + saveData.categories.categories[0].color = '#333333'; + } + // ClearBattleFrontier → ClearBattleFrontierQuest + saveData.quests.questList = ((_a = saveData.quests.questList) === null || _a === void 0 ? void 0 : _a.map(q => { + if (q.name == 'ClearBattleFrontier') { + q.name = 'ClearBattleFrontierQuest'; + } + return q; + })) || []; + // Add Genesect Quest Battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 122); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 123); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 124); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 125); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 126); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 127); + // Remove erroneous BreedingFilter search setting + delete settingsData['']; + // Remove Z Crystal gyms and badges (remove furthest down the index first as to not get confused by index numbers) + // Mina\'s Trial + saveData.statistics.gymsDefeated.splice(88, 1); + // Vast Poni Canyon Trial + saveData.statistics.gymsDefeated.splice(87, 1); + // Acerola\'s Trial + saveData.statistics.gymsDefeated.splice(85, 1); + // Sophocles\' Trial + saveData.statistics.gymsDefeated.splice(84, 1); + // Mallow\'s Trial + saveData.statistics.gymsDefeated.splice(82, 1); + // Kiawe\'s Trial + saveData.statistics.gymsDefeated.splice(81, 1); + // Lana\'s Trial + saveData.statistics.gymsDefeated.splice(80, 1); + // Ilima\'s Trial + saveData.statistics.gymsDefeated.splice(78, 1); + // FairiumZ + saveData.badgeCase.splice(103, 1); + // DragoniumZ + saveData.badgeCase.splice(102, 1); + // GhostiumZ + saveData.badgeCase.splice(100, 1); + // ElectriumZ + saveData.badgeCase.splice(99, 1); + // GrassiumZ + saveData.badgeCase.splice(97, 1); + // FiriumZ + saveData.badgeCase.splice(96, 1); + // WateriumZ + saveData.badgeCase.splice(95, 1); + // NormaliumZ + saveData.badgeCase.splice(93, 1); + // Santa Jynx TempBattles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 15); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 15); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 15); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 15); + // Fix Hopo berry visible in berrydex when not available + saveData.farming.mutations[71] = false; + }, + '0.10.17': ({ saveData }) => { + var _a; + // Fix Anomaly Mewtwo 5 if the quest is not completed. + if (((_a = saveData.quests.questLines.find(ql => ql.name === 'An Unrivaled Power')) === null || _a === void 0 ? void 0 : _a.state) < 2) { + saveData.statistics.temporaryBattleDefeated[223] = 0; + } + }, + '0.10.18': ({ playerData, saveData, settingsData }) => { + var _a, _b, _c; + // Actually fix Anomaly Mewtwo 5 if the quest is not completed. + if (((_b = (_a = saveData.quests.questLines.find(ql => ql.name === 'An Unrivaled Power')) === null || _a === void 0 ? void 0 : _a.state) !== null && _b !== void 0 ? _b : 0) !== 2) { + saveData.statistics.temporaryBattleDefeated[223] = 0; + } + // Give the player Fairy Feathers in place of Pink Bows + playerData._itemList.Fairy_Feather = playerData._itemList.Pink_Bow || 0; + delete playerData._itemList.Pink_Bow; + // Update pokemon held item Pink Bow -> Fairy Feather + saveData.party.caughtPokemon.forEach(p => { + if (p[10] === 'Pink_Bow') { + p[10] = 'Fairy_Feather'; + } + }); + // ID to itemName interface + const converter = { + 1: 'Rare_bone', 2: 'Star_piece', 3: 'Revive', 4: 'Max_revive', 5: 'Iron_ball', 6: 'Heart_scale', 7: 'Light_clay', 8: 'Odd_keystone', 9: 'Hard_stone', 10: 'Oval_stone', 11: 'Everstone', 12: 'Smooth_rock', 13: 'Heat_rock', 14: 'Icy_rock', 15: 'Damp_rock', + 100: 'Draco_plate', 101: 'Dread_plate', 102: 'Earth_plate', 103: 'Fist_plate', 104: 'Flame_plate', 105: 'Icicle_plate', 106: 'Insect_plate', 107: 'Iron_plate', 108: 'Meadow_plate', 109: 'Mind_plate', 110: 'Sky_plate', 111: 'Splash_plate', 112: 'Spooky_plate', 113: 'Stone_plate', 114: 'Toxic_plate', 115: 'Zap_plate', 116: 'Pixie_plate', + 200: 'Helix_fossil', 201: 'Dome_fossil', 202: 'Old_amber', 203: 'Root_fossil', 204: 'Claw_fossil', 205: 'Armor_fossil', 206: 'Skull_fossil', 207: 'Cover_fossil', 208: 'Plume_fossil', 209: 'Jaw_fossil', 210: 'Sail_fossil', 211: 'Fossilized_bird', 212: 'Fossilized_fish', 213: 'Fossilized_drake', 214: 'Fossilized_dino', + 300: 'Fire_stone', 301: 'Water_stone', 302: 'Thunder_stone', 303: 'Leaf_stone', 304: 'Moon_stone', 305: 'Sun_stone', 306: 'Shiny_stone', 307: 'Dusk_stone', 308: 'Dawn_stone', 309: 'Ice_stone', + 400: 'Red_shard', 401: 'Yellow_shard', 402: 'Green_shard', 403: 'Blue_shard', 404: 'Grey_shard', 405: 'Purple_shard', 406: 'Ochre_shard', 407: 'Black_shard', 408: 'Crimson_shard', 409: 'Lime_shard', 410: 'White_shard', 411: 'Pink_shard', 412: 'Cyan_shard', 413: 'Rose_shard', 414: 'Brown_shard', + 500: 'Aerodactylite', 501: 'Mawilite', 502: 'Sablenite', + }; + // Port player.mineInventory to player.itemList + const sellLocks = (saveData.underground.sellLocks = {}); + playerData.mineInventory.forEach(it => { + if (!converter[it.id]) { + return console.error(`${it.name} is not a valid item to store.`); + } + playerData._itemList[converter[it.id]] = (playerData._itemList[converter[it.id]] || 0) + it.amount; + sellLocks[converter[it.id]] = it.sellLocked; + }); + // Update sort settings to make room for new attack at lv 100 sort option + ['hatcherySort', 'partySort', 'vitaminSort', 'heldItemSort', 'consumableSort'] + .forEach((sortSetting) => { + if (settingsData[sortSetting] >= 5) { + settingsData[sortSetting]++; + } + }); + // Sort by attack -> sort by attack at lv100 + if (settingsData.hatcherySort == 2) { + settingsData.hatcherySort = 5; + } + // Update hatchery helper sorting + (_c = saveData.breeding.hatcheryHelpers) === null || _c === void 0 ? void 0 : _c.forEach(helper => { + if (helper.sortOption >= 5) { + // Move index + helper.sortOption++; + } + else if (helper.sortOption == 2) { + // Sort by attack -> sort by attack at lv100 + helper.sortOption = 5; + } + }); + // Fix pokerus status for party members infected via shop eggs + saveData.party.caughtPokemon.forEach(pokemon => { + // PartyPokemonSaveKeys.pokerus and .breeding + if (pokemon[8] === GameConstants.Pokerus.Infected && !pokemon[4]) { + pokemon[8] = GameConstants.Pokerus.Contagious; + } + }); + // Preserve bottom-to-top catch filter priority for existing players + settingsData['catchFilters.invertPriorityOrder'] = true; + }, + '0.10.19': ({ playerData, saveData, settingsData }) => { + var _a; + // Update hatchery helper sorting (again) + (_a = saveData.breeding.hatcheryHelpers) === null || _a === void 0 ? void 0 : _a.forEach(helper => { + if (helper.sortOption == 2) { + // Sort by attack -> sort by attack at lv100 + helper.sortOption = 5; + } + }); + }, + '0.10.20': ({ playerData, saveData, settingsData }) => { + // Add Olivine Lighthouse dungeon + saveData.statistics.dungeonsCleared = Update.moveIndex(saveData.statistics.dungeonsCleared, 29); + if (saveData.badgeCase[17]) { + Update.startQuestLine(saveData, 'The Sick Ampharos'); + } + // Multicategory pokemon + saveData.party.caughtPokemon.forEach(pokemon => { + var _a; + pokemon[6] = [(_a = pokemon[6]) !== null && _a !== void 0 ? _a : 0]; + }); + // Add Alola story battles + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 225); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 227); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 228); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 229); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 230); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 236); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 237); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 242); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 243); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 244); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 245); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 248); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 249); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 250); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 251); + saveData.statistics.temporaryBattleDefeated = Update.moveIndex(saveData.statistics.temporaryBattleDefeated, 262); + // Reset temporary battles important to story + saveData.statistics.temporaryBattleDefeated[247] = 0; // Gladion 2 + saveData.statistics.temporaryBattleDefeated[252] = 0; // Necrozma + saveData.statistics.temporaryBattleDefeated[253] = 0; // Ultra Megalopolis + saveData.statistics.temporaryBattleDefeated[261] = 0; // Gladion 3 + // Reset questline Eater of Light if it exists in the save + const eaterID = saveData.quests.questLines.findIndex(ql => ql.name == 'Eater of Light'); + if (eaterID > -1) { + saveData.quests.questLines.splice(eaterID, 1); + } + // Reset/Remove questline Mina\'s Trial if in the save + const minaID = saveData.quests.questLines.findIndex(ql => ql.name == 'Mina\'s Trial'); + if (minaID > -1) { + saveData.quests.questLines.splice(minaID, 1); + } + // Reset Mina\'s Trial temporary battles + saveData.statistics.temporaryBattleDefeated[254] = 0; + saveData.statistics.temporaryBattleDefeated[255] = 0; + saveData.statistics.temporaryBattleDefeated[256] = 0; + saveData.statistics.temporaryBattleDefeated[257] = 0; + saveData.statistics.temporaryBattleDefeated[258] = 0; + saveData.statistics.temporaryBattleDefeated[259] = 0; + saveData.statistics.temporaryBattleDefeated[260] = 0; + // Start Alola story quests if player has beaten temp battles already + // Hau 1 + if (saveData.statistics.temporaryBattleDefeated[224]) { + Update.startQuestLine(saveData, 'Welcome to Paradise, Cousin!'); + } + /* Uncomment and move once Z-Moves are ready + // Give Z-Power_Ring key item if Hau 2 defeated + if (saveData.statistics.temporaryBattleDefeated[226]) { + saveData.keyItems['Z-Power_Ring'] = true; + KeyItemController.showGainModal(KeyItemType['Z-Power_Ring']); + }*/ + // Sina and Dexio + if (saveData.statistics.temporaryBattleDefeated[232] && saveData.statistics.temporaryBattleDefeated[233]) { + Update.startQuestLine(saveData, 'Symbiotic Relations'); + } + // Hau 5 + if (saveData.statistics.temporaryBattleDefeated[241]) { + Update.startQuestLine(saveData, 'Child of the Stars'); + } + // Reimburse Survey Efficiency upgrade + const surveyEfficiencyLevel = saveData.underground.upgrades.Survey_Efficiency; + if (surveyEfficiencyLevel) { + const surveyEfficiencyCost = GameHelper.createArray(100, 400, 100); + const investedDiamonds = surveyEfficiencyCost.slice(0, surveyEfficiencyLevel).reduce((acc, cur) => acc + cur, 0); + saveData.wallet.currencies[GameConstants.Currency.diamond] += investedDiamonds; + } + // The NewYLayer upgrades has been refactored to Items_All, copy the level + saveData.underground.upgrades.Items_All = saveData.underground.upgrades.NewYLayer; + }, + '0.10.21': ({ playerData, saveData, settingsData }) => { + // Rename settings to match pokedex filter name convention + settingsData.breedingType1Filter = settingsData.breedingTypeFilter1; + delete settingsData.breedingTypeFilter1; + settingsData.breedingType2Filter = settingsData.breedingTypeFilter2; + delete settingsData.breedingTypeFilter2; + // Rename settings to accurately describe purpose + settingsData.pokedexCaughtFilter = settingsData.pokedexShinyFilter; + delete settingsData.pokedexShinyFilter; + settingsData.breedingDisplayTextSetting = settingsData.breedingDisplayFilter; + delete settingsData.breedingDisplayFilter; + // Update breeding filters to use numeric values + ['breedingCategoryFilter', 'breedingShinyFilter', 'breedingType1Filter', 'breedingType2Filter', 'breedingRegionFilter', 'breedingPokerusFilter', 'breedingRegionalAttackDebuffSetting'] + .forEach((filter) => { + const convertedValue = Number.parseInt(settingsData[filter]); + if (!Number.isNaN(convertedValue)) { + settingsData[filter] = convertedValue; + } + else { + delete settingsData[filter]; + } + }); + // Update breedingHideAltFilter to use actual booleans + settingsData.breedingHideAltFilter = settingsData.breedingHideAltFilter === 'true'; + // Update breeding type filters to use null for 'any type', matching the pokedex filters + if (settingsData.breedingType1Filter == -2) { + settingsData.breedingType1Filter = null; + } + if (settingsData.breedingType2Filter == -2) { + settingsData.breedingType2Filter = null; + } + // Pokémon Center renamed + if (playerData._townName == 'Route 3 Pokémon Center') { + playerData._townName = 'Route 4 Pokémon Center'; + } + // Fix all weird amounts of Pokéballs + saveData.pokeballs.pokeballs = saveData.pokeballs.pokeballs.map(n => Math.min(Number.MAX_SAFE_INTEGER, Math.max(0, n))); + // Fix pokemon multi-category bug from 0.10.20 update for very old files + saveData.party.caughtPokemon.forEach(pokemon => { + var _a; + if (!Array.isArray(pokemon[6])) { + pokemon[6] = [(_a = pokemon[6]) !== null && _a !== void 0 ? _a : 0]; + } + }); + // Reset settings that the player shouldn't have access to yet but might have been + // set as default from a different file + if (playerData.highestRegion < 5) { // Kalos + settingsData.pokedexUniqueTransformationFilter = 'all'; + settingsData.breedingUniqueTransformationFilter = 'all'; + } + if (!saveData.challenges.list.regionalAttackDebuff) { + settingsData.breedingRegionalAttackDebuffSetting = '-1'; + } + }, + '0.10.22': ({ playerData, saveData, settingsData }) => { + // Reset Key Stone multiplier + delete playerData._itemMultipliers.Key_stone; + // Held item setting change + settingsData.heldItemHideHoldingThisItem = settingsData.heldItemShowHoldingThisItem; + delete settingsData.heldItemShowHoldingThisItem; + // Simplify farm module settings + if (settingsData.showFarmModule === false) { + settingsData.showFarmModule = 'never'; + } + else { + settingsData.showFarmModule = settingsData.showFarmModuleControls === false ? 'limited' : 'extended'; + } + delete settingsData.showFarmModuleControls; + }, + }; + const saveData = this.getSaveData(); + if (saveData) { + this.fromJSON(saveData.update, true); + } + // Start our update check + this.checkForNewerVersionOnInterval(); + } + checkForNewerVersionOnInterval() { + // Lets check every 3 hours for a newer version + const checkForNewVersionInterval = setInterval(() => { + try { + $.ajax({ + cache: false, + url: './package.json', + dataType: 'json', + success: result => { + // If the website version is newer + if (this.isNewerVersion(result.version, this.version)) { + clearInterval(checkForNewVersionInterval); + Notifier.notify({ + title: `[UPDATE] v${result.version}`, + message: 'A newer version of the game is available:\n\nReload Page', + timeout: GameConstants.DAY, + }); + } + }, + }); + } + catch (ಠ_ಠ) { + console.error('[update] Unable to check for new version', ಠ_ಠ); + } + }, GameConstants.HOUR * 3); + } + // check if save version is newer or equal to version + minUpdateVersion(version, saveData) { + var _a; + return !this.isOlderVersion((_a = saveData.update) === null || _a === void 0 ? void 0 : _a.version, version); + } + // potentially newer version > check against version + isNewerVersion(version, compareVersion) { + return compareVersion.localeCompare(version, undefined, { numeric: true }) === -1; + } + // potentially older version < check against version + isOlderVersion(version, compareVersion) { + return compareVersion.localeCompare(version, undefined, { numeric: true }) === 1; + } + getBackupButton() { + const playerData = this.getPlayerData(); + const saveData = this.getSaveData(); + const settingsData = this.getSettingsData(); + // Save the data by stringifying it, so that it isn't mutated during update + const backupSaveData = JSON.stringify({ player: playerData, save: saveData, settings: settingsData }); + const button = document.createElement('a'); + try { + button.href = `data:text/plain;charset=utf-8,${encodeURIComponent(SaveSelector.btoa(backupSaveData))}`; + button.className = 'btn btn-block btn-warning'; + button.innerText = 'Click to Backup Save!'; + const filename = settingsData.saveFilename || Settings.getSetting('saveFilename').defaultValue; + const datestr = GameConstants.formatDate(new Date()); + button.setAttribute('download', GameHelper.saveFileName(filename, { '{date}': datestr, '{version}': this.saveVersion, '{name}': saveData.profile.name }, true)); + } + catch (e) { + console.error('Failed to create backup button data:', e); + } + return [button, backupSaveData]; + } + automaticallyDownloadBackup(button, settingsData) { + // Add to body and click, triggering auto download + if (!(settingsData === null || settingsData === void 0 ? void 0 : settingsData.disableAutoDownloadBackupSaveOnUpdate)) { + button.style.display = 'none'; + document.body.appendChild(button); + button.click(); + document.body.removeChild(button); + } + button.style.display = ''; + } + check() { + if (this.saveVersion === this.version) { + return; + } + // Check if the save is newer than the current client, don't allow it to load. + if (this.isNewerVersion(this.saveVersion, this.version)) { + Notifier.notify({ + title: 'Save version is newer than game version!', + message: `Please update your game before attempting to load this save..\n\nSave version: ${this.saveVersion}\nGame version: ${this.version}`, + type: NotificationConstants.NotificationOption.danger, + timeout: GameConstants.DAY, + }); + throw new Error(`Save is newer than game version\nSave version: ${this.saveVersion}\nGame version: ${this.version}`); + return; + } + const [backupButton, backupSaveData] = this.getBackupButton(); + // Must modify these object when updating + const playerData = this.getPlayerData(); + const saveData = this.getSaveData(); + const settingsData = this.getSettingsData(); + if (!playerData || !saveData) { + return; + } + const updateResult = Object.entries(this.updateSteps) + .filter(([version]) => this.isOlderVersion(this.saveVersion, version)) + .sort(([a], [b]) => this.isNewerVersion(a, b) ? 1 : -1) + .reduce((beforeUpdate, [version, callback]) => { + // The parse(stringify(...)) will deep-clone the object so + // that it isn't mutated, and we can log if something fails + const updateData = JSON.parse(JSON.stringify(beforeUpdate)); + try { + console.info(`Applying update v${version}`); + callback(updateData); + return updateData; + } + catch (e) { + try { + localStorage.backupSave = backupSaveData; + } + catch (e) { } + const resetButton = document.createElement('a'); + resetButton.className = 'btn btn-block btn-danger'; + resetButton.innerText = 'Reset your save - This is not reversible'; + resetButton.id = 'failedUpdateResetButton'; + console.error(`Caught error while applying update v${version}`, e, { beforeUpdate, updateData }); + Notifier.notify({ + title: `Failed to update to v${this.version}!`, + message: `Please check the console for errors, and report them on our Discord along with your save file.\n\n${backupButton.outerHTML}\n${resetButton.outerHTML}`, + type: NotificationConstants.NotificationOption.primary, + timeout: GameConstants.DAY, + }); + // On the next tick, set the reset button click handler + setTimeout(() => { + document.getElementById('failedUpdateResetButton').onclick = () => { + Notifier.confirm({ + title: 'Reset save', + message: 'Are you sure you want to reset your save?\n\nThis cannot be undone, so please make sure you have a backup first!', + type: NotificationConstants.NotificationOption.danger, + confirm: 'reset', + }).then(confirmed => { + if (confirmed) { + // Force an autodownload of the backup when resetting the save + this.automaticallyDownloadBackup(backupButton, { disableAutoDownloadBackupSaveOnUpdate: false }); + localStorage.removeItem(`player${Save.key}`); + localStorage.removeItem(`save${Save.key}`); + localStorage.removeItem(`settings${Save.key}`); + location.reload(); + } + }); + }; + }, 0); + // Rethrow the error to prevent the game from corrupting the save + throw e; + } + }, { playerData, saveData, settingsData }); + try { + this.automaticallyDownloadBackup(backupButton, settingsData); + Notifier.notify({ + title: `[v${this.version}] Game has been updated!`, + message: `Check the changelog for details!\n\n${backupButton.outerHTML}`, + type: NotificationConstants.NotificationOption.primary, + timeout: 6e4, + }); + } + catch (err) { + console.error('Error trying to convert backup save', err); + Notifier.notify({ + title: `[v${this.version}] Game has been updated!`, + message: 'Check the changelog for details!\n\nFailed to download old save, Please check the console for errors, and report them on our Discord.', + type: NotificationConstants.NotificationOption.primary, + timeout: 6e4, + }); + try { + localStorage.backupSave = backupSaveData; + } + catch (e) { } + throw err; + } + // Update the save data version to our current version + updateResult.saveData.update.version = this.version; + this.setPlayerData(updateResult.playerData); + this.setSaveData(updateResult.saveData); + this.setSettingsData(updateResult.settingsData); + } + // Will move from the previous ID to the new ID and delete any old statistics + static updatePokemonId(saveData, oldID, newID) { + Update.rotatePokemonIDs(saveData, [newID, oldID], false); + } + // Replaces Pokémon names to IDs in the save data + static changePokemonNameToId(saveData, pokemonArray) { + pokemonArray === null || pokemonArray === void 0 ? void 0 : pokemonArray.forEach(pokemonName => { + const pokemon = PokemonHelper.getPokemonByName(pokemonName); + Update.changeHatcheryKey(saveData, pokemonName, pokemon.id); + }); + } + static giveMissingQuestLineProgressRewardPokemon(saveData, questLineName, questStep, pokemonId) { + const quest = saveData.quests.questLines.find((q) => q.name == questLineName); + if ((quest === null || quest === void 0 ? void 0 : quest.state) == 2 || ((quest === null || quest === void 0 ? void 0 : quest.state) == 1 && (quest === null || quest === void 0 ? void 0 : quest.quest) >= questStep)) { + Update.giveMissingPokemon(saveData, pokemonId); + } + } + static giveMissingTempBattleRewardPokemon(saveData, tempBattleIndex, pokemonId) { + if (saveData.statistics.temporaryBattleDefeated[tempBattleIndex] > 0) { + Update.giveMissingPokemon(saveData, pokemonId); + } + } + static giveMissingPokemon(saveData, pokemonId) { + if (!saveData.party.caughtPokemon.find((p) => p.id == pokemonId)) { + saveData.party.caughtPokemon.push({ id: pokemonId }); + saveData.statistics.pokemonCaptured[pokemonId] = saveData.statistics.pokemonCaptured[pokemonId] + 1 || 1; + } + } + getPlayerData() { + let playerData; + try { + playerData = JSON.parse(localStorage.getItem(`player${Save.key}`)); + } + catch (err) { + console.warn('Error getting player data', err); + } + finally { + return playerData; + } + } + setPlayerData(playerData) { + try { + localStorage.setItem(`player${Save.key}`, JSON.stringify(playerData)); + } + catch (err) { + console.error('Error setting player data', err); + } + } + getSaveData() { + let saveData; + try { + saveData = JSON.parse(localStorage.getItem(`save${Save.key}`)); + } + catch (err) { + console.warn('Error getting save data', err); + } + finally { + return saveData; + } + } + setSaveData(saveData) { + try { + localStorage.setItem(`save${Save.key}`, JSON.stringify(saveData)); + } + catch (err) { + console.error('Error setting save data', err); + } + } + getSettingsData() { + let settingsData; + try { + settingsData = JSON.parse(localStorage.getItem(`settings${Save.key}`) || localStorage.settings); + } + catch (err) { + console.warn('Error getting settings data', err); + } + finally { + return settingsData || {}; + } + } + setSettingsData(settingsData) { + try { + localStorage.setItem(`settings${Save.key}`, JSON.stringify(settingsData)); + } + catch (err) { + console.error('Error setting settings data', err); + } + } + fromJSON(json, initial = false) { + if (!initial) { + return; + } + if (!json) { + json = { version: '0.0.0' }; + } + this.saveVersion = json.version || '0.0.0'; + this.check(); + } + toJSON() { + return { + version: this.version, + }; + } +} +// Used for moving dungeons and other stuff +// Be sure to insert from lowest index to highest index +// Example to get dungeons new index: GameConstants.getDungeonIndex('Aqua Hideout') +Update.moveIndex = (arr, to, from = Infinity, defaultVal = 0) => { + let temp = arr.splice(from, 1); + if (!temp.length) { + temp = [defaultVal]; + } + const end = arr.splice(to); + arr = [...arr, ...temp, ...end]; + return arr; +}; +// If any pokemon names change in the data rename them, +// note that name isn't used in party. +Update.changeHatcheryKey = (saveData, oldName, newName) => { + var _a, _b; + if (!saveData.breeding) { + return; + } + // Fixup eggs + (_a = saveData.breeding.eggList) === null || _a === void 0 ? void 0 : _a.forEach(egg => { + if (egg.pokemon == oldName) { + egg.pokemon = newName; + } + }); + // Fixup queue + saveData.breeding.queueList = ((_b = saveData.breeding.queueList) === null || _b === void 0 ? void 0 : _b.map(p => p == oldName ? newName : p)) || []; +}; +// Swapping or Rotating Pokemon IDs +Update.rotatePokemonIDs = (saveData, rotationlist, keepLast = true) => { + // save some characters + const s = saveData.statistics; + const lastID = rotationlist[rotationlist.length - 1]; + Update.changeHatcheryKey(saveData, lastID, 1e9); + const lastPokemon = saveData.party.caughtPokemon.find(p => p.id === lastID); + // Store values from last ID to not get overwritten + const tempIDvalues = { + // Store our last ID + storedID: lastID, + // Store our last ID statistics + statistics: [ + s.pokemonEncountered[lastID], + s.pokemonDefeated[lastID], + s.pokemonCaptured[lastID], + s.pokemonHatched[lastID], + s.shinyPokemonEncountered[lastID], + s.shinyPokemonDefeated[lastID], + s.shinyPokemonCaptured[lastID], + s.shinyPokemonHatched[lastID], + s.malePokemonEncountered[lastID], + s.malePokemonDefeated[lastID], + s.malePokemonCaptured[lastID], + s.malePokemonHatched[lastID], + s.shinyMalePokemonEncountered[lastID], + s.shinyMalePokemonDefeated[lastID], + s.shinyMalePokemonCaptured[lastID], + s.shinyMalePokemonHatched[lastID], + s.femalePokemonEncountered[lastID], + s.femalePokemonDefeated[lastID], + s.femalePokemonCaptured[lastID], + s.femalePokemonHatched[lastID], + s.shinyFemalePokemonEncountered[lastID], + s.shinyFemalePokemonDefeated[lastID], + s.shinyFemalePokemonCaptured[lastID], + s.shinyFemalePokemonHatched[lastID], + ], + }; + // Overwrite values of current ID with next ID + // Loop backwards so when rotating a -> b -> c, we don't overwrite b stats before needing them + for (let i = rotationlist.length - 1; i > 0; i--) { + const fromID = rotationlist[i - 1]; + const toID = rotationlist[i]; + Update.changeHatcheryKey(saveData, fromID, toID); + // Rotate our ID + const pokemon = saveData.party.caughtPokemon.find(p => p.id === fromID); + if (pokemon) { + pokemon.id = toID; + } + // Rotate our statistics + s.pokemonEncountered[toID] = s.pokemonEncountered[fromID]; + s.pokemonDefeated[toID] = s.pokemonDefeated[fromID]; + s.pokemonCaptured[toID] = s.pokemonCaptured[fromID]; + s.pokemonHatched[toID] = s.pokemonHatched[fromID]; + s.shinyPokemonEncountered[toID] = s.shinyPokemonEncountered[fromID]; + s.shinyPokemonDefeated[toID] = s.shinyPokemonDefeated[fromID]; + s.shinyPokemonCaptured[toID] = s.shinyPokemonCaptured[fromID]; + s.shinyPokemonHatched[toID] = s.shinyPokemonHatched[fromID]; + s.malePokemonEncountered[toID] = s.malePokemonEncountered[fromID]; + s.malePokemonDefeated[toID] = s.malePokemonDefeated[fromID]; + s.malePokemonCaptured[toID] = s.malePokemonCaptured[fromID]; + s.malePokemonHatched[toID] = s.malePokemonHatched[fromID]; + s.shinyMalePokemonEncountered[toID] = s.shinyMalePokemonEncountered[fromID]; + s.shinyMalePokemonDefeated[toID] = s.shinyMalePokemonDefeated[fromID]; + s.shinyMalePokemonCaptured[toID] = s.shinyMalePokemonCaptured[fromID]; + s.shinyMalePokemonHatched[toID] = s.shinyMalePokemonHatched[fromID]; + s.femalePokemonEncountered[toID] = s.femalePokemonEncountered[fromID]; + s.femalePokemonDefeated[toID] = s.femalePokemonDefeated[fromID]; + s.femalePokemonCaptured[toID] = s.femalePokemonCaptured[fromID]; + s.femalePokemonHatched[toID] = s.femalePokemonHatched[fromID]; + s.shinyFemalePokemonEncountered[toID] = s.shinyFemalePokemonEncountered[fromID]; + s.shinyFemalePokemonDefeated[toID] = s.shinyFemalePokemonDefeated[fromID]; + s.shinyFemalePokemonCaptured[toID] = s.shinyFemalePokemonCaptured[fromID]; + s.shinyFemalePokemonHatched[toID] = s.shinyFemalePokemonHatched[fromID]; + } + const firstID = rotationlist[0]; + // Overwrite last values with first ID + // Rotate our ID + if (lastPokemon) { + lastPokemon.id = firstID; + } + // Update last ID statistics + Update.changeHatcheryKey(saveData, 1e9, firstID); + s.pokemonEncountered[firstID] = tempIDvalues.statistics[0]; + s.pokemonDefeated[firstID] = tempIDvalues.statistics[1]; + s.pokemonCaptured[firstID] = tempIDvalues.statistics[2]; + s.pokemonHatched[firstID] = tempIDvalues.statistics[3]; + s.shinyPokemonEncountered[firstID] = tempIDvalues.statistics[4]; + s.shinyPokemonDefeated[firstID] = tempIDvalues.statistics[5]; + s.shinyPokemonCaptured[firstID] = tempIDvalues.statistics[6]; + s.shinyPokemonHatched[firstID] = tempIDvalues.statistics[7]; + s.malePokemonEncountered[firstID] = tempIDvalues.statistics[8]; + s.malePokemonDefeated[firstID] = tempIDvalues.statistics[9]; + s.malePokemonCaptured[firstID] = tempIDvalues.statistics[10]; + s.malePokemonHatched[firstID] = tempIDvalues.statistics[11]; + s.shinyMalePokemonEncountered[firstID] = tempIDvalues.statistics[12]; + s.shinyMalePokemonDefeated[firstID] = tempIDvalues.statistics[13]; + s.shinyMalePokemonCaptured[firstID] = tempIDvalues.statistics[14]; + s.shinyMalePokemonHatched[firstID] = tempIDvalues.statistics[15]; + s.femalePokemonEncountered[firstID] = tempIDvalues.statistics[16]; + s.femalePokemonDefeated[firstID] = tempIDvalues.statistics[17]; + s.femalePokemonCaptured[firstID] = tempIDvalues.statistics[18]; + s.femalePokemonHatched[firstID] = tempIDvalues.statistics[19]; + s.shinyFemalePokemonEncountered[firstID] = tempIDvalues.statistics[20]; + s.shinyFemalePokemonDefeated[firstID] = tempIDvalues.statistics[21]; + s.shinyFemalePokemonCaptured[firstID] = tempIDvalues.statistics[22]; + s.shinyFemalePokemonHatched[firstID] = tempIDvalues.statistics[23]; + if (!keepLast) { + delete s.pokemonEncountered[lastID]; + delete s.pokemonDefeated[lastID]; + delete s.pokemonCaptured[lastID]; + delete s.pokemonHatched[lastID]; + delete s.shinyPokemonEncountered[lastID]; + delete s.shinyPokemonDefeated[lastID]; + delete s.shinyPokemonCaptured[lastID]; + delete s.shinyPokemonHatched[lastID]; + delete s.malePokemonEncountered[lastID]; + delete s.malePokemonDefeated[lastID]; + delete s.malePokemonCaptured[lastID]; + delete s.malePokemonHatched[lastID]; + delete s.shinyMalePokemonEncountered[lastID]; + delete s.shinyMalePokemonDefeated[lastID]; + delete s.shinyMalePokemonCaptured[lastID]; + delete s.shinyMalePokemonHatched[lastID]; + delete s.femalePokemonEncountered[lastID]; + delete s.femalePokemonDefeated[lastID]; + delete s.femalePokemonCaptured[lastID]; + delete s.femalePokemonHatched[lastID]; + delete s.shinyFemalePokemonEncountered[lastID]; + delete s.shinyFemalePokemonDefeated[lastID]; + delete s.shinyFemalePokemonCaptured[lastID]; + delete s.shinyFemalePokemonHatched[lastID]; + } +}; +Update.startQuestLine = (saveData, questLineName) => { + const questLine = saveData.quests.questLines.find(ql => ql.name == questLineName); + if (questLine) { + // Set to started if not yet started, otherwise leave in it's current state + questLine.state = questLine.state == 0 ? 1 : questLine.state; + } + else { + // Push the quest, doesn't exist in save data yet + saveData.quests.questLines.push({ state: 1, name: questLineName, quest: 0 }); + } +}; +// Use setBattleState as 0 or 1 to manipulate battles to what status they should be based on related questline progress. +Update.fixTempBattleState = (saveData, battleIndex, setBattleState, questLineName, questStep) => { + const ql = saveData.quests.questLines.find((q) => q.name === questLineName); + if (!ql) { + return; + } + if (setBattleState === 1) { + // set to complete if related questline/step is completed + if (ql.state === 2 || ql.quest > questStep) { + saveData.statistics.temporaryBattleDefeated[battleIndex] = 1; + } + } + if (setBattleState === 0) { + // set to not complete if related questline/step isn't complete + if (ql.state < 2 && ql.quest <= questStep) { + saveData.statistics.temporaryBattleDefeated[battleIndex] = 0; + } + } +}; +/** + * TODO refactor this to no longer be global but App properties. + * Will be done after the major player refactor. + */ +let player; +/** + * Start the application when all html elements are loaded. + */ +document.addEventListener('DOMContentLoaded', () => { + try { + const settings = localStorage.getItem('settings'); + Settings.fromJSON(JSON.parse(settings)); + document.body.className = `no-select ${Settings.getSetting('theme').observableValue()} ${Settings.getSetting('backgroundImage').observableValue()}`; + document.getElementById('theme-link').href = `https://bootswatch.com/4/${Settings.getSetting('theme').observableValue()}/bootstrap.min.css`; + } + catch (e) { } + if (!App.isUsingClient) { + document.getElementById('use-our-client-message').style.display = 'block'; + } + // Load list of saves + SaveSelector.loadSaves(); +}); +// Nested modals can be opened while they are in the middle of hiding. +// This should raise their backdrop on top of any existing modals, +// preventing us from getting into that messy situation. +// Copied from https://stackoverflow.com/questions/19305821/multiple-modals-overlay#answer-24914782 +$(document).on('show.bs.modal', '.modal', function () { + const zIndex = Math.max(1040, Math.max(...$('.modal:visible').get().map(e => +e.style.zIndex)) + 10); + $(this).css('z-index', zIndex); + // setTimeout with 0 delay because the backdrop doesn't exist yet + setTimeout(() => { + $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack'); + }, 0); +}); +/// +/// +/// +class AchievementHandler { + static setNavigateIndex(index) { + if (index < 0 || index >= AchievementHandler.numberOfTabs()) { + return; + } + AchievementHandler.navigateIndex(index); + Settings.setSettingByName('achievementsPage', index); + } + static navigateRight() { + this.setNavigateIndex(AchievementHandler.navigateIndex() + 1); + } + static navigateLeft() { + this.setNavigateIndex(AchievementHandler.navigateIndex() - 1); + } + static isNavigateDirectionDisabled(navigateBackward) { + return navigateBackward + ? this.navigateIndex() === 0 + : this.navigateIndex() + 1 === this.numberOfTabs(); + } + static calculateNumberOfTabs() { + this.numberOfTabs(Math.max(1, Math.ceil(this.achievementListFiltered().length / 10))); + } + static getAchievementListWithIndex() { + return this.achievementSortedList().slice(this.navigateIndex() * 10, (this.navigateIndex() * 10) + 10); + } + static filterAchievementList(retainPage = false) { + this.achievementListFiltered(this.achievementList.filter((a) => (a.category.isUnlocked() && + a.achievable() && + (this.filter.status() == -2 || a.unlocked() === !!this.filter.status()) && + (this.filter.type() == -2 || a.property.achievementType === this.filter.type()) && + (this.filter.category() == 'all' || a.category.name === this.filter.category())))); + this.calculateNumberOfTabs(); + if (!retainPage) { + this.setNavigateIndex(0); + } + else if (this.getAchievementListWithIndex().length === 0 && this.navigateIndex() > 0) { + this.setNavigateIndex(this.numberOfTabs() - 1); + } + } + static compareBy(option, direction) { + return function (a, b) { + let res, dir = (direction) ? -1 : 1; + const config = AchievementSortOptionConfigs[option]; + const aValue = config.getValue(a); + const bValue = config.getValue(b); + if (config.invert) { + dir *= -1; + } + //Compare by provided property + if (aValue == bValue) { + //If they are equal according to provided property, sort by name + return a.name.localeCompare(b.name); + } + else if (aValue < bValue) { + res = -1; + } + else if (aValue > bValue) { + res = 1; + } + else { + res = 0; + } + return res * dir; + }; + } + static preCheckAchievements() { + AchievementHandler.filterAchievementList(); + // Check if our achievements are completed, we don't want to re-notify if already done + for (let i = 0; i < AchievementHandler.achievementList.length; i++) { + AchievementHandler.achievementList[i].unlocked(AchievementHandler.achievementList[i].isCompleted()); + } + AchievementHandler.updateAchievementBonus(); + } + static checkAchievements() { + let updateBonus = false; + for (let i = 0; i < AchievementHandler.achievementList.length; i++) { + if (!AchievementHandler.achievementList[i].unlocked()) { + const unlocked = AchievementHandler.achievementList[i].check(); + if (unlocked) { + updateBonus = true; + } + } + } + if (updateBonus) { + AchievementHandler.updateAchievementBonus(); + } + } + static toJSON() { + // Saves only achievements which have already been completed but currently don't have their requirements met + const storage = AchievementHandler.achievementList.filter(a => a.unlocked() && !a.property.isCompleted()).map(a => a.name); + return storage; + } + static fromJSON(unlockedAchievements) { + unlockedAchievements === null || unlockedAchievements === void 0 ? void 0 : unlockedAchievements.forEach(achName => { + var _a; + (_a = AchievementHandler.findByName(achName)) === null || _a === void 0 ? void 0 : _a.unlocked(true); + }); + } + static addAchievement(name, description, property, bonus, category = GameConstants.ExtraAchievementCategories.global, achievableFunction = null) { + let categoryObj; + // ExtraAchievementCategory always starts at finals index + if (category >= GameConstants.Region.final) { + categoryObj = AchievementHandler.getAchievementCategoryByExtraCategory(category); + } + else { + categoryObj = AchievementHandler.getAchievementCategoryByRegion(category); + } + categoryObj.totalWeight += bonus; + AchievementHandler.achievementList.push(new Achievement(name, description, property, bonus, categoryObj, achievableFunction)); + } + static calculateBonus() { + AchievementHandler.achievementList.forEach((achievement) => { + if (!achievement.achievable()) { + return 0; + } + achievement.bonus = (achievement.bonusWeight / achievement.category.totalWeight) * achievement.category.achievementBonus; + }); + } + static calculateMaxBonus() { + AchievementHandler.getAchievementCategories().forEach(category => { + category.totalWeight = AchievementHandler.achievementList.filter(a => a.category == category && a.achievable()).reduce((sum, a) => sum + a.bonusWeight, 0); + }); + AchievementHandler.calculateBonus(); + AchievementHandler.updateAchievementBonus(); + } + static achievementBonus() { + return AchievementHandler._cachedAchievementBonus(); + } + static updateAchievementBonus() { + let sum = 0; + AchievementHandler.getAchievementCategories().forEach(category => { + const total = AchievementHandler.achievementList.filter(a => { + return a.category == category && a.isCompleted(); + }).reduce((sum, a) => sum + a.bonusWeight, 0) / category.totalWeight * category.achievementBonus / 100; + if (!isNaN(total)) { + sum += total; + } + }); + AchievementHandler._cachedAchievementBonus(sum); + } + static achievementBonusPercent() { + return `${AchievementHandler.achievementBonus().toLocaleString('en-US', { style: 'percent', minimumFractionDigits: 2, maximumFractionDigits: 2 })}`; + } + static findByName(name) { + return AchievementHandler.achievementList.find((achievement) => achievement.name === name && achievement.achievable()); + } + static getAchievementCategories() { + if (AchievementHandler._achievementCategories) { + return AchievementHandler._achievementCategories; + } + const categories = GameHelper.enumStrings(GameConstants.Region).filter(r => r != 'none' && r != 'final').map(r => new AchievementCategory(r, 100, () => player.highestRegion() >= GameConstants.Region[r])); + categories.push(new AchievementCategory(GameConstants.ExtraAchievementCategories[GameConstants.ExtraAchievementCategories.global], 150, () => true)); + categories.push(new AchievementCategory(GameConstants.ExtraAchievementCategories[GameConstants.ExtraAchievementCategories.sevii], 50, () => SubRegions.isSubRegionUnlocked(GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123))); + categories.push(new AchievementCategory(GameConstants.ExtraAchievementCategories[GameConstants.ExtraAchievementCategories.orre], 75, () => SubRegions.isSubRegionUnlocked(GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre))); + categories.push(new AchievementCategory(GameConstants.ExtraAchievementCategories[GameConstants.ExtraAchievementCategories.magikarpJump], 25, () => SubRegions.isSubRegionUnlocked(GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump))); + AchievementHandler._achievementCategories = categories; + return categories; + } + static getAchievementCategoryByRegion(region) { + return AchievementHandler.getAchievementCategories().find(c => c.name == GameConstants.Region[region]); + } + static getAchievementCategoryByExtraCategory(category) { + return AchievementHandler.getAchievementCategories().find(c => c.name == GameConstants.ExtraAchievementCategories[category]); + } + static initialize(multiplier, challenges) { + /* + * GENERAL + */ + AchievementHandler.addAchievement('My First Hundo', 'Obtain 100 Pokédollars.', new MoneyRequirement(100), 0.05); + AchievementHandler.addAchievement('I Should Buy a Poké Mart', 'Obtain 1,000 Pokédollars.', new MoneyRequirement(1000), 0.10); + AchievementHandler.addAchievement('A Small Fortune', 'Obtain 10,000 Pokédollars.', new MoneyRequirement(10000), 0.15); + AchievementHandler.addAchievement('Annual Wage', 'Obtain 100,000 Pokédollars.', new MoneyRequirement(100000), 0.20); + AchievementHandler.addAchievement('Pfft, I Don\'t Need a Bike Voucher', 'Obtain 1,000,000 Pokédollars.', new MoneyRequirement(1000000), 0.25); + AchievementHandler.addAchievement('A Billion Poképennies', 'Obtain 10,000,000 Pokédollars.', new MoneyRequirement(10000000), 0.3); + AchievementHandler.addAchievement('Ready To Retire', 'Obtain 1,000,000,000 Pokédollars.', new MoneyRequirement(1000000000), 0.4); + AchievementHandler.addAchievement('I Should Go to Space...', 'Obtain 100,000,000,000 Pokédollars.', new MoneyRequirement(100000000000), 0.6); + AchievementHandler.addAchievement('Dungeon Time', 'Obtain 100 Dungeon Tokens.', new TokenRequirement(100), 0.05); + AchievementHandler.addAchievement('Token Collector', 'Obtain 1,000 Dungeon Tokens.', new TokenRequirement(1000), 0.10); + AchievementHandler.addAchievement('Dungeon Grinder', 'Obtain 10,000 Dungeon Tokens.', new TokenRequirement(10000), 0.15); + AchievementHandler.addAchievement('Dungeon Master', 'Obtain 100,000 Dungeon Tokens.', new TokenRequirement(100000), 0.20); + AchievementHandler.addAchievement('Dungeon Legend', 'Obtain 1,000,000 Dungeon Tokens.', new TokenRequirement(1000000), 0.25); + AchievementHandler.addAchievement('Dungeon Myth', 'Obtain 100,000,000 Dungeon Tokens.', new TokenRequirement(100000000), 0.3); + AchievementHandler.addAchievement('Dungeon God', 'Obtain 10,000,000,000 Dungeon Tokens.', new TokenRequirement(10000000000), 0.6); + AchievementHandler.addAchievement('Farm Master', 'Obtain 100,000 Farm Points.', new FarmPointsRequirement(100000), 0.20); + AchievementHandler.addAchievement('Farm Legend', 'Obtain 1,000,000 Farm Points.', new FarmPointsRequirement(1000000), 0.30); + AchievementHandler.addAchievement('Farm Myth', 'Obtain 20,000,000 Farm Points.', new FarmPointsRequirement(20000000), 0.60); + AchievementHandler.addAchievement('Startin\' Out', 'Capture your first Pokémon.', new CaughtPokemonRequirement(1), 0.01); + AchievementHandler.addAchievement('Better Than Season 1 Ash', 'Capture 15 unique Pokémon.', new CaughtPokemonRequirement(15), 0.05); + AchievementHandler.addAchievement('Wonderful! Do You Like To Collect Things?', 'Capture 50 unique Pokémon.', new CaughtPokemonRequirement(50), 0.10); + AchievementHandler.addAchievement('Surpassing Ash', 'Capture 100 unique Pokémon.', new CaughtPokemonRequirement(100), 0.20); + AchievementHandler.addAchievement('Enough for a Zoo', 'Capture 500 unique Pokémon.', new CaughtPokemonRequirement(500), 0.30); + AchievementHandler.addAchievement('The PC Will Be Filled', 'Capture 1,000 unique Pokémon.', new CaughtPokemonRequirement(1000), 0.40); + AchievementHandler.addAchievement('I\'d Rather Be Shiny', 'Capture your first Shiny Pokémon.', new ShinyPokemonRequirement(1), 0.03); + AchievementHandler.addAchievement('These Pokémon Must Be Sick', 'Capture 10 unique Shiny Pokémon.', new ShinyPokemonRequirement(10), 0.06); + AchievementHandler.addAchievement('Why Am I Doing This?', 'Capture 20 unique Shiny Pokémon.', new ShinyPokemonRequirement(20), 0.09); + AchievementHandler.addAchievement('Why Am I Still Doing This?!', 'Capture 30 unique Shiny Pokémon.', new ShinyPokemonRequirement(30), 0.12); + AchievementHandler.addAchievement('Okay Fine, I Can Do a Few More', 'Capture 40 unique Shiny Pokémon.', new ShinyPokemonRequirement(40), 0.15); + AchievementHandler.addAchievement('Where Did All the Shiny Pokémon Go?', 'Capture 50 unique Shiny Pokémon.', new ShinyPokemonRequirement(50), 0.30); + AchievementHandler.addAchievement('Nvm, Found Some More', 'Capture 75 unique Shiny Pokémon.', new ShinyPokemonRequirement(75), 0.45); + AchievementHandler.addAchievement('Just Keep Swimming Just Keep Swimming - Oooo Shiny!', 'Capture 100 unique Shiny Pokémon.', new ShinyPokemonRequirement(100), 0.60); + AchievementHandler.addAchievement('I Don\'t Know if I Can Handle the Next Batch of Shinies', 'Capture 151 unique Shiny Pokémon!', new ShinyPokemonRequirement(151), 1.00); + AchievementHandler.addAchievement('Will Need Sunglasses', 'Capture 250 unique Shiny Pokémon!', new ShinyPokemonRequirement(250), 1.20); + AchievementHandler.addAchievement('What Were the Odds Again?', 'Capture 500 unique Shiny Pokémon!', new ShinyPokemonRequirement(500), 1.30); + AchievementHandler.addAchievement('Non-Shiny Is Now Becoming Rare', 'Capture 1,000 unique Shiny Pokémon!', new ShinyPokemonRequirement(1000), 1.50); + AchievementHandler.addAchievement('First Team', 'Capture 100 Pokémon.', new CapturedRequirement(100), 0.05); + AchievementHandler.addAchievement('Filling the PC', 'Capture 1,000 Pokémon.', new CapturedRequirement(1000), 0.10); + AchievementHandler.addAchievement('Pokémon Army', 'Capture 10,000 Pokémon.', new CapturedRequirement(10000), 0.15); + AchievementHandler.addAchievement('Pokémon Collector', 'Capture 100,000 Pokémon.', new CapturedRequirement(100000), 0.25); + AchievementHandler.addAchievement('You Get a Pokémon, You Get a Pokémon, Everyone Gets a Pokémon!', 'Capture 1,000,000 Pokémon.', new CapturedRequirement(1000000), 0.50); + AchievementHandler.addAchievement('A Long Road Ahead', 'Defeat 100 Pokémon.', new DefeatedRequirement(100), 0.05); + AchievementHandler.addAchievement('Highway to Pallet Town', 'Defeat 1,000 Pokémon.', new DefeatedRequirement(1000), 0.10); + AchievementHandler.addAchievement('Overleveled', 'Defeat 10,000 Pokémon.', new DefeatedRequirement(10000), 0.15); + AchievementHandler.addAchievement('The Cake Is a Lie, but the Grind Is Real', 'Defeat 100,000 Pokémon.', new DefeatedRequirement(100000), 0.25); + AchievementHandler.addAchievement('Are There Any Left?', 'Defeat 1,000,000 Pokémon.', new DefeatedRequirement(1000000), 0.50); + AchievementHandler.addAchievement('Basic Trainer', 'Have 100 Attack.', new AttackRequirement(100), 0.05); + AchievementHandler.addAchievement('Improving', 'Have 1,000 Attack.', new AttackRequirement(1000), 0.10); + AchievementHandler.addAchievement('An Unrelenting Force', 'Have 5,000 Attack.', new AttackRequirement(5000), 0.15); + AchievementHandler.addAchievement('FUS RO DAH', 'Have 10,000 Attack.', new AttackRequirement(10000), 0.20); + AchievementHandler.addAchievement('OK, I Have Enough Attack Already...', 'Have 25,000 Attack.', new AttackRequirement(25000), 0.25); + AchievementHandler.addAchievement('Silver Attack Button!', 'Have 100,000 Attack.', new AttackRequirement(100000), 0.30); + AchievementHandler.addAchievement('Pesky Roamers, I Need to One-Shot Routes for Them...', 'Have 250,000 Attack.', new AttackRequirement(250000), 0.35); + AchievementHandler.addAchievement('You Pressed F12 by Any Chance?', 'Have 500,000 Attack.', new AttackRequirement(500000), 0.40); + AchievementHandler.addAchievement('Left-Left-Right-Right-A-B-A-B - Hey, 1 Million!', 'Have 1,000,000 Attack.', new AttackRequirement(1000000), 0.40); + AchievementHandler.addAchievement('Can I Beat Diantha Yet?', 'Have 5,000,000 Attack.', new AttackRequirement(5000000), 0.45); + AchievementHandler.addAchievement('No One Can Challenge Me!', 'Have 20,000,000 Attack.', new AttackRequirement(20000000), 0.60); + AchievementHandler.addAchievement('A Few Clicks In', 'Click Attack 10 times.', new ClickRequirement(10, 1), 0.02, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableClickAttack.active()); + AchievementHandler.addAchievement('Clicking Pro', 'Click Attack 100 times.', new ClickRequirement(100, 1), 0.05, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableClickAttack.active()); + AchievementHandler.addAchievement('Ultra Clicker', 'Click Attack 1,000 times.', new ClickRequirement(1000, 1), 0.10, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableClickAttack.active()); + AchievementHandler.addAchievement('Need a New Mouse Yet?', 'Click Attack 10,000 times.', new ClickRequirement(10000, 1), 0.25, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableClickAttack.active()); + AchievementHandler.addAchievement('Why Is My Voltorb Upside Down?', 'Purchase your first Poké Ball.', new PokeballRequirement(1, GameConstants.Pokeball.Pokeball), 0.01); + AchievementHandler.addAchievement('Starting a Collection', 'Purchase 10 Poké Balls.', new PokeballRequirement(10, GameConstants.Pokeball.Pokeball), 0.03); + AchievementHandler.addAchievement('Stocking Up', 'Purchase 100 Poké Balls.', new PokeballRequirement(100, GameConstants.Pokeball.Pokeball), 0.05); + AchievementHandler.addAchievement('Fully Stocked', 'Purchase 1,000 Poké Balls.', new PokeballRequirement(1000, GameConstants.Pokeball.Pokeball), 0.10); + AchievementHandler.addAchievement('Maybe Just a Few More for the Bunker', 'Purchase 10,000 Poké Balls.', new PokeballRequirement(10000, GameConstants.Pokeball.Pokeball), 0.15); + AchievementHandler.addAchievement('Doomsday Bunker Stocked With Poké Balls!', 'Purchase 100,000 Poké Balls.', new PokeballRequirement(100000, GameConstants.Pokeball.Pokeball), 0.20); + AchievementHandler.addAchievement('Ooooo a Blue One!', 'Purchase your first Great Ball.', new PokeballRequirement(1, GameConstants.Pokeball.Greatball), 0.03); + AchievementHandler.addAchievement('I Got a Few Shiny Voltorb! Oh, Wait...', 'Obtain 10 Great Balls.', new PokeballRequirement(10, GameConstants.Pokeball.Greatball), 0.05); + AchievementHandler.addAchievement('Now Shinies Won\'t Run Away So Easily!', 'Obtain 100 Great Balls.', new PokeballRequirement(100, GameConstants.Pokeball.Greatball), 0.10); + AchievementHandler.addAchievement('Regular Poké Balls Just Aren\'t What They Used To Be', 'Obtain 1,000 Great Balls.', new PokeballRequirement(1000, GameConstants.Pokeball.Greatball), 0.15); + AchievementHandler.addAchievement('A Great Investment', 'Obtain 10,000 Great Balls.', new PokeballRequirement(10000, GameConstants.Pokeball.Greatball), 0.20); + AchievementHandler.addAchievement('The Greatest Collection of All Time', 'Obtain 100,000 Great Balls.', new PokeballRequirement(100000, GameConstants.Pokeball.Greatball), 0.30); + AchievementHandler.addAchievement('They Made One Even Better?', 'Obtain your first Ultra Ball.', new PokeballRequirement(1, GameConstants.Pokeball.Ultraball), 0.05); + AchievementHandler.addAchievement('Let\'s See How High the Catch Rate Becomes', 'Obtain 10 Ultra Balls.', new PokeballRequirement(10, GameConstants.Pokeball.Ultraball), 0.10); + AchievementHandler.addAchievement('This Should Be Enough for Those Elusive Roamers...', 'Obtain 100 Ultra Balls.', new PokeballRequirement(100, GameConstants.Pokeball.Ultraball), 0.15); + AchievementHandler.addAchievement('They Don\'t Work on Ultra Beasts? That\'s False Advertising!', 'Obtain 1,000 Ultra Balls.', new PokeballRequirement(1000, GameConstants.Pokeball.Ultraball), 0.20); + AchievementHandler.addAchievement('I Don\'t Think I\'ll Ever Be Able To Go Back to the Commoner\'s Great Ball', 'Obtain 10,000 Ultra Balls.', new PokeballRequirement(10000, GameConstants.Pokeball.Ultraball), 0.30); + AchievementHandler.addAchievement('Just Making Sure No Rare Pokémon Flees', 'Obtain 100,000 Ultra Balls.', new PokeballRequirement(100000, GameConstants.Pokeball.Ultraball), 0.40); + AchievementHandler.addAchievement('The Ultimate Catching Device', 'Obtain your first Master Ball.', new PokeballRequirement(1, GameConstants.Pokeball.Masterball), 0.20); + AchievementHandler.addAchievement('Legendaries Hate That Guy', 'Obtain 10 Master Balls.', new PokeballRequirement(10, GameConstants.Pokeball.Masterball), 0.30); + AchievementHandler.addAchievement('No Pokémon in the World Can Run Away From Me Now!', 'Obtain 100 Master Balls.', new PokeballRequirement(100, GameConstants.Pokeball.Masterball), 0.40); + AchievementHandler.addAchievement('Can You Do This for Me?', 'Complete your first quest.', new QuestRequirement(1), 0.05); + AchievementHandler.addAchievement('One More Favor', 'Complete 10 quests.', new QuestRequirement(10), 0.15); + AchievementHandler.addAchievement('YES MAN!', 'Complete 100 quests.', new QuestRequirement(100), 0.25); + AchievementHandler.addAchievement('I Just Love Green Coins', 'Complete 1,000 quests.', new QuestRequirement(1000), 0.4); + AchievementHandler.addAchievement('I Want To Be Ready for the Next Region', 'Complete 5,000 quests.', new QuestRequirement(5000), 0.6); + AchievementHandler.addAchievement('Oh, Another Quest Slot!', 'Reach Quest Level 5.', new QuestLevelRequirement(5), 0.2); + AchievementHandler.addAchievement('I Am Getting Good at Questing!', 'Reach Quest Level 10.', new QuestLevelRequirement(10), 0.3); + AchievementHandler.addAchievement('What Do I Gain From Leveling This?', 'Reach Quest Level 20.', new QuestLevelRequirement(20), 0.5); + AchievementHandler.addAchievement('Quest Master', 'Reach Quest Level 30.', new QuestLevelRequirement(30), 0.8); + AchievementHandler.addAchievement('Is That How I Use This?', 'Level 1 Oak Item to the maximum level.', new MaxLevelOakItemRequirement(1), 0.05, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableOakItems.active()); + AchievementHandler.addAchievement('I\'ve Got My Hands Full With All of These', 'Level 3 Oak Items to the maximum level.', new MaxLevelOakItemRequirement(3), 0.1, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableOakItems.active()); + AchievementHandler.addAchievement('Professor Oak Is the Best!', 'Level 8 Oak Items to the maximum level.', new MaxLevelOakItemRequirement(8), 0.14, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableOakItems.active()); + AchievementHandler.addAchievement('Almost Prepared for Anything', 'Level 11 Oak Items to the maximum level.', new MaxLevelOakItemRequirement(11), 0.18, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableOakItems.active() && challenges.list.disableClickAttack.active()); + AchievementHandler.addAchievement('Prepared for Anything!', 'Level all 12 Oak Items to the maximum level.', new MaxLevelOakItemRequirement(12), 0.18, GameConstants.ExtraAchievementCategories.global, () => !challenges.list.disableOakItems.active() && !challenges.list.disableClickAttack.active()); + AchievementHandler.addAchievement('Pokémon Nursery', 'Hatch your first egg.', new HatchRequirement(1), 0.01); + AchievementHandler.addAchievement('A Lot of Running', 'Hatch 10 eggs.', new HatchRequirement(10), 0.04); + AchievementHandler.addAchievement('Marathon Runner', 'Hatch 100 eggs.', new HatchRequirement(100), 0.15); + AchievementHandler.addAchievement('Egg Factory', 'Hatch 1,000 eggs.', new HatchRequirement(1000), 0.3); + AchievementHandler.addAchievement('Official Easter Bunny', 'Hatch 10,000 eggs.', new HatchRequirement(10000), 0.4); + AchievementHandler.addAchievement('What Do You Do With All the Eggshells?', 'Hatch 100,000 eggs.', new HatchRequirement(100000), 0.5); + AchievementHandler.addAchievement('Day Care Is My Home', 'Hatch 250,000 eggs.', new HatchRequirement(250000), 0.7); + AchievementHandler.addAchievement('Some Nice Help for the Day Care', 'Unlock 5 Hatchery Helpers.', new HatcheryHelperRequirement(5, 0), 0.1); + AchievementHandler.addAchievement('Why Do They Have To Work in Shifts?', 'Unlock 11 Hatchery Helpers.', new HatcheryHelperRequirement(11, 0), 0.3); + AchievementHandler.addAchievement('My Loyal Helpers', 'Get 3 Hatchery Helpers to 10% bonus efficiency.', new HatcheryHelperRequirement(3, 10), 0.4); + AchievementHandler.addAchievement('Let\'s Try Some Other Helpers Too?', 'Get 5 Hatchery Helpers to 10% bonus efficiency.', new HatcheryHelperRequirement(5, 10), 0.5); + AchievementHandler.addAchievement('Sam Just Wants To Help', 'Get 10 Hatchery Helpers to 10% bonus efficiency.', new HatcheryHelperRequirement(10, 10), 1); + AchievementHandler.addAchievement('When Are You Going to Breed Yourself?', 'Get 10 Hatchery Helpers to 25% bonus efficiency.', new HatcheryHelperRequirement(10, 25), 1.3); + AchievementHandler.addAchievement('My New Dirty Hobby', 'Unlock 3 Plots in the Farm.', new FarmPlotsUnlockedRequirement(3), 0.05); + AchievementHandler.addAchievement('Allotment Gardener', 'Unlock 9 Plots in the Farm.', new FarmPlotsUnlockedRequirement(9), 0.15); + AchievementHandler.addAchievement('Horticulture', 'Unlock all 25 Plots in the Farm.', new FarmPlotsUnlockedRequirement(25), 0.25); + AchievementHandler.addAchievement('Who Planted These Here?', 'Unlock 8 Berries.', new BerriesUnlockedRequirement(8), 0.1); + AchievementHandler.addAchievement('Farmer in Training', 'Unlock 18 Berries.', new BerriesUnlockedRequirement(18), 0.2); + AchievementHandler.addAchievement('Farming Apprentice', 'Unlock 36 Berries.', new BerriesUnlockedRequirement(36), 0.3); + AchievementHandler.addAchievement('Master Farmer', 'Unlock all 69 Berries.', new BerriesUnlockedRequirement(69), 0.4); + AchievementHandler.addAchievement('Getting Some Help at the Farm', 'Unlock 3 Farm Hands.', new FarmHandRequirement(3), 0.2); + AchievementHandler.addAchievement('Starting a Farming Empire', 'Unlock 6 Farm Hands.', new FarmHandRequirement(6), 0.3); + AchievementHandler.addAchievement('Will I Ever Need All This Help?', 'Unlock all 9 Farm Hands.', new FarmHandRequirement(9), 0.4); + AchievementHandler.addAchievement('Bling', 'Obtain 100 Diamonds.', new DiamondRequirement(100), 0.05); + AchievementHandler.addAchievement('Bling x10!', 'Obtain 1,000 Diamonds.', new DiamondRequirement(1000), 0.15); + AchievementHandler.addAchievement('If You Like It, Then You Should\'ve Put a Ring on It', 'Obtain 10,000 Diamonds.', new DiamondRequirement(10000), 0.25); + AchievementHandler.addAchievement('Just Keep Trading!', 'Obtain 25,000 Diamonds.', new DiamondRequirement(25000), 0.4); + AchievementHandler.addAchievement('Got All Upgrades Yet?', 'Obtain 100,000 Diamonds.', new DiamondRequirement(100000), 0.6); + AchievementHandler.addAchievement('Is My Thumb Green Yet?', 'Dig up an item in the Underground for the first time.', new UndergroundItemsFoundRequirement(1), 0.01); + AchievementHandler.addAchievement('My Shovel Is Starting To Crack', 'Dig up 10 items in the Underground.', new UndergroundItemsFoundRequirement(10), 0.02); + AchievementHandler.addAchievement('Why Can\'t I Make a Diamond Shovel?', 'Dig up 100 items in the Underground.', new UndergroundItemsFoundRequirement(100), 0.08); + AchievementHandler.addAchievement('This Is Definitely Not Minecraft', 'Dig up 1,000 items in the Underground.', new UndergroundItemsFoundRequirement(1000), 0.1); + AchievementHandler.addAchievement('I Wonder How Much Is Down There...', 'Dig up 10,000 items in the Underground.', new UndergroundItemsFoundRequirement(10000), 0.4); + AchievementHandler.addAchievement('The Earth Is Like Onions', 'Dig deeper into the Underground for the first time.', new UndergroundLayersMinedRequirement(1), 0.01); + AchievementHandler.addAchievement('This Takes Foreverrrrrrr', 'Dig deeper into the Underground 10 times.', new UndergroundLayersMinedRequirement(10), 0.03); + AchievementHandler.addAchievement('DigDug Ain\'t Got Nothin\' on Me', 'Dig deeper into the Underground 100 times.', new UndergroundLayersMinedRequirement(100), 0.1); + AchievementHandler.addAchievement('Both My Thumbs Are Green! This Can\'t Be Healthy', 'Dig deeper into the Underground 1,000 times.', new UndergroundLayersMinedRequirement(1000), 0.3); + AchievementHandler.addAchievement('Let\'s Try This Out', 'Obtain your first Vitamin.', new VitaminObtainRequirement(1), 0.01); + AchievementHandler.addAchievement('Pre-Workout Supplements', 'Obtain 5 Vitamins.', new VitaminObtainRequirement(5), 0.02); + AchievementHandler.addAchievement('Well-Stocked Medicine Cabinet', 'Obtain 10 Vitamins.', new VitaminObtainRequirement(10), 0.04); + AchievementHandler.addAchievement('I Can\'t Hold All These Vitamins!', 'Obtain 50 Vitamins.', new VitaminObtainRequirement(50), 0.08); + AchievementHandler.addAchievement('Essential Nutrients', 'Obtain 100 Vitamins.', new VitaminObtainRequirement(100), 0.10); + AchievementHandler.addAchievement('Putting the \'Bulk\' in Bulk-Buy', 'Obtain 500 Vitamins.', new VitaminObtainRequirement(500), 0.15); + AchievementHandler.addAchievement('Vitamin Stockpile', 'Obtain 1,000 Vitamins.', new VitaminObtainRequirement(1000), 0.20); + AchievementHandler.addAchievement('Fish, Eggs, Nuts, and Cheese', 'Obtain 5,000 Vitamins.', new VitaminObtainRequirement(5000), 0.35); + AchievementHandler.addAchievement('Does This Powder Come With Flavours?', 'Obtain 10,000 Vitamins.', new VitaminObtainRequirement(10000), 0.50); + AchievementHandler.addAchievement('A Literal Mountain of Muscle', 'Obtain 50,000 Vitamins.', new VitaminObtainRequirement(50000), 0.70); + AchievementHandler.addAchievement('Fighting Novice', 'Complete stage 100 in the Battle Frontier.', new BattleFrontierHighestStageRequirement(100), 0.05); + AchievementHandler.addAchievement('Competent Fighter', 'Complete stage 250 in the Battle Frontier.', new BattleFrontierHighestStageRequirement(250), 0.15); + AchievementHandler.addAchievement('Unstoppable Fighting Machine', 'Complete stage 500 in the Battle Frontier.', new BattleFrontierHighestStageRequirement(500), 0.25); + AchievementHandler.addAchievement('Living Legend', 'Complete stage 1,000 in the Battle Frontier.', new BattleFrontierHighestStageRequirement(1000), 0.4); + AchievementHandler.addAchievement('Where Do They Find These Trainers?', 'Complete stage 2,000 in the Battle Frontier.', new BattleFrontierHighestStageRequirement(2000), 0.5); + AchievementHandler.addAchievement('Keep On Fighting', 'Complete 500 total stages in the Battle Frontier.', new BattleFrontierTotalStageRequirement(500), 0.05); + AchievementHandler.addAchievement('Uphill Battle', 'Complete 1,000 total stages in the Battle Frontier.', new BattleFrontierTotalStageRequirement(1000), 0.15); + AchievementHandler.addAchievement('Don\'t Stop Trying', 'Complete 2,500 total stages in the Battle Frontier.', new BattleFrontierTotalStageRequirement(2500), 0.25); + AchievementHandler.addAchievement('Need More Battle Points', 'Complete 5,000 total stages in the Battle Frontier.', new BattleFrontierTotalStageRequirement(5000), 0.4); + AchievementHandler.addAchievement('I Can Do It This Time!', 'Complete 25,000 total stages in the Battle Frontier.', new BattleFrontierTotalStageRequirement(25000), 0.5); + AchievementHandler.addAchievement('King of the Hill', 'Complete 100,000 total stages in the Battle Frontier.', new BattleFrontierTotalStageRequirement(100000), 0.7); + AchievementHandler.addAchievement('I Hope It\'s Not Dangerous', 'Infect 20 Pokémon with Pokérus.', new PokerusStatusRequirement(20, GameConstants.Pokerus.Infected), 0.1); + AchievementHandler.addAchievement('Any Way To Get Rid of It?', 'Infect 50 Pokémon with Pokérus.', new PokerusStatusRequirement(50, GameConstants.Pokerus.Infected), 0.2); + AchievementHandler.addAchievement('It Is the Flu Season', 'Infect 100 Pokémon with Pokérus.', new PokerusStatusRequirement(100, GameConstants.Pokerus.Infected), 0.3); + AchievementHandler.addAchievement('Where Is Nurse Joy?', 'Infect 250 Pokémon with Pokérus.', new PokerusStatusRequirement(250, GameConstants.Pokerus.Infected), 0.4); + AchievementHandler.addAchievement('Infecting the Whole World', 'Infect 1,000 Pokémon with Pokérus.', new PokerusStatusRequirement(1000, GameConstants.Pokerus.Infected), 0.5); + AchievementHandler.addAchievement('Curing Them One at a Time', 'Have 10 Pokémon Resistant to Pokérus.', new PokerusStatusRequirement(10, GameConstants.Pokerus.Resistant), 0.3); + AchievementHandler.addAchievement('Pokémon Center Regular', 'Have 50 Pokémon Resistant to Pokérus.', new PokerusStatusRequirement(50, GameConstants.Pokerus.Resistant), 0.5); + AchievementHandler.addAchievement('Doctor in Training', 'Have 250 Pokémon Resistant to Pokérus.', new PokerusStatusRequirement(250, GameConstants.Pokerus.Resistant), 1); + AchievementHandler.addAchievement('I Should Open My Own Pokémon Center', 'Have 500 Pokémon Resistant to Pokérus.', new PokerusStatusRequirement(500, GameConstants.Pokerus.Resistant), 1.5); + AchievementHandler.addAchievement('In the Shadow of Giants', 'Capture your first Shadow Pokémon', new ShadowPokemonRequirement(1), 1, GameConstants.ExtraAchievementCategories.orre); + AchievementHandler.addAchievement('That\'s some Shady Pokémon! Do You Want to Sell Them?', 'Capture 10 unique Shadow Pokémon', new ShadowPokemonRequirement(10), 2, GameConstants.ExtraAchievementCategories.orre); + AchievementHandler.addAchievement('Now Go Purify Them!', 'Capture 51 unique Shadow Pokémon', new ShadowPokemonRequirement(51), 4, GameConstants.ExtraAchievementCategories.orre); + AchievementHandler.addAchievement('Beyond a Shadow of a Doubt', 'Capture all 131 unique Shadow Pokémon', new ShadowPokemonRequirement(131), 8, GameConstants.ExtraAchievementCategories.orre); + AchievementHandler.addAchievement('Cleaning Crew', 'Purify your first Shadow Pokémon', new ShadowPokemonRequirement(1, GameConstants.ShadowStatus.Purified), 1.5, GameConstants.ExtraAchievementCategories.orre); + AchievementHandler.addAchievement('Almost Clean Enough to Look Shiny', 'Purify 10 unique Shadow Pokémon', new ShadowPokemonRequirement(10, GameConstants.ShadowStatus.Purified), 3, GameConstants.ExtraAchievementCategories.orre); + AchievementHandler.addAchievement('Priest in Training', 'Purify 51 unique Shadow Pokémon', new ShadowPokemonRequirement(51, GameConstants.ShadowStatus.Purified), 6, GameConstants.ExtraAchievementCategories.orre); + AchievementHandler.addAchievement('Hand of Light', 'Purify all 131 unique Shadow Pokémon', new ShadowPokemonRequirement(131, GameConstants.ShadowStatus.Purified), 12, GameConstants.ExtraAchievementCategories.orre); + AchievementHandler.addAchievement('Who Dropped These Here?', 'Pick up 10 Items in a Safari Zone', new SafariItemsRequirement(10), 0.1); + AchievementHandler.addAchievement('Cheaper Than Buying It', 'Pick up 50 Items in a Safari Zone', new SafariItemsRequirement(50), 0.2); + AchievementHandler.addAchievement('Itemfinder Has Nothing On Me!', 'Pick up 100 Items in a Safari Zone', new SafariItemsRequirement(100), 0.4); + AchievementHandler.addAchievement('This Is Not A Pokéball!', 'Throw 10 Rocks in a Safari Zone', new SafariRocksRequirement(10), 0.1); + AchievementHandler.addAchievement('You\'re A Big Meanie!', 'Throw 100 Rocks in a Safari Zone', new SafariRocksRequirement(100), 0.3); + AchievementHandler.addAchievement('Why Are You Like This?', 'Throw 1,000 Rocks in a Safari Zone', new SafariRocksRequirement(1000), 0.7); + AchievementHandler.addAchievement('Hope It Likes Berries', 'Throw 10 Bait in a Safari Zone', new SafariBaitRequirement(10), 0.1); + AchievementHandler.addAchievement('What Is "Bait" Made Of?', 'Throw 100 Bait in a Safari Zone', new SafariBaitRequirement(100), 0.3); + AchievementHandler.addAchievement('Stay For Dinner', 'Throw 1,000 Bait in a Safari Zone', new SafariBaitRequirement(1000), 0.5); + AchievementHandler.addAchievement('Gotta Get Your Steps In!', 'Walk 100 Steps in a Safari Zone', new SafariStepsRequirement(100), 0.1); + AchievementHandler.addAchievement('One More Lap', 'Walk 1,000 Steps in a Safari Zone', new SafariStepsRequirement(1000), 0.2); + AchievementHandler.addAchievement('Marathon Runner 2', 'Walk 10,000 Steps in a Safari Zone', new SafariStepsRequirement(10000), 0.3); + AchievementHandler.addAchievement('Where Pinsir?', 'Reach Safari Level 5.', new SafariLevelRequirement(5), 0.25); + AchievementHandler.addAchievement('Chasing the Chansey', 'Reach Safari Level 15.', new SafariLevelRequirement(15), 0.5); + AchievementHandler.addAchievement('Catch Animation Enthusiast', 'Reach Safari Level 30.', new SafariLevelRequirement(30), 1); + AchievementHandler.addAchievement('Just Keep Chuckin\' Balls', 'Catch 50 Pokémon in a Safari Zone', new SafariCatchRequirement(50), 0.1); + AchievementHandler.addAchievement('Strategic Chucker', 'Catch 100 Pokémon in a Safari Zone', new SafariCatchRequirement(100), 0.2); + AchievementHandler.addAchievement('Master of the Safari', 'Catch 250 Pokémon in a Safari Zone', new SafariCatchRequirement(250), 0.4); + AchievementHandler.addAchievement('Do Shines Cost Extra?', 'Catch a Shiny Pokémon in a Safari Zone', new SafariCatchRequirement(1, true), 0.5); + const totalMegaStones = Object.values(ItemList).filter((i) => i instanceof MegaStoneItem).length; + AchievementHandler.addAchievement('What a neat rock!', 'Obtain your first Mega Stone.', new TotalMegaStoneObtainedRequirement(1), 5, GameConstants.Region.kalos); + AchievementHandler.addAchievement('Go, Go, Mega Force!', 'Obtain 25 Mega Stones.', new TotalMegaStoneObtainedRequirement(25), 7, GameConstants.Region.kalos); + AchievementHandler.addAchievement('Y\'all got any more of them Mega Stones?', `Obtain all ${totalMegaStones} Mega Stones.`, new TotalMegaStoneObtainedRequirement(totalMegaStones), 10, GameConstants.Region.kalos); + /* + * REGIONAL + */ + const addGymAchievements = (gyms, category, subregion) => { + gyms.forEach(gym => { + var _a, _b, _c; + if (GymList[gym].requirements.some((req) => req instanceof DevelopmentRequirement)) { + return; + } + const elite = gym.includes('Elite') || gym.includes('Champion') || gym.includes('Supreme'); + const displayName = (_a = GymList[gym]) === null || _a === void 0 ? void 0 : _a.displayName; + const gymRegion = subregion ? subregion : GameConstants.camelCaseToString(GameConstants.Region[GameConstants.getGymRegion(gym)]); + // Name of person's title if elite/champion, else the gym's town name + 'Gym' + const gymTitle = displayName !== null && displayName !== void 0 ? displayName : (!elite ? `${gym} Gym` : gym); + const leaderName = !elite && !displayName ? `${GymList[gym].leaderName}'s` : ''; + if ((_c = (_b = GymList[gym]) === null || _b === void 0 ? void 0 : _b.flags) === null || _c === void 0 ? void 0 : _c.achievement) { + AchievementHandler.addAchievement(`${elite ? `${gymRegion} ` : ''}${gymTitle} Regular`, `Defeat ${leaderName} ${gymTitle} in ${gymRegion} 10 times.`, new ClearGymRequirement(GameConstants.ACHIEVEMENT_DEFEAT_GYM_VALUES[0], GameConstants.getGymIndex(gym)), 1, category); + AchievementHandler.addAchievement(`${elite ? `${gymRegion} ` : ''}${gymTitle} Ruler`, `Defeat ${leaderName} ${gymTitle} in ${gymRegion} 100 times.`, new ClearGymRequirement(GameConstants.ACHIEVEMENT_DEFEAT_GYM_VALUES[1], GameConstants.getGymIndex(gym)), 2, category); + AchievementHandler.addAchievement(`${elite ? `${gymRegion} ` : ''}${gymTitle} Owner`, `Defeat ${leaderName} ${gymTitle} in ${gymRegion} 1,000 times.`, new ClearGymRequirement(GameConstants.ACHIEVEMENT_DEFEAT_GYM_VALUES[2], GameConstants.getGymIndex(gym)), 3, category); + } + }); + }; + GameHelper.enumNumbers(GameConstants.Region).filter(r => r != GameConstants.Region.none && r <= GameConstants.MAX_AVAILABLE_REGION).forEach(region => { + var _a; + // Routes + Routes.getRoutesByRegion(region).forEach(route => { + var _a; + if (((_a = SubRegions.getSubRegionById(region, route.subRegion)) === null || _a === void 0 ? void 0 : _a.requirement) instanceof NullRequirement) { + return; + } + let category = region; + // Split bigger subregions into their own achievement pool + if (region == GameConstants.Region.kanto && (route.subRegion == GameConstants.KantoSubRegions.Sevii123 || route.subRegion == GameConstants.KantoSubRegions.Sevii4567)) { + category = GameConstants.ExtraAchievementCategories.sevii; + } + if (region == GameConstants.Region.hoenn && route.subRegion == GameConstants.HoennSubRegions.Orre) { + category = GameConstants.ExtraAchievementCategories.orre; + } + if (region == GameConstants.Region.alola && route.subRegion == GameConstants.AlolaSubRegions.MagikarpJump) { + category = GameConstants.ExtraAchievementCategories.magikarpJump; + } + const routeName = Routes.getName(route.number, region, true); + AchievementHandler.addAchievement(`${route.routeName} Traveler`, `Defeat 100 Pokémon on ${routeName}.`, new RouteKillRequirement(GameConstants.ACHIEVEMENT_DEFEAT_ROUTE_VALUES[0], region, route.number), 1, category); + AchievementHandler.addAchievement(`${route.routeName} Explorer`, `Defeat 1,000 Pokémon on ${routeName}.`, new RouteKillRequirement(GameConstants.ACHIEVEMENT_DEFEAT_ROUTE_VALUES[1], region, route.number), 2, category); + AchievementHandler.addAchievement(`${route.routeName} Conqueror`, `Defeat 10,000 Pokémon on ${routeName}.`, new RouteKillRequirement(GameConstants.ACHIEVEMENT_DEFEAT_ROUTE_VALUES[2], region, route.number), 3, category); + }); + // Gyms + if (GameConstants.RegionGyms[region]) { + addGymAchievements(GameConstants.RegionGyms[region], region); + } + // Dungeons + (_a = GameConstants.RegionDungeons[region]) === null || _a === void 0 ? void 0 : _a.forEach(dungeon => { + if (TownList[dungeon].requirements.some((req) => req instanceof DevelopmentRequirement)) { + return; + } + let category = region; + // Split bigger subregions into their own achievement pool + if (region == GameConstants.Region.kanto && (TownList[dungeon].subRegion == GameConstants.KantoSubRegions.Sevii123 || TownList[dungeon].subRegion == GameConstants.KantoSubRegions.Sevii4567)) { + category = GameConstants.ExtraAchievementCategories.sevii; + } + if (region == GameConstants.Region.hoenn && TownList[dungeon].subRegion == GameConstants.HoennSubRegions.Orre) { + category = GameConstants.ExtraAchievementCategories.orre; + } + if (region == GameConstants.Region.alola && TownList[dungeon].subRegion == GameConstants.AlolaSubRegions.MagikarpJump) { + category = GameConstants.ExtraAchievementCategories.magikarpJump; + } + AchievementHandler.addAchievement(`${dungeon} Explorer`, `Clear ${dungeon} 10 times.`, new ClearDungeonRequirement(GameConstants.ACHIEVEMENT_DEFEAT_DUNGEON_VALUES[0], GameConstants.getDungeonIndex(dungeon)), 0.8, category); + AchievementHandler.addAchievement(`${dungeon} Expert`, `Clear ${dungeon} 100 times.`, new ClearDungeonRequirement(GameConstants.ACHIEVEMENT_DEFEAT_DUNGEON_VALUES[1], GameConstants.getDungeonIndex(dungeon)), 1.2, category); + AchievementHandler.addAchievement(`${dungeon} Hermit`, `Clear ${dungeon} 250 times.`, new ClearDungeonRequirement(GameConstants.ACHIEVEMENT_DEFEAT_DUNGEON_VALUES[2], GameConstants.getDungeonIndex(dungeon)), 1.6, category); + AchievementHandler.addAchievement(`${dungeon} Dweller`, `Clear ${dungeon} 500 times.`, new ClearDungeonRequirement(GameConstants.ACHIEVEMENT_DEFEAT_DUNGEON_VALUES[3], GameConstants.getDungeonIndex(dungeon)), 2.4, category); + }); + // Unique Pokémon + const amt10 = Math.floor(PokemonHelper.calcUniquePokemonsByRegion(region) * .1); + const amt50 = Math.floor(PokemonHelper.calcUniquePokemonsByRegion(region) * .5); + const amtAll = Math.floor(PokemonHelper.calcUniquePokemonsByRegion(region)); + // Caught unique pokemon + AchievementHandler.addAchievement(`${GameConstants.camelCaseToString(GameConstants.Region[region])} Trainer`, `Catch ${amt10} unique Pokémon native to the ${GameConstants.camelCaseToString(GameConstants.Region[region])} region.`, new CaughtUniquePokemonsByRegionRequirement(region, amt10), 2, region); + AchievementHandler.addAchievement(`${GameConstants.camelCaseToString(GameConstants.Region[region])} Ace`, `Catch ${amt50} unique Pokémon native to the ${GameConstants.camelCaseToString(GameConstants.Region[region])} region.`, new CaughtUniquePokemonsByRegionRequirement(region, amt50), 4, region); + AchievementHandler.addAchievement(`${GameConstants.camelCaseToString(GameConstants.Region[region])} Master`, `Complete the ${GameConstants.camelCaseToString(GameConstants.Region[region])} Pokédex!`, new CaughtUniquePokemonsByRegionRequirement(region, amtAll), 6, region); + // Caught unique shiny pokemon + AchievementHandler.addAchievement(`${GameConstants.camelCaseToString(GameConstants.Region[region])} Shiny Trainer`, `Catch ${amt10} unique Shiny Pokémon native to the ${GameConstants.camelCaseToString(GameConstants.Region[region])} region.`, new CaughtUniqueShinyPokemonsByRegionRequirement(region, amt10), 3, region); + AchievementHandler.addAchievement(`${GameConstants.camelCaseToString(GameConstants.Region[region])} Shiny Ace`, `Catch ${amt50} unique Shiny Pokémon native to the ${GameConstants.camelCaseToString(GameConstants.Region[region])} region.`, new CaughtUniqueShinyPokemonsByRegionRequirement(region, amt50), 6, region); + AchievementHandler.addAchievement(`${GameConstants.camelCaseToString(GameConstants.Region[region])} Shiny Master`, `Complete the ${GameConstants.camelCaseToString(GameConstants.Region[region])} Shiny Pokédex!`, new CaughtUniqueShinyPokemonsByRegionRequirement(region, amtAll), 9, region); + }); + // Unown pokédex for Johto + const unownID = pokemonMap['Unown (A)'].id; + const unownDexFilter = (p) => Math.floor(p.id) === unownID; + const unownAmount = pokemonList.reduce((count, p) => count + +(Math.floor(p.id) === unownID), 0); + AchievementHandler.addAchievement('Alphabet Soup for Ruin Maniac', 'Catch all unique Unown forms.', new CaughtUniquePokemonByFilterRequirement(unownDexFilter, 'Catch all unique Unown forms.', unownAmount), 2, GameConstants.Region.johto); + AchievementHandler.addAchievement('"I am the Alpha and the Omega"', 'Catch all unique Shiny Unown forms.', new CaughtUniquePokemonByFilterRequirement(unownDexFilter, 'Catch all unique Unown forms.', unownAmount, true), 3, GameConstants.Region.johto); + // Battle Café pokédex for Galar, highly optional as this is End Game farming, so no high bonus + const alcremieDexFilter = (p) => p.name === 'Milcery (Cheesy)' || p.name.startsWith('Alcremie'); + const alcremieAmount = pokemonList.reduce((count, p) => count + +(p.name === 'Milcery (Cheesy)' || p.name.startsWith('Alcremie')), 0); + AchievementHandler.addAchievement('Moomoo Milk Served Right', 'Catch 32 unique Battle Café flavors.', new CaughtUniquePokemonByFilterRequirement(alcremieDexFilter, 'Catch 32 unique Alcremie flavors.', 32), 0.5, GameConstants.Region.galar); + AchievementHandler.addAchievement('Gotta Taste \'Em All!', 'Catch all unique Battle Café flavors.', new CaughtUniquePokemonByFilterRequirement(alcremieDexFilter, 'Catch all unique Alcremie flavors.', alcremieAmount), 1, GameConstants.Region.galar); + AchievementHandler.addAchievement('Yoshida\'s Coffees Enjoyer', 'Catch 32 unique Shiny Battle Café flavors.', new CaughtUniquePokemonByFilterRequirement(alcremieDexFilter, 'Catch 32 unique Shiny Alcremie flavors.', 32, true), 0.75, GameConstants.Region.galar); + AchievementHandler.addAchievement('All These Flavors And You Choose To Be Cheesy', 'Catch all unique Shiny Battle Café flavors.', new CaughtUniquePokemonByFilterRequirement(alcremieDexFilter, 'Catch all unique Shiny Alcremie flavors.', alcremieAmount, true), 1.5, GameConstants.Region.galar); + // Gigantamax pokédex for Galar + const gigaDexFilter = (p) => p.name.startsWith('Gigantamax') || p.name.startsWith('Eternamax'); + const gigaAmount = pokemonList.reduce((count, p) => count + +(p.name.startsWith('Gigantamax') || p.name.startsWith('Eternamax')), 0); + AchievementHandler.addAchievement('Way Too Many Bosses', 'Catch all Gigantamax Pokémon.', new CaughtUniquePokemonByFilterRequirement(gigaDexFilter, 'Catch all Gigantamax Pokémon.', gigaAmount), 2, GameConstants.Region.galar); + AchievementHandler.addAchievement('Really Big Sparkle', 'Catch all Shiny Gigantamax Pokémon.', new CaughtUniquePokemonByFilterRequirement(gigaDexFilter, 'Catch all Shiny Gigantamax Pokémon.', gigaAmount, true), 3, GameConstants.Region.galar); + /* + * MINIREGIONS + */ + addGymAchievements(GameConstants.RegionGyms[GameConstants.Region.final], GameConstants.ExtraAchievementCategories.sevii, 'Sevii Islands'); + AchievementHandler.addAchievement('Sevii Trainer', 'Catch 15 unique Pokémon native to the Sevii Islands.', new SeviiCaughtRequirement(15, false), 3, GameConstants.ExtraAchievementCategories.sevii); + AchievementHandler.addAchievement('Sevii Master', 'Catch 34 unique Pokémon native to the Sevii Islands.', new SeviiCaughtRequirement(34, false), 6, GameConstants.ExtraAchievementCategories.sevii); + AchievementHandler.addAchievement('Sevii Shiny Trainer', 'Catch 15 unique Shiny Pokémon native to the Sevii Islands.', new SeviiCaughtRequirement(15, true), 5, GameConstants.ExtraAchievementCategories.sevii); + AchievementHandler.addAchievement('Sevii Shiny Master', 'Catch 34 unique Shiny Pokémon native to the Sevii Islands.', new SeviiCaughtRequirement(34, true), 9, GameConstants.ExtraAchievementCategories.sevii); + addGymAchievements(GameConstants.RegionGyms[GameConstants.Region.final + 1], GameConstants.ExtraAchievementCategories.magikarpJump, 'Magikarp Jump'); + // Magikarp pokédex, highly optional as some forms are End Game farming, so no high bonus + const magikarpID = pokemonMap.Magikarp.id; + const karpDexFilter = (p) => Math.floor(p.id) === magikarpID; + const karpAmount = pokemonList.reduce((count, p) => count + +(Math.floor(p.id) === magikarpID), 0); + AchievementHandler.addAchievement('Do You Even Splash?', 'Catch all unique Magikarp forms.', new CaughtUniquePokemonByFilterRequirement(karpDexFilter, 'Catch all unique Magikarp forms.', karpAmount), 1, GameConstants.ExtraAchievementCategories.magikarpJump); + AchievementHandler.addAchievement('Twenty Thousands Karps Under the Seas', 'Catch all unique Shiny Magikarp forms.', new CaughtUniquePokemonByFilterRequirement(karpDexFilter, 'Catch all unique Shiny Magikarp forms.', karpAmount, true), 1.5, GameConstants.ExtraAchievementCategories.magikarpJump); + addGymAchievements(GameConstants.RegionGyms[GameConstants.Region.final + 2], GameConstants.ExtraAchievementCategories.orre, 'Orre'); + // load filters + this.load(); + // subscribe to filters so that when the player changes a filter it automatically refilters the list + Object.keys(this.filter).forEach(e => this.filter[e].subscribe(() => this.filterAchievementList())); + const multiplierSource = 'Achievements'; + multiplier.addBonus('exp', () => 1 + this.achievementBonus(), multiplierSource); + multiplier.addBonus('money', () => 1 + this.achievementBonus(), multiplierSource); + multiplier.addBonus('dungeonToken', () => 1 + this.achievementBonus(), multiplierSource); + multiplier.addBonus('clickAttack', () => 1 + this.achievementBonus(), multiplierSource); + } + static load() { + AchievementHandler.calculateMaxBonus(); + AchievementHandler.navigateIndex(Settings.getSetting('achievementsPage').value); + AchievementHandler.filter.status(Settings.getSetting('achievementsStatus').value); + AchievementHandler.filter.type(Settings.getSetting('achievementsType').value); + AchievementHandler.filter.category(Settings.getSetting('achievementsCategory').value); + // Cycle the pages to make sure they are upto date + AchievementHandler.navigateRight(); + setTimeout(() => { + AchievementHandler.navigateLeft(); + }, 1); + } +} +AchievementHandler.achievementList = []; +AchievementHandler.navigateIndex = ko.observable(0); +AchievementHandler.achievementListFiltered = ko.observableArray([]); +AchievementHandler.numberOfTabs = ko.observable(0); +AchievementHandler._cachedAchievementBonus = ko.observable(0); +AchievementHandler.filter = { + status: ko.observable(-2).extend({ numeric: 0 }), + type: ko.observable(-2).extend({ numeric: 0 }), + category: ko.observable('all'), +}; +AchievementHandler.achievementSortedList = ko.pureComputed(() => { + const achievementSortValue = Settings.getSetting('achievementSort').observableValue(); + if (DisplayObservables.modalState.achievementsModal !== 'show') { + return AchievementHandler.cachedSortedList || AchievementHandler.achievementListFiltered(); + } + // Checks if the user has selected the default sorting option + if (achievementSortValue === AchievementSortOptions.default) { + // ... in this case, returns the filtered list without sorting. + return AchievementHandler.achievementListFiltered(); + } + // ... otherwise, returns a copy of the filtered list sorted by provided property. + const achievementSortedList = [...AchievementHandler.achievementListFiltered()]; + achievementSortedList.sort(AchievementHandler.compareBy(achievementSortValue, Settings.getSetting('achievementSortDirection').observableValue())); + AchievementHandler.cachedSortedList = achievementSortedList; + return achievementSortedList; +}).extend({ rateLimit: 100 }); +AchievementHandler; +class AchievementTracker { + constructor() { + this.name = 'AchievementTracker'; + this.saveKey = 'achievementTracker'; + this.defaults = { + 'trackedAchievement': null, + }; + this.trackedAchievement = ko.observable(this.defaults.trackedAchievement); + } + initialize() { + } + canAccess() { + return App.game.keyItems.hasKeyItem(KeyItemType.Holo_caster); + } + update(delta) { + } + nextAchievement() { + if (!this.hasTrackedAchievement()) { + return; + } + const tracked = this.trackedAchievement(); + let next = tracked; + let max = Infinity; + // Grabs the next tier achievement with the same custom signature. + AchievementHandler.achievementList.forEach((current) => { + if (`${tracked.property}` === `${current.property}` && tracked.property.requiredValue < current.property.requiredValue && current.property.requiredValue < max) { + next = current; + max = current.property.requiredValue; + } + }); + if (tracked !== next) { + this.trackAchievement(next); + } + } + fromJSON(json) { + if (json == null) { + return; + } + if (!!json.trackedAchievementName) { + const achievement = AchievementHandler.findByName(json.trackedAchievementName); + if (!!achievement) { + this.trackedAchievement(achievement); + } + } + } + toJSON() { + return { + trackedAchievementName: this.hasTrackedAchievement() ? this.trackedAchievement().name : null, + }; + } + trackAchievement(achievement) { + this.trackedAchievement(achievement); + } + hasTrackedAchievement() { + return this.trackedAchievement() !== null; + } +} +/// +class CaughtUniquePokemonByFilterRequirement extends AchievementRequirement { + constructor(filter, hintText, amount, shiny = false, option = GameConstants.AchievementOption.more) { + super(amount, option, GameConstants.AchievementType[shiny ? 'Shiny Pokemon' : 'Caught Pokemon']); + this.filter = filter; + this.hintText = hintText; + this.shiny = shiny; + } + getProgress() { + return Math.min(App.game.party.caughtPokemon.filter(p => this.filter(p) && (p.shiny || !this.shiny)).length, this.requiredValue); + } + hint() { + return this.hintText; + } + toString() { + return `${super.toString()} ${this.filter} ${this.shiny}`; + } +} +/// +class CaughtUniquePokemonsByRegionRequirement extends AchievementRequirement { + constructor(region, amount = 0, option = GameConstants.AchievementOption.more) { + super(amount || PokemonHelper.calcUniquePokemonsByRegion(region), option, GameConstants.AchievementType['Caught Pokemon']); + this.region = region; + } + getProgress() { + return Math.min(new Set(App.game.party.caughtPokemon.filter(p => p.id > 0 && PokemonHelper.calcNativeRegion(p.name) === this.region).map(p => Math.floor(p.id))).size, this.requiredValue); + } + hint() { + return `${this.requiredValue} unique Pokémon need to be caught.`; + } + toString() { + return `${super.toString()} ${this.region}`; + } +} +/// +class CaughtUniqueShinyPokemonsByRegionRequirement extends AchievementRequirement { + constructor(region, amount = 0, option = GameConstants.AchievementOption.more) { + super(amount || PokemonHelper.calcUniquePokemonsByRegion(region), option, GameConstants.AchievementType['Shiny Pokemon']); + this.region = region; + } + getProgress() { + return Math.min(new Set(App.game.party.caughtPokemon.filter(p => p.id > 0 && p.shiny && PokemonHelper.calcNativeRegion(p.name) === this.region).map(p => Math.floor(p.id))).size, this.requiredValue); + } + hint() { + return `${this.requiredValue} unique Pokémon need to be caught.`; + } + toString() { + return `${super.toString()} ${this.region}`; + } +} +class SafariLevelRequirement extends AchievementRequirement { + constructor(levelRequired) { + super(levelRequired, GameConstants.AchievementOption.more, GameConstants.AchievementType.Safari); + } + getProgress() { + return Math.min(Safari.safariLevel(), this.requiredValue); + } + hint() { + return `Needs Safari Level ${this.requiredValue}.`; + } +} +/// +class StoneUnlockedRequirement extends Requirement { + constructor(stoneType, option = GameConstants.AchievementOption.more) { + var _a; + const stone = ItemList[GameConstants.StoneType[stoneType]]; + const requiredRegion = (_a = stone === null || stone === void 0 ? void 0 : stone.unlockedRegion) !== null && _a !== void 0 ? _a : GameConstants.Region.none; + super(requiredRegion, option); + this.stone = stone; + } + getProgress() { + return Math.min(player.highestRegion(), this.requiredValue); + } + isCompleted() { + if (!this.stone) { + return true; + } + return this.stone.unlockedRegion <= player.highestRegion(); + } + hint() { + return `You need to reach the ${GameConstants.Region[this.requiredValue]} region.`; + } +} +/// +class BadgeCaseController { + static getDisplayableBadges() { + const highestRegion = player.highestRegion(); + const result = {}; + GameConstants.RegionGyms.forEach((region, i) => { + // Optional leagues + if (i >= GameConstants.Region.final) { + if (!region.some(gym => App.game.badgeCase.hasBadge(GymList[gym].badgeReward))) { + return; + } + const badges = this.regionToBadges(region); + if (badges.length) { + result[this.optionalLeagueNames[i - GameConstants.Region.final]] = badges; + } + return; + } + // Normal leagues + if (i > highestRegion) { + return; + } + result[GameConstants.Region[i].charAt(0).toUpperCase() + GameConstants.Region[i].slice(1)] = this.regionToBadges(region); + }); + return result; + } + static regionToBadges(region) { + return region + .map(gym => BadgeEnums[GymList[gym].badgeReward]) + .filter(b => !b.startsWith('Elite') && b != 'None'); + } +} +BadgeCaseController.optionalLeagueNames = ['Orange League', 'Magikarp Jump', 'Orre']; +class BattleFrontier { + constructor() { + this.name = 'BattleFrontier'; + this.saveKey = 'battleFrontier'; + this.milestones = BattleFrontierMilestones; + this.defaults = {}; + } + initialize() { } + update(delta) { } + canAccess() { + return true; + } + enter() { + BattleFrontierBattle.enemyPokemon(null); + App.game.gameState = GameConstants.GameState.battleFrontier; + } + start(useCheckpoint) { + BattleFrontierRunner.start(useCheckpoint); + } + leave() { + // Put the user back in the town + App.game.gameState = GameConstants.GameState.town; + } + toJSON() { + return { + milestones: this.milestones.milestoneRewards.filter(m => m.obtained()).map(m => [m.stage, m.description]), + checkpoint: BattleFrontierRunner.checkpoint(), + }; + } + fromJSON(json) { + var _a; + if (json == null) { + return; + } + (_a = json.milestones) === null || _a === void 0 ? void 0 : _a.forEach(([stage, description]) => { + var _a; + (_a = this.milestones.milestoneRewards.find(m => m.stage == stage && m.description == description)) === null || _a === void 0 ? void 0 : _a.obtained(true); + }); + BattleFrontierRunner.checkpoint(json.checkpoint); + } +} +/// +/// +class BattleFrontierBattle extends Battle { + // Override pokemon attack method so we can ignore the region multiplier + static pokemonAttack() { + var _a; + // attack twice as fast if we have defeated this stage + this.alternateAttack = !this.alternateAttack; + if (this.alternateAttack && BattleFrontierRunner.stage() > App.game.statistics.battleFrontierHighestStageCompleted()) { + return; + } + // Limit pokemon attack speed, Only allow 1 attack per 450ms + const now = Date.now(); + if (this.lastPokemonAttack > now - 450) { + return; + } + this.lastPokemonAttack = now; + if (!((_a = this.enemyPokemon()) === null || _a === void 0 ? void 0 : _a.isAlive())) { + return; + } + this.enemyPokemon().damage(App.game.party.calculatePokemonAttack(this.enemyPokemon().type1, this.enemyPokemon().type2, true, GameConstants.Region.none, false, false, WeatherType.Clear)); + if (!this.enemyPokemon().isAlive()) { + this.defeatPokemon(); + } + } + /** + * Award the player with exp, gems and go to the next pokemon + */ + static defeatPokemon() { + this.enemyPokemon().defeat(true); + // This needs to stay as none so the stage number isn't adjusted + App.game.breeding.progressEggsBattle(BattleFrontierRunner.stage(), GameConstants.Region.none); + // Next pokemon + GameHelper.incrementObservable(this.pokemonIndex); + if (this.pokemonIndex() >= 3) { + // Move on to next stage, reset timer + BattleFrontierRunner.nextStage(); + this.pokemonIndex(0); + } + // If player still challenging Battle Frontier, keep generating Pokemon + if (BattleFrontierRunner.started()) { + // Create the next Pokemon to fight + this.generateNewEnemy(); + } + else { + this.enemyPokemon(null); + } + } + static generateNewEnemy() { + const enemy = pokemonMap.randomRegion(player.highestRegion()); + // This needs to stay as none so the stage number isn't adjusted + const health = PokemonFactory.routeHealth(BattleFrontierRunner.stage() + 10, GameConstants.Region.none); + const level = Math.min(100, BattleFrontierRunner.stage()); + // Don't award money per pokemon defeated, award money at the end + const money = 0; + const shiny = PokemonFactory.generateShiny(GameConstants.SHINY_CHANCE_BATTLE); + // Give 1 extra gem per pokemon defeated after every 80 stages + const gems = Math.ceil(BattleFrontierRunner.stage() / 80); + const gender = PokemonFactory.generateGender(enemy.gender.femaleRatio, enemy.gender.type); + const enemyPokemon = new BattlePokemon(enemy.name, enemy.id, enemy.type[0], enemy.type[1], health, level, 0, enemy.exp, new Amount(money, GameConstants.Currency.money), shiny, gems, gender, GameConstants.ShadowStatus.None, EncounterType.trainer); + this.enemyPokemon(enemyPokemon); + } +} +BattleFrontierBattle.alternateAttack = false; +BattleFrontierBattle.pokemonIndex = ko.observable(0); +BattleFrontierBattle.totalPokemons = ko.observable(3); +// Looks like we don't need this, unless we want to put a random trainer name or similar +BattleFrontierBattle.trainer = ko.observable(0); +BattleFrontierBattle.counter = 0; +class BattleFrontierMilestone { + constructor(stage, rewardFunction, requirement, _image, _description) { + this.stage = stage; + this.rewardFunction = rewardFunction; + this.requirement = requirement; + this._image = _image; + this._description = _description; + this.obtained = ko.observable(false); + } + isUnlocked() { + return this.requirement ? this.requirement.isCompleted() : true; + } + gain() { + if (!this.obtained()) { + this.rewardFunction(); + this.obtained(true); + } + } + get image() { + return this._image; + } + get description() { + return this._description; + } + get displayName() { + return this.description; + } +} +class BattleFrontierMilestoneItem extends BattleFrontierMilestone { + constructor(stage, itemName, amount, requirement) { + super(stage, () => { + if (ItemList[itemName]) { + ItemList[itemName].gain(amount); + } + }); + this.requirement = requirement; + this.itemName = itemName; + this.amount = amount; + } + get image() { + return ItemList[this.itemName].image; + } + get description() { + return `${this.amount.toLocaleString('en-US')} x ${ItemList[this.itemName].displayName}`; + } +} +class BattleFrontierMilestonePokemon extends BattleFrontierMilestone { + constructor(stage, pokemonName, requirement, image = `assets/images/items/pokemonItem/${pokemonName}.png`) { + super(stage, () => { + App.game.party.gainPokemonById(pokemonMap[pokemonName].id, PokemonFactory.generateShiny(GameConstants.SHINY_CHANCE_BATTLEFRONTIER)); + }, requirement, image, pokemonName); + this.pokemonName = pokemonName; + } + get displayName() { + return PokemonHelper.displayName(this.pokemonName); + } +} +/// +/// +class BattleFrontierMilestones { + static addMilestone(milestone) { + this.milestoneRewards.push(milestone); + // Sort the milestones by lowest to highest stage incase they are added out of order + this.milestoneRewards.sort((a, b) => a.stage - b.stage); + } + static nextMileStone() { + // Get next reward that is unlocked, not obtained, and earned past the latest stage beaten in the active run. + return this.milestoneRewards.find(r => r.isUnlocked() && !r.obtained() && (r.stage > (BattleFrontierRunner.checkpoint() - 1))); + } + static availableMilestones() { + return BattleFrontierMilestones.milestoneRewards.filter(r => r.isUnlocked() && !r.obtained() && r.stage > (BattleFrontierRunner.checkpoint() - 1)); + } + static nextMileStoneStage() { + // Return the stage number the next reward is unlocked at + const reward = this.nextMileStone(); + if (reward) { + return reward.stage; + } + else { + return Infinity; + } + } + static nextMileStoneRewardDescription() { + // Return the description of the next reward + const reward = this.nextMileStone(); + if (reward) { + return reward.description; + } + else { + return 'Nothing'; + } + } + static gainReward(defeatedStage) { + const reward = this.nextMileStone(); + if (reward && reward.stage == defeatedStage) { + Notifier.notify({ + title: 'Battle Frontier', + message: `You've successfully defeated stage ${defeatedStage.toLocaleString('en-US')} and earned:\n ${reward.description}!`, + type: NotificationConstants.NotificationOption.info, + setting: NotificationConstants.NotificationSetting.General.battle_frontier, + timeout: 1e4, + }); + App.game.logbook.newLog(LogBookTypes.FRONTIER, createLogContent.gainBattleFrontierReward({ + reward: reward.description, + stage: defeatedStage.toLocaleString('en-US'), + })); + reward.gain(); + } + } +} +BattleFrontierMilestones.milestoneRewards = []; +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(5, 'Pokeball', 25)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(10, 'Pokeball', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(20, 'Greatball', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(30, 'Ultraball', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(35, 'xClick', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(40, 'xAttack', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(50, 'SmallRestore', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(75, 'Rare_Candy', 5)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestonePokemon(100, 'Deoxys', new QuestLineStepCompletedRequirement('Mystery of Deoxys', 2))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(110, 'Water_stone', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(120, 'Leaf_stone', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(130, 'Thunder_stone', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(140, 'Fire_stone', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(150, 'MediumRestore', 200)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestonePokemon(151, 'Deoxys (Attack)', new ObtainedPokemonRequirement('Deoxys'))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(160, 'Lucky_egg', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(170, 'Lucky_incense', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(180, 'Dowsing_machine', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(190, 'Mystery_egg', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(200, 'LargeRestore', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(210, 'Water_stone', 40)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(220, 'Leaf_stone', 40)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(230, 'Thunder_stone', 40)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(240, 'Moon_stone', 40)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(250, 'Ultraball', 6400)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestonePokemon(251, 'Deoxys (Defense)', new ObtainedPokemonRequirement('Deoxys'))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(275, 'Rare_Candy', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(300, 'Linking_cord', 100)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(310, 'Dragon_scale', 20)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(320, 'Sun_stone', 40)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(330, 'Kings_rock', 20)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(340, 'Metal_coat', 20)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(350, 'Upgrade', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(375, 'Rare_Candy', 15)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestonePokemon(386, 'Deoxys (Speed)', new ObtainedPokemonRequirement('Deoxys'))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(400, 'Soothe_bell', 40)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(410, 'Deepsea_tooth', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(420, 'Shiny_stone', 40)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(430, 'Deepsea_scale', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(440, 'Dusk_stone', 40, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(450, 'Prism_scale', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(460, 'Dawn_stone', 40, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(470, 'Razor_claw', 10, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(480, 'Razor_fang', 10, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(490, 'Dubious_disc', 10, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(500, 'Ultraball', 10000)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(525, 'Magmarizer', 15, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(550, 'Electirizer', 15, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(575, 'Protector', 15, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(600, 'Reaper_cloth', 15, new MaxRegionRequirement(GameConstants.Region.sinnoh))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(660, 'Sachet', 15, new MaxRegionRequirement(GameConstants.Region.kalos))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestonePokemon(666, 'Vivillon (Poké Ball)', new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 34))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(670, 'Whipped_dream', 15, new MaxRegionRequirement(GameConstants.Region.kalos))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(690, 'Lopunnite', 1, new MultiRequirement([new MaxRegionRequirement(GameConstants.Region.kalos), new ObtainedPokemonRequirement('Lopunny')]))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(700, 'Ice_stone', 40, new MaxRegionRequirement(GameConstants.Region.alola))); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(750, 'Rare_Candy', 20)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(1000, 'Masterball', 10)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestoneItem(1500, 'Rare_Candy', 25)); +BattleFrontierMilestones.addMilestone(new BattleFrontierMilestonePokemon(2000, 'Mismagius (Illusion)', new ObtainedPokemonRequirement('Mismagius'))); +/// +class BattleFrontierRunner { + constructor() { } + static tick() { + if (!this.started()) { + return; + } + if (this.timeLeft() < 0) { + this.battleLost(); + } + this.timeLeft(this.timeLeft() - GameConstants.GYM_TICK); + this.timeLeftPercentage(Math.floor(this.timeLeft() / GameConstants.GYM_TIME * 100)); + } + static start(useCheckpoint) { + return __awaiter(this, void 0, void 0, function* () { + if (!useCheckpoint && this.hasCheckpoint()) { + if (!(yield Notifier.confirm({ + title: 'Restart Battle Frontier?', + message: 'Current progress will be lost and you will restart from the first stage.', + type: NotificationConstants.NotificationOption.warning, + confirm: 'OK', + }))) { + return; + } + } + if (!useCheckpoint) { + BattleFrontierRunner.battleBackground('Default'); + } + this.started(true); + this.stage(useCheckpoint ? this.checkpoint() : 1); + this.highest(App.game.statistics.battleFrontierHighestStageCompleted()); + BattleFrontierBattle.pokemonIndex(0); + BattleFrontierBattle.generateNewEnemy(); + BattleFrontierRunner.timeLeft(GameConstants.GYM_TIME); + BattleFrontierRunner.timeLeftPercentage(100); + App.game.gameState = GameConstants.GameState.battleFrontier; + }); + } + static nextStage() { + // Gain any rewards we should have earned for defeating this stage + BattleFrontierMilestones.gainReward(this.stage()); + if (App.game.statistics.battleFrontierHighestStageCompleted() < this.stage()) { + // Update our highest stage + App.game.statistics.battleFrontierHighestStageCompleted(this.stage()); + } + // Move on to the next stage + GameHelper.incrementObservable(this.stage); + GameHelper.incrementObservable(App.game.statistics.battleFrontierTotalStagesCompleted); + BattleFrontierRunner.timeLeft(GameConstants.GYM_TIME); + BattleFrontierRunner.timeLeftPercentage(100); + this.checkpoint(this.stage()); + if (this.stage() % 25 == 0) { + const currentBackground = BattleFrontierRunner.battleBackground(); + const backgrounds = Object.keys(GameConstants.BattleBackgrounds).filter((key) => key !== currentBackground); + BattleFrontierRunner.battleBackground(Rand.fromArray(backgrounds)); + } + } + static end() { + BattleFrontierBattle.enemyPokemon(null); + this.stage(1); + this.started(false); + } + static battleLost() { + // Current stage - 1 as the player didn't beat the current stage + const stageBeaten = this.stage() - 1; + // Give Battle Points and Money based on how far the user got + const battleMultiplier = Math.max(stageBeaten / 100, 1); + let battlePointsEarned = Math.round(stageBeaten * battleMultiplier); + let moneyEarned = stageBeaten * 100 * battleMultiplier; + // Award battle points and dollars and retrieve their computed values + battlePointsEarned = App.game.wallet.gainBattlePoints(battlePointsEarned).amount; + moneyEarned = App.game.wallet.gainMoney(moneyEarned, true).amount; + Notifier.notify({ + title: 'Battle Frontier', + message: `You managed to beat stage ${stageBeaten.toLocaleString('en-US')}.\nYou received ${battlePointsEarned.toLocaleString('en-US')}.\nYou received ${moneyEarned.toLocaleString('en-US')}.`, + strippedMessage: `You managed to beat stage ${stageBeaten.toLocaleString('en-US')}.\nYou received ${battlePointsEarned.toLocaleString('en-US')} Battle Points.\nYou received ${moneyEarned.toLocaleString('en-US')} Pokédollars.`, + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.General.battle_frontier, + sound: NotificationConstants.NotificationSound.General.battle_frontier, + timeout: 30 * GameConstants.MINUTE, + }); + App.game.logbook.newLog(LogBookTypes.FRONTIER, createLogContent.gainBattleFrontierPoints({ + stage: stageBeaten.toLocaleString('en-US'), + points: battlePointsEarned.toLocaleString('en-US'), + })); + this.checkpoint(1); + this.end(); + } + static battleQuit() { + Notifier.confirm({ + title: 'Battle Frontier', + message: 'Are you sure you want to leave?\n\nYou can always return later and start off where you left.', + type: NotificationConstants.NotificationOption.danger, + confirm: 'Leave', + }).then(confirmed => { + if (confirmed) { + // Don't give any points, user quit the challenge + Notifier.notify({ + title: 'Battle Frontier', + message: `Checkpoint set for stage ${this.stage()}.`, + type: NotificationConstants.NotificationOption.info, + timeout: 1 * GameConstants.MINUTE, + }); + this.end(); + } + }); + } +} +BattleFrontierRunner.timeLeft = ko.observable(GameConstants.GYM_TIME); +BattleFrontierRunner.timeLeftPercentage = ko.observable(100); +BattleFrontierRunner.stage = ko.observable(1); // Start at stage 1 +BattleFrontierRunner.checkpoint = ko.observable(1); // Start at stage 1 +BattleFrontierRunner.highest = ko.observable(1); +BattleFrontierRunner.battleBackground = ko.observable('Default'); +BattleFrontierRunner.counter = 0; +BattleFrontierRunner.started = ko.observable(false); +BattleFrontierRunner.timeLeftSeconds = ko.pureComputed(() => { + return (Math.ceil(BattleFrontierRunner.timeLeft() / 100) / 10).toFixed(1); +}); +BattleFrontierRunner.pokemonLeftImages = ko.pureComputed(() => { + let str = ''; + for (let i = 0; i < 3; i++) { + str += ` i ? ' style="filter: saturate(0);"' : ''}>`; + } + return str; +}); +BattleFrontierRunner.hasCheckpoint = ko.computed(() => { + return BattleFrontierRunner.checkpoint() > 1; +}); +/// +/// +/// +class Breeding { + constructor(multiplier) { + this.multiplier = multiplier; + this.name = 'Breeding'; + this.saveKey = 'breeding'; + this.defaults = { + eggList: [ko.observable(new Egg()), ko.observable(new Egg()), ko.observable(new Egg()), ko.observable(new Egg())], + eggSlots: 1, + queueList: [], + queueSlots: 0, + }; + this.hatcheryHelpers = new HatcheryHelpers(this); + this.hatchList = {}; + this.usableQueueSlots = ko.pureComputed(() => { + const queueSizeSetting = Settings.getSetting('breedingQueueSizeSetting').observableValue(); + return queueSizeSetting > -1 ? Math.min(queueSizeSetting, this.queueSlots()) : this.queueSlots(); + }); + this._eggList = this.defaults.eggList; + this._eggSlots = ko.observable(this.defaults.eggSlots); + this._queueList = ko.observableArray(this.defaults.queueList); + this.queueSlots = ko.observable(this.defaults.queueSlots); + this._eggList.forEach((egg) => { + egg.extend({ deferred: true }); + }); + Settings.getSetting('breedingQueueSizeSetting').observableValue.subscribe(() => { + this.updateQueueSizeLimit(); + }); + } + initialize() { + this.hatchList[EggType.Fire] = [ + ['Charmander', 'Vulpix', 'Growlithe', 'Ponyta'], + ['Cyndaquil', 'Slugma', 'Houndour', 'Magby'], + ['Torchic', 'Numel'], + ['Chimchar'], + ['Tepig', 'Pansear', 'Darumaka'], + ['Fennekin', 'Litleo'], + ['Litten', 'Salandit'], + ['Scorbunny', 'Sizzlipede'], + ['Fuecoco', 'Charcadet'], + ]; + this.hatchList[EggType.Water] = [ + ['Squirtle', 'Lapras', 'Staryu', 'Slowpoke'], + ['Totodile', 'Wooper', 'Marill', 'Qwilfish'], + ['Mudkip', 'Feebas', 'Clamperl'], + ['Piplup', 'Finneon', 'Buizel'], + ['Oshawott', 'Panpour', 'Tympole'], + ['Froakie', 'Clauncher', 'Skrelp'], + ['Popplio', 'Wimpod', 'Mareanie'], + ['Sobble', 'Chewtle', 'Arrokuda'], + ['Quaxly'], + ]; + this.hatchList[EggType.Grass] = [ + ['Bulbasaur', 'Oddish', 'Tangela', 'Paras'], + ['Chikorita', 'Hoppip', 'Sunkern'], + ['Treecko', 'Tropius', 'Roselia'], + ['Turtwig', 'Snover', 'Budew'], + ['Snivy', 'Pansage', 'Maractus'], + ['Chespin', 'Skiddo', 'Phantump'], + ['Rowlet', 'Morelull', 'Fomantis'], + ['Grookey', 'Gossifleur', 'Applin'], + ['Sprigatito'], + ]; + this.hatchList[EggType.Fighting] = [ + ['Hitmonlee', 'Hitmonchan', 'Machop', 'Mankey'], + ['Tyrogue', 'Heracross'], + ['Makuhita', 'Meditite'], + ['Riolu', 'Croagunk'], + ['Throh', 'Sawk', 'Scraggy'], + ['Pancham', 'Hawlucha'], + ['Crabrawler', 'Stufful'], + ['Falinks', 'Clobbopus', 'Galarian Farfetch\'d'], + ]; + this.hatchList[EggType.Electric] = [ + ['Magnemite', 'Pikachu', 'Voltorb', 'Electabuzz'], + ['Chinchou', 'Mareep', 'Elekid'], + ['Plusle', 'Minun', 'Electrike'], + ['Pachirisu', 'Shinx'], + ['Blitzle', 'Stunfisk', 'Joltik'], + ['Helioptile', 'Dedenne'], + ['Togedemaru'], + ['Toxel', 'Pincurchin', 'Morpeko'], + ]; + this.hatchList[EggType.Dragon] = [ + ['Dratini', 'Dragonair', 'Dragonite'], + [], + ['Bagon', 'Shelgon', 'Salamence'], + ['Gible', 'Gabite', 'Garchomp'], + ['Deino', 'Zweilous', 'Hydreigon'], + ['Goomy', 'Sliggoo', 'Goodra'], + ['Turtonator', 'Drampa', 'Jangmo-o', 'Hakamo-o', 'Kommo-o'], + ['Dreepy', 'Drakloak', 'Dragapult', 'Duraludon'], + ['Frigibax', 'Arctibax', 'Baxcalibur'], + ]; + this.hatchList[EggType.Mystery] = [ + ['Gastly', 'Jigglypuff', 'Geodude', 'Doduo'], + ['Yanma', 'Stantler'], + ['Trapinch', 'Sableye', 'Spoink'], + ['Stunky', 'Bronzor'], + ['Vanillite', 'Drilbur'], + ['Carbink', 'Honedge'], + ['Mudbray', 'Rockruff'], + ['Rolycoly', 'Milcery'], + ]; + BreedingController.initialize(); + } + update(delta) { + } + canAccess() { + return App.game.keyItems.hasKeyItem(KeyItemType.Mystery_egg); + } + fromJSON(json) { + var _a, _b; + if (json == null) { + return; + } + this.eggSlots = (_a = json.eggSlots) !== null && _a !== void 0 ? _a : this.defaults.eggSlots; + this._eggList = this.defaults.eggList; + if (json.eggList !== null) { + const saveEggList = json.eggList; + for (let i = 0; i < this._eggList.length; i++) { + if (saveEggList[i] != null) { + const egg = new Egg(null, null, null); + egg.fromJSON(saveEggList[i]); + this._eggList[i](egg); + } + } + } + this.queueSlots((_b = json.queueSlots) !== null && _b !== void 0 ? _b : this.defaults.queueSlots); + this._queueList(json.queueList ? json.queueList : this.defaults.queueList); + this.hatcheryHelpers.fromJSON(json.hatcheryHelpers || []); + } + toJSON() { + return { + eggList: this.eggList.map(egg => egg() === null ? new Egg() : egg().toJSON()), + eggSlots: this.eggSlots, + queueList: this._queueList(), + queueSlots: this.queueSlots(), + hatcheryHelpers: this.hatcheryHelpers.toJSON(), + }; + } + canBreedPokemon() { + return App.game.party.hasMaxLevelPokemon() && (this.hasFreeEggSlot() || this.hasFreeQueueSlot()); + } + hasFreeEggSlot(isHelper = false) { + let counter = 0; + for (let i = 0; i < this._eggList.length; i++) { + if (!this._eggList[i]().isNone() || (!isHelper && this.hatcheryHelpers.hired()[i])) { + counter++; + } + } + return counter < this._eggSlots(); + } + hasFreeQueueSlot() { + const slots = this.usableQueueSlots(); + return slots && this._queueList().length < slots; + } + gainEgg(e, eggSlot = -1) { + var _a, _b; + if (e.isNone()) { + return false; + } + if (eggSlot === -1) { + // Throw egg in the first empty non-Helper slot + for (let i = 0; i < this._eggList.length; i++) { + if (this._eggList[i]().isNone() && !this.hatcheryHelpers.hired()[i]) { + this._eggList[i](e); + return true; + } + } + } + else { + // Throw egg in the Helper slot if it's empty + if ((_b = (_a = this._eggList)[eggSlot]) === null || _b === void 0 ? void 0 : _b.call(_a).isNone()) { + this._eggList[eggSlot](e); + return true; + } + } + console.error(`Error: Could not place ${EggType[e.type]} Egg`); + return false; + } + gainRandomEgg() { + return this.gainEgg(this.createRandomEgg()); + } + progressEggsBattle(route, region) { + route = MapHelper.normalizeRoute(route, region); + return this.progressEggs(+Math.sqrt(route).toFixed(2)); + } + progressEggs(amount) { + amount *= this.getStepMultiplier(); + amount = Math.round(amount); + let index = this.eggList.length; + let emptySlots = 0; + while (index-- > 0) { + const helper = this.hatcheryHelpers.hired()[index]; + if (helper) { + continue; + } + const egg = this.eggList[index](); + if (egg.isNone() && index + 1 <= this._eggSlots()) { + emptySlots++; + continue; + } + const partyPokemon = egg.partyPokemon(); + if (!egg.isNone() && partyPokemon && partyPokemon.canCatchPokerus() && partyPokemon.pokerus == GameConstants.Pokerus.Uninfected) { + partyPokemon.calculatePokerus(index); + } + egg.addSteps(amount, this.multiplier); + if (this._queueList().length && egg.canHatch()) { + this.hatchPokemonEgg(index, false); + emptySlots++; + } + } + this.hatcheryHelpers.addSteps(amount, this.multiplier); + if (emptySlots) { + // Check for any empty slots between incubating eggs, move them if a gap is found. + // For example, if the first empty slot is index 2 but there are 3 slots with eggs then there is a gap. + const firstEmptySlot = this._eggList.findIndex((egg, i) => egg().isNone() && !this.hatcheryHelpers.hired()[i]); + if (firstEmptySlot > -1) { + const slotsWithEggs = this._eggList.filter((egg, i) => !egg().isNone() && !this.hatcheryHelpers.hired()[i]).length; + if (firstEmptySlot < slotsWithEggs) { + this.moveEggs(); + } + } + // Fill empty egg slots from queue. + while (this._queueList().length && emptySlots--) { + this.nextEggFromQueue(); + } + } + } + getStepMultiplier() { + return this.multiplier.getBonus('eggStep'); + } + addPokemonToHatchery(pokemon) { + // If they have a free eggslot, add the pokemon to the egg now + if (this.hasFreeEggSlot()) { + return this.gainPokemonEgg(pokemon); + } + // If they have a free queue, add the pokemon to the queue now + if (this.hasFreeQueueSlot()) { + return this.addToQueue(pokemon); + } + let message = 'You don\'t have any free egg slots'; + if (this.queueSlots()) { + message += '
    Your queue is full'; + } + Notifier.notify({ + message, + type: NotificationConstants.NotificationOption.warning, + }); + return false; + } + addToQueue(pokemon) { + const queueSize = this._queueList().length; + if (queueSize < this.usableQueueSlots()) { + pokemon.breeding = true; + this._queueList.push(pokemon.id); + return true; + } + return false; + } + removeFromQueue(index) { + const queueSize = this._queueList().length; + if (queueSize > index) { + const pokemonId = this._queueList.splice(index, 1)[0]; + App.game.party.getPokemon(pokemonId).breeding = false; + return true; + } + return false; + } + clearQueue(shouldConfirm = false) { + if (shouldConfirm) { + Notifier.confirm({ + title: 'Clear Queue', + message: 'Are you sure?\n\nAll Pokémon will be removed from your breeding queue.', + type: NotificationConstants.NotificationOption.warning, + confirm: 'Clear', + }).then(confirmed => { + if (confirmed) { + while (this._queueList().length) { + this.removeFromQueue(0); + } + } + }); + } + else { + while (this._queueList().length) { + this.removeFromQueue(0); + } + } + } + gainPokemonEgg(pokemon, eggSlot = -1) { + if (eggSlot === -1 && !this.hasFreeEggSlot()) { + // Check that an empty, non-Helper slot exists + Notifier.notify({ + message: 'You don\'t have any free egg slots', + type: NotificationConstants.NotificationOption.warning, + }); + return false; + } + const egg = this.createEgg(pokemon.id); + const success = this.gainEgg(egg, eggSlot); + if (success && pokemon instanceof PartyPokemon) { + pokemon.breeding = true; + } + return success; + } + hatchPokemonEgg(index, nextEgg = true) { + const egg = this._eggList[index](); + const hatched = egg.hatch(); + if (hatched) { + this._eggList[index](new Egg()); + if (nextEgg) { + this.moveEggs(); + if (this._queueList().length) { + this.nextEggFromQueue(); + } + } + } + } + nextEggFromQueue() { + const nextEgg = this.createEgg(this._queueList.shift()); + this.gainEgg(nextEgg); + if (!this._queueList().length) { + Notifier.notify({ + message: 'Hatchery queue is empty.', + type: NotificationConstants.NotificationOption.success, + timeout: 1e4, + sound: NotificationConstants.NotificationSound.Hatchery.empty_queue, + setting: NotificationConstants.NotificationSetting.Hatchery.empty_queue, + }); + } + } + moveEggs() { + const tempEggList = App.game.breeding._eggList.filter((egg, i) => egg().type != EggType.None && !this.hatcheryHelpers.hired()[i]); + let tempEggIndex = 0; + this._eggList.forEach((egg, index) => { + if (this.hatcheryHelpers.hired()[index]) { + return; + } + egg(tempEggList[tempEggIndex] ? tempEggList[tempEggIndex++]() : new Egg()); + }); + } + createEgg(pokemonId, type = EggType.Pokemon) { + const dataPokemon = PokemonHelper.getPokemonById(pokemonId); + return new Egg(type, this.getSteps(dataPokemon.eggCycles), pokemonId); + } + createTypedEgg(type) { + const hatchList = this.hatchList[type]; + const hatchable = hatchList.slice(0, player.highestRegion() + 1).filter(list => list.length); + // highest region has 1/ratio chance, next highest has 1/(ratio ^ 2), etc. + // Leftover is given to Kanto, making Kanto and Johto equal chance + const ratio = 2; + const possibleHatches = GameConstants.expRandomElement(hatchable, ratio); + const pokemonName = Rand.fromArray(possibleHatches); + const pokemonId = PokemonHelper.getPokemonByName(pokemonName).id; + return this.createEgg(pokemonId, type); + } + createRandomEgg() { + const type = +Rand.fromArray(Object.keys(this.hatchList)); + const egg = this.createTypedEgg(type); + egg.type = EggType.Mystery; + return egg; + } + createFossilEgg(fossil) { + const pokemonName = GameConstants.FossilToPokemon[fossil]; + const pokemonNativeRegion = PokemonHelper.calcNativeRegion(pokemonName); + let fossilEgg; + if (pokemonNativeRegion > player.highestRegion()) { + Notifier.notify({ + message: `You must reach ${GameConstants.camelCaseToString(GameConstants.Region[pokemonNativeRegion])} before you can uncover this fossil Pokémon!`, + type: NotificationConstants.NotificationOption.warning, + timeout: 5e3, + }); + fossilEgg = new Egg(); + } + else { + const pokemonId = PokemonHelper.getPokemonByName(pokemonName).id; + fossilEgg = this.createEgg(pokemonId, EggType.Fossil); + } + return fossilEgg; + } + getSteps(eggCycles) { + if (eggCycles === undefined) { + return 500; + } + else { + return eggCycles * GameConstants.EGG_CYCLE_MULTIPLIER; + } + } + calculateBaseForm(pokemonName) { + const devolution = pokemonBabyPrevolutionMap[pokemonName]; + // Base form of Pokemon depends on which regions players unlocked + if (!devolution || PokemonHelper.calcNativeRegion(devolution) > player.highestRegion()) { + // No devolutions at all + // No further devolutions in current unlocked regions + return pokemonName; + } + else { + // Recurse onto its devolution + return devolution; + } + } + getEggSlotCost(slot) { + return 500 * slot; + } + buyEggSlot() { + const cost = this.nextEggSlotCost(); + if (App.game.wallet.loseAmount(cost)) { + this.gainEggSlot(); + } + } + nextEggSlotCost() { + return new Amount(this.getEggSlotCost(this.eggSlots + 1), GameConstants.Currency.questPoint); + } + // Knockout getters/setters + get eggSlots() { + return this._eggSlots(); + } + set eggSlots(value) { + this._eggSlots(value); + } + get queueList() { + return this._queueList; + } + gainEggSlot() { + if (this.eggSlots === this.eggList.length) { + console.error('Cannot gain another eggslot.'); + return; + } + this.eggSlots += 1; + } + gainQueueSlot(amt = 1) { + GameHelper.incrementObservable(this.queueSlots, amt); + } + queueSlotsGainedFromRegion(region) { + // bewtween 4 → 32 queue slots gained when completing a region + return Math.min(32, Math.max(4, 4 * Math.pow(2, region - 1))); + } + get eggList() { + return this._eggList; + } + set eggList(value) { + this._eggList = value; + } + getAllCaughtStatus() { + return GameHelper.enumNumbers(EggType).reduce((status, type) => { + return this.hatchList[type] + ? Math.min(status, this.getTypeCaughtStatus(type)) + : status; + }, CaughtStatus.CaughtShiny); + } + getTypeCaughtStatus(type) { + const hatchList = this.hatchList[type]; + if (!hatchList) { + return CaughtStatus.NotCaught; + } + const hatchable = hatchList.slice(0, player.highestRegion() + 1).flat(); + return hatchable.reduce((status, pname) => { + return Math.min(status, PartyController.getCaughtStatusByName(pname)); + }, CaughtStatus.CaughtShiny); + } + checkCloseModal() { + if (Settings.getSetting('hideHatchery').value == 'queue' && !this.hasFreeEggSlot() && !this.hasFreeQueueSlot()) { + $('#breedingModal').modal('hide'); + } + if (Settings.getSetting('hideHatchery').value == 'egg' && !this.hasFreeEggSlot()) { + $('#breedingModal').modal('hide'); + } + } + updateQueueSizeLimit() { + const size = Settings.getSetting('breedingQueueSizeSetting').value; + if (size == 0) { + this.clearQueue(); + } + else if (size > 0) { + for (let i = this.queueList().length; i > this.usableQueueSlots(); i--) { + this.removeFromQueue(i - 1); + } + } + } + fireAllButtonTooltip() { + let str = ''; + this.hatcheryHelpers.hired().forEach(x => { + str += `  ${x.name}  ${(x.cost.amount).toLocaleString('en-US')}
    `; + }); + return str; + } +} +/// +class PartyController { + static getCaughtStatusByName(name) { + return this.getCaughtStatus(PokemonHelper.getPokemonByName(name).id); + } + static getCaughtStatus(id) { + if (App.game.party.alreadyCaughtPokemon(id, true)) { + return CaughtStatus.CaughtShiny; + } + if (App.game.party.alreadyCaughtPokemon(id, false)) { + return CaughtStatus.Caught; + } + return CaughtStatus.NotCaught; + } + static getEvs(id) { + var _a, _b; + return (_b = (_a = App.game.party.getPokemon(id)) === null || _a === void 0 ? void 0 : _a.evs()) !== null && _b !== void 0 ? _b : 0; + } + static getEvsByName(name) { + return this.getEvs(PokemonHelper.getPokemonByName(name).id); + } + static getPokerusStatusByName(name) { + return this.getPokerusStatus(PokemonHelper.getPokemonByName(name).id); + } + static getPokerusStatus(id) { + var _a, _b; + return (_b = (_a = App.game.party.getPokemon(id)) === null || _a === void 0 ? void 0 : _a.pokerus) !== null && _b !== void 0 ? _b : GameConstants.Pokerus.Uninfected; + } + static getPokemonStoneEvos(partyPokemon, evoType) { + var _a, _b; + return (_b = (_a = partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.evolutions) === null || _a === void 0 ? void 0 : _a.filter((evo) => evo.trigger === EvoTrigger.STONE + && evo.stone == evoType + && PokemonHelper.calcNativeRegion(evo.evolvedPokemon) <= player.highestRegion() + && !evo.restrictions.find(req => (req instanceof InRegionRequirement && !req.isCurrentlyPossible()) + || (req instanceof MaxRegionRequirement && !req.isCompleted())))) !== null && _b !== void 0 ? _b : []; + } + static getPokemonsWithEvolution(evoType) { + return App.game.party.caughtPokemon.filter((partyPokemon) => { + return PartyController.getPokemonStoneEvos(partyPokemon, evoType).length > 0; + }).sort((a, b) => a.id - b.id); + } + static getStoneEvolutions(id, getStatus, evoType) { + const pokemon = App.game.party.getPokemon(id); + return PartyController.getPokemonStoneEvos(pokemon, evoType) + .map((evo) => ({ + status: getStatus(evo), + evs: PartyController.getEvsByName(evo.evolvedPokemon), + locked: !EvolutionHandler.isSatisfied(evo), + lockHint: evo.restrictions.filter(r => !r.isCompleted()).map(r => r.hint()).join('
    '), + })); + } + static getStoneEvolutionsCaughtData(id, evoType) { + const getStatus = (evo) => this.getCaughtStatusByName(evo.evolvedPokemon); + return this.getStoneEvolutions(id, getStatus, evoType); + } + static getStoneEvolutionsPokerusData(id, evoType) { + const getStatus = (evo) => this.getPokerusStatusByName(evo.evolvedPokemon); + return this.getStoneEvolutions(id, getStatus, evoType); + } + static hasMultipleStoneEvolutionsAvailable(pokemonName, evoType) { + const pokemon = App.game.party.getPokemonByName(pokemonName); + // We only want to check against pokemon that have multiple possible evolutions that can happen now + return PartyController.getPokemonStoneEvos(pokemon, evoType).length > 1; + } + static removeVitaminFromParty(vitamin, amount = Infinity, shouldConfirm = true) { + return __awaiter(this, void 0, void 0, function* () { + if (shouldConfirm) { + if (!(yield Notifier.confirm({ + title: `Remove All ${GameConstants.VitaminType[vitamin]}?`, + message: `All ${GameConstants.VitaminType[vitamin]} will be removed from every Pokémon in your party.`, + type: NotificationConstants.NotificationOption.warning, + confirm: 'OK', + }))) { + return; + } + } + let arePokemonInHatchery = false; + App.game.party.caughtPokemon.forEach((p) => { + if (p.vitaminsUsed[vitamin]() > 0 && !p.breeding) { + p.removeVitamin(vitamin, amount); + } + if (p.breeding && !arePokemonInHatchery) { + arePokemonInHatchery = true; + } + }); + if (arePokemonInHatchery) { + Notifier.notify({ + message: `${GameConstants.VitaminType[vitamin]} couldn\'t be modified for Pokémon in Hatchery or Queue.`, + type: NotificationConstants.NotificationOption.warning, + }); + } + }); + } + static removeAllVitaminsFromParty(shouldConfirm = true) { + return __awaiter(this, void 0, void 0, function* () { + if (shouldConfirm) { + if (!(yield Notifier.confirm({ + title: 'Remove All Vitamins?', + message: 'All vitamins will be removed from every Pokémon in your party.', + type: NotificationConstants.NotificationOption.warning, + confirm: 'OK', + }))) { + return; + } + } + const vitamins = GameHelper.enumNumbers(GameConstants.VitaminType); + let arePokemonInHatchery = false; + App.game.party.caughtPokemon.forEach((p) => { + vitamins.forEach((v) => { + if (p.vitaminsUsed[v]() > 0 && !p.breeding) { + p.removeVitamin(v, Infinity); + } + if (p.breeding && !arePokemonInHatchery) { + arePokemonInHatchery = true; + } + }); + }); + if (arePokemonInHatchery) { + Notifier.notify({ + message: 'Vitamins couldn\'t be modified for Pokémon in Hatchery or Queue.', + type: NotificationConstants.NotificationOption.warning, + }); + } + }); + } + static getMaxLevelPokemonList() { + return App.game.party.caughtPokemon.filter((partyPokemon) => { + return !partyPokemon.breeding && partyPokemon.level >= 100; + }); + } + static getVitaminFilteredList() { + return App.game.party.caughtPokemon.filter((pokemon) => { + if (!Settings.getSetting('vitaminSearchFilter').regex().test(pokemon.displayName)) { + return false; + } + if (Settings.getSetting('vitaminRegionFilter').observableValue() > -2) { + if (PokemonHelper.calcNativeRegion(pokemon.name) !== Settings.getSetting('vitaminRegionFilter').observableValue()) { + return false; + } + } + const type = Settings.getSetting('vitaminTypeFilter').observableValue(); + if (type > -2 && !pokemonMap[pokemon.name].type.includes(type)) { + return false; + } + if (pokemon.vitaminUsesRemaining() == 0 && Settings.getSetting('vitaminHideMaxedPokemon').observableValue()) { + return false; + } + if (pokemon.shiny && Settings.getSetting('vitaminHideShinyPokemon').observableValue()) { + return false; + } + return true; + }); + } + static getHeldItemFilteredList() { + return App.game.party.caughtPokemon.filter((pokemon) => { + var _a, _b; + if (!((_a = HeldItem.heldItemSelected()) === null || _a === void 0 ? void 0 : _a.canUse(pokemon))) { + return false; + } + const testString = Settings.getSetting('heldItemDropdownPokemonOrItem').observableValue() === 'pokemon' + ? pokemon.displayName : (_b = pokemon.heldItem()) === null || _b === void 0 ? void 0 : _b.displayName; + if (!Settings.getSetting('heldItemSearchFilter').regex().test(testString)) { + return false; + } + if (Settings.getSetting('heldItemRegionFilter').observableValue() > -2) { + if (PokemonHelper.calcNativeRegion(pokemon.name) !== Settings.getSetting('heldItemRegionFilter').observableValue()) { + return false; + } + } + const type = Settings.getSetting('heldItemTypeFilter').observableValue(); + if (type > -2 && !pokemonMap[pokemon.name].type.includes(type)) { + return false; + } + if (Settings.getSetting('heldItemHideHoldingPokemon').observableValue() && pokemon.heldItem()) { + return false; + } + if (Settings.getSetting('heldItemHideHoldingThisItem').observableValue() && pokemon.heldItem() === HeldItem.heldItemSelected()) { + return false; + } + return true; + }); + } + static getConsumableFilteredList() { + return App.game.party.caughtPokemon.filter((pokemon) => { + const consumable = ItemList[ConsumableController.currentlySelectedName()]; + if (!consumable.canUse(pokemon)) { + return false; + } + if (!Settings.getSetting('consumableSearchFilter').regex().test(pokemon.displayName)) { + return false; + } + if (Settings.getSetting('consumableRegionFilter').observableValue() > -2) { + if (PokemonHelper.calcNativeRegion(pokemon.name) !== Settings.getSetting('consumableRegionFilter').observableValue()) { + return false; + } + } + const type = Settings.getSetting('consumableTypeFilter').observableValue(); + if (type > -2 && !pokemonMap[pokemon.name].type.includes(type)) { + return false; + } + if (Settings.getSetting('consumableHideShinyPokemon').observableValue() && pokemon.shiny) { + return false; + } + return true; + }); + } + static calculateRegionalMultiplier(pokemon, region) { + if (region > -1 && PokemonHelper.calcNativeRegion(pokemon.name) !== region) { + return App.game.party.getRegionAttackMultiplier(); + } + return 1.0; + } + static moveCategoryPokemon(fromCategory, toCategory) { + // Category should exist + if (!PokemonCategories.categories().some((c) => c.id === toCategory)) { + return; + } + if (fromCategory === toCategory) { + return; + } + App.game.party.caughtPokemon.forEach((p) => { + if (p.category.includes(fromCategory)) { + if (toCategory > 0) { + p.addCategory(toCategory); + } + p.removeCategory(fromCategory); + } + }); + } + static addCategory(pokemonList, category, shouldConfirm = true) { + return __awaiter(this, void 0, void 0, function* () { + if (!pokemonList.length) { + return; + } + if (shouldConfirm) { + const categoryName = PokemonCategories.categories().find((c) => c.id === category).name(); + if (!(yield Notifier.confirm({ + title: 'Batch Add Category', + message: `Add the ${categoryName} category to ${pokemonList.length.toLocaleString('en-US')} Pokémon?`, + type: NotificationConstants.NotificationOption.warning, + confirm: 'Yes', + }))) { + return; + } + } + pokemonList.forEach((p) => p.addCategory(category)); + }); + } + static removeCategory(pokemonList, category, shouldConfirm = true) { + return __awaiter(this, void 0, void 0, function* () { + if (!pokemonList.length) { + return; + } + if (shouldConfirm) { + const categoryName = PokemonCategories.categories().find((c) => c.id === category).name(); + if (!(yield Notifier.confirm({ + title: 'Batch Remove Category', + message: `Remove the ${categoryName} category from ${pokemonList.length.toLocaleString('en-US')} Pokémon?`, + type: NotificationConstants.NotificationOption.warning, + confirm: 'Yes', + }))) { + return; + } + } + pokemonList.forEach((p) => p.removeCategory(category)); + }); + } + static compareBy(option, direction, region = -1) { + return function (a, b) { + let res, dir = (direction) ? -1 : 1; + const config = SortOptionConfigs[option]; + let aValue = config.getValue(a); + let bValue = config.getValue(b); + // Apply regional debuff if needed + if (region > -1 && [SortOptions.attack, SortOptions.breedingEfficiency, SortOptions.attackBonus].includes(option)) { + aValue *= PartyController.calculateRegionalMultiplier(a, region); + bValue *= PartyController.calculateRegionalMultiplier(b, region); + } + if (option === SortOptions.category) { + aValue = direction ? Math.max(...aValue) : Math.min(...aValue); + bValue = direction ? Math.max(...bValue) : Math.min(...bValue); + } + if (config.invert) { + dir *= -1; + } + //Compare by provided property + if (aValue == bValue) { + //If they are equal according to provided property, sort by id + return a.id - b.id; + } + else if (aValue < bValue) { + res = -1; + } + else if (aValue > bValue) { + res = 1; + } + else { + res = 0; + } + return res * dir; + }; + } +} +PartyController.getSortedList = ko.pureComputed(() => { + const list = [...App.game.party.caughtPokemon]; + return list.sort(PartyController.compareBy(Settings.getSetting('partySort').observableValue(), Settings.getSetting('partySortDirection').observableValue())); +}).extend({ rateLimit: 500 }); +PartyController.vitaminSortedList = []; +PartyController.getVitaminSortedList = ko.pureComputed(() => { + // If the vitamin modal is open, we should sort it. + if (DisplayObservables.modalState.pokemonVitaminModal === 'show' || DisplayObservables.modalState.pokemonVitaminExpandedModal === 'show') { + PartyController.vitaminSortedList = PartyController.getVitaminFilteredList(); + return PartyController.vitaminSortedList.sort(PartyController.compareBy(Settings.getSetting('vitaminSort').observableValue(), Settings.getSetting('vitaminSortDirection').observableValue())); + } + return PartyController.vitaminSortedList; +}).extend({ rateLimit: 100 }); +PartyController.heldItemSortedList = []; +PartyController.getHeldItemSortedList = ko.pureComputed(() => { + // If the held item modal is open, we should sort it. + if (DisplayObservables.modalState.heldItemModal === 'show') { + PartyController.heldItemSortedList = PartyController.getHeldItemFilteredList(); + return PartyController.heldItemSortedList.sort(PartyController.compareBy(Settings.getSetting('heldItemSort').observableValue(), Settings.getSetting('heldItemSortDirection').observableValue())); + } + return PartyController.heldItemSortedList; +}).extend({ rateLimit: 100 }); +PartyController.consumableSortedList = []; +PartyController.getConsumableSortedList = ko.pureComputed(() => { + // If the consumable modal is open, we should sort it. + if (DisplayObservables.modalState.consumableModal === 'show') { + PartyController.consumableSortedList = PartyController.getConsumableFilteredList(); + return PartyController.consumableSortedList.sort(PartyController.compareBy(Settings.getSetting('consumableSort').observableValue(), Settings.getSetting('consumableSortDirection').observableValue())); + } + return PartyController.consumableSortedList; +}).extend({ rateLimit: 100 }); +PartyController.pokemonsWithHeldItemSortedList = []; +PartyController.getPokemonsWithHeldItemSortedList = ko.pureComputed(() => { + // If the held item modal is open, we should sort it. + if (DisplayObservables.modalState.heldItemModal === 'show') { + PartyController.pokemonsWithHeldItemSortedList = App.game.party.caughtPokemon.filter(p => p.heldItem()); + return PartyController.pokemonsWithHeldItemSortedList.sort(PartyController.compareBy(Settings.getSetting('heldItemSort').observableValue(), Settings.getSetting('heldItemSortDirection').observableValue())); + } + return PartyController.pokemonsWithHeldItemSortedList; +}).extend({ rateLimit: 500 }); +PartyController; +/// +/// +/// +/// +/// +class BreedingController { + static initialize() { + // Track view settings for hatchery list rerendering + const hatcheryListSettings = [...breedingFilterSettingKeys, 'hatcherySort', 'hatcherySortDirection']; + hatcheryListSettings.forEach((setting) => { + Settings.getSetting(setting).observableValue.subscribe(() => { + BreedingController.viewResetWaiting(true); + BreedingController.hatcherySortedFilteredList.evaluateEarly(); + }); + }); + // Reset hatchery display upon modal close + DisplayObservables.modalState.breedingModalObservable.subscribe((modalState) => { + // Resetting scrolling only works before modal is fully hidden + if (modalState === 'hide') { + BreedingController.scrollToTop(); + BreedingController.resetFilteredListNotifier.notifySubscribers(); + } + else if (modalState === 'hidden') { + BreedingController.resetHatcheryView(); + } + }); + } + static openBreedingModal() { + if (App.game.breeding.canAccess()) { + $('#breedingModal').modal('show'); + } + else { + Notifier.notify({ + message: 'You do not have access to the Day Care yet.\nClear Route 3 first.', + type: NotificationConstants.NotificationOption.warning, + }); + } + } + static getEggImage(egg) { + let eggType = EggType[egg.type].toLowerCase(); + if (eggType == 'pokemon') { + const dataPokemon = PokemonHelper.getPokemonById(egg.pokemon); + eggType = String(PokemonType[dataPokemon.type1]).toLowerCase(); + } + else if (eggType == 'fossil') { + eggType = GameConstants.PokemonToFossil[PokemonHelper.getPokemonById(egg.pokemon).name]; + } + return `assets/images/breeding/${eggType}.png`; + } + static getEggCssClass(egg) { + const animationType = Settings.getSetting('eggAnimation').observableValue(); + if (animationType === 'none') { + return ''; + } + if (egg.progress() >= 100) { + return 'hatching'; + } + return (animationType === 'almost' && egg.stepsRemaining() <= 50) ? 'hatchingSoon' : ''; + } + static getEggSpots(pokemonName) { + const pokemon = pokemonMap[pokemonName]; + const seed = pokemon.id * pokemon.type.reduce((a, b) => a * (b + 1), 1); + SeededRand.seed(seed); + SeededRand.seed(SeededRand.intBetween(0, 1000)); + return SeededRand.fromArray(this.spotTypes); + } + static getEggPokemonName(egg) { + var _a; + return egg.type === EggType.Pokemon || egg.type === EggType.Fossil ? (_a = egg.partyPokemon()) === null || _a === void 0 ? void 0 : _a.name : null; + } + static formatSearch(value) { + if (/[^\d]/.test(value)) { + // non-integer, use as name filter + Settings.setSettingByName('breedingNameFilter', value); + Settings.setSettingByName('breedingIDFilter', -1); + } + else { + // integer, use as ID filter + Settings.setSettingByName('breedingIDFilter', (value != '' ? +value : -1)); + Settings.setSettingByName('breedingNameFilter', ''); + } + } + static getSearchString() { + const name = Settings.getSetting('breedingNameFilter').value; + const id = Settings.getSetting('breedingIDFilter').value; + return id == -1 ? name : id; + } + static getRegionFilterString() { + const unlockedRegionsMask = (2 << player.highestRegion()) - 1; + const showRegions = Settings.getSetting('breedingRegionFilter').observableValue() & unlockedRegionsMask; + if (showRegions == unlockedRegionsMask) { + return 'All'; + } + else if (showRegions > 0) { + const highestBit = Math.floor(Math.log2(showRegions)); + let txt = GameConstants.camelCaseToString(GameConstants.Region[highestBit]); + if (showRegions > (1 << highestBit)) { + txt += ' & more'; + } + return txt; + } + else { + return 'None'; + } + } + static isPureType(pokemon, type) { + const pokemonData = pokemonMap[pokemon.name]; + return ((type == null || pokemonData.type[0] === type) && (pokemonData.type[1] == undefined || pokemonData.type[1] == PokemonType.None)); + } + // Value displayed at bottom of image + static getDisplayValue(pokemon) { + const pokemonData = pokemonMap[pokemon.name]; + switch (Settings.getSetting('breedingDisplayTextSetting').observableValue()) { + case 'attackBonus': return `Attack Bonus: ${Math.floor(pokemon.getBreedingAttackBonus() * BreedingController.calculateRegionalMultiplier(pokemon)).toLocaleString('en-US')}`; + case 'baseAttack': return `Base Attack: ${pokemon.baseAttack.toLocaleString('en-US')}`; + case 'eggSteps': return `Egg Steps: ${pokemon.getEggSteps().toLocaleString('en-US')}`; + case 'timesHatched': return `Hatches: ${App.game.statistics.pokemonHatched[pokemonData.id]().toLocaleString('en-US')}`; + case 'breedingEfficiency': return `Efficiency: ${(pokemon.breedingEfficiency() * BreedingController.calculateRegionalMultiplier(pokemon)).toLocaleString('en-US', { maximumFractionDigits: 3 })}`; + case 'stepsPerAttack': return `Steps/Att: ${(pokemon.getEggSteps() / (pokemon.getBreedingAttackBonus() * BreedingController.calculateRegionalMultiplier(pokemon))).toLocaleString('en-US', { maximumFractionDigits: 3 })}`; + case 'dexId': return `#${pokemon.id <= 0 ? '???' : Math.floor(pokemon.id).toString().padStart(3, '0')}`; + case 'vitamins': return `Vitamins: ${pokemon.totalVitaminsUsed()}`; + case 'evs': return `EVs: ${pokemon.evs().toLocaleString('en-US')}`; + case 'attack': + default: + return `Attack: ${Math.floor(pokemon.attack * BreedingController.calculateRegionalMultiplier(pokemon)).toLocaleString('en-US')}`; + } + } + static calculateRegionalMultiplier(pokemon) { + // Check if regional debuff is active + if (App.game.challenges.list.regionalAttackDebuff.active()) { + // Check if regional debuff being applied for sorting + const regionalAttackDebuff = Settings.getSetting('breedingRegionalAttackDebuffSetting').observableValue(); + if (regionalAttackDebuff > -1 && PokemonHelper.calcNativeRegion(pokemon.name) !== regionalAttackDebuff) { + return App.game.party.getRegionAttackMultiplier(); + } + } + return 1.0; + } + static resetHatcheryView() { + BreedingController.scrollToTop(); + BreedingController.resetHatcheryFlag.notifySubscribers(); + BreedingController.viewResetWaiting(false); + BreedingController.viewResetReady = false; + } + static scrollToTop() { + document.querySelector('#breeding-pokemon-list-container .scrolling-div-breeding-list').scrollTop = 0; + } +} +BreedingController.spotTypes = [ + ` + + + + + + + + + + `, + '', + '', + '', + ` + + + + + + + + + + + + + + + + + + + + + `, + ` + + + + + + + + + + + + + + + + + + + + + `, + ` + + + `, + '', + '', + ` + + + `, + ` + + + + + + + + + + + + + `, + '', + '', +]; +// Queue size limit setting +BreedingController.queueSizeLimit = ko.observable(-1); +// Used to pause hatchery list until all the filteredList changes are available +// Otherwise changing the filters would render removing and adding entries at different times +BreedingController.viewResetWaiting = ko.observable(false); +BreedingController.viewResetReady = false; +// Pausable access to the sorted list for the modal, with view logic +BreedingController._cachedSortedFilteredList = []; +BreedingController.viewSortedFilteredList = ko.pureComputed(() => { + // Pause updates while the modal is closed + if (DisplayObservables.modalState.breedingModal === 'show') { + BreedingController._cachedSortedFilteredList = BreedingController.hatcherySortedFilteredList(); + // Finish resetting the LazyLoader display after filters change + if (BreedingController.viewResetReady) { + BreedingController.resetHatcheryView(); + } + } + return BreedingController._cachedSortedFilteredList; +}); +// Sorted list of pokemon that match hatchery filters +BreedingController.hatcherySortedFilteredList = ko.pureComputed(() => { + const hatcheryList = Array.from(BreedingController.hatcheryFilteredList()); + // Don't adjust attack based on region if debuff is disabled + const region = App.game.challenges.list.regionalAttackDebuff.active() ? Settings.getSetting('breedingRegionalAttackDebuffSetting').observableValue() : -1; + hatcheryList.sort(PartyController.compareBy(Settings.getSetting('hatcherySort').observableValue(), Settings.getSetting('hatcherySortDirection').observableValue(), region)); + // If a filter or sort order just changed + if (BreedingController.viewResetWaiting.peek()) { + // Ready to rerender now that the list is up to date + BreedingController.viewResetReady = true; + } + return hatcheryList; +}).extend({ skippableRateLimit: 500 }); // Lets us rerender immediately after filter changes +// Filters for pokemon that match hatchery filters +BreedingController.hatcheryFilteredList = ko.pureComputed(() => { + // Subscribe to force view resets even when none of the pokemon.matchesHatcheryFilters() computeds change + BreedingController.resetFilteredListNotifier(); + return App.game.party.caughtPokemon.filter((pokemon) => pokemon.matchesHatcheryFilters()); +}).extend({ rateLimit: 100 }); // deferUpdates isn't good enough to prevent lag +// Used to reset the LazyLoaderdisplay +BreedingController.resetHatcheryFlag = ko.computed(() => DisplayObservables.modalState.breedingModal === 'hidden'); +BreedingController.resetFilteredListNotifier = ko.observable(null); +/// +/// +/// +class Egg { + constructor(type = EggType.None, totalSteps = 0, pokemon = 0, // MissingNo. + steps = 0, shinyChance = GameConstants.SHINY_CHANCE_BREEDING, notified = false) { + this.type = type; + this.totalSteps = totalSteps; + this.pokemon = pokemon; + this.shinyChance = shinyChance; + this.notified = notified; + this.saveKey = 'egg'; + this.defaults = {}; + this.stepsRequired = this.totalSteps; + this.steps = ko.observable(steps); + this.partyPokemon = ko.observable(); + this.init(); + } + init(initial = false) { + this.progress = ko.pureComputed(function () { + return this.steps() / this.stepsRequired * 100; + }, this); + this.progressText = ko.pureComputed(function () { + var _a; + return `${this.steps().toLocaleString('en-US')} / ${(_a = this.stepsRequired) === null || _a === void 0 ? void 0 : _a.toLocaleString('en-US')}`; + }, this); + this.stepsRemaining = ko.pureComputed(function () { + return this.stepsRequired - this.steps(); + }, this); + if (this.pokemon) { + const dataPokemon = PokemonHelper.getPokemonById(this.pokemon); + this.pokemonType1 = dataPokemon.type1; + this.pokemonType2 = dataPokemon.type2 === PokemonType.None ? dataPokemon.type1 : dataPokemon.type2; + } + else { + this.pokemonType1 = PokemonType.Normal; + this.pokemonType2 = PokemonType.Normal; + } + this.setPartyPokemon(); + } + setPartyPokemon() { + var _a, _b; + // Bind the party pokemon + if (!this.partyPokemon() && ((_a = App.game) === null || _a === void 0 ? void 0 : _a.party)) { + this.partyPokemon(this.type !== EggType.None ? App.game.party.getPokemon(PokemonHelper.getPokemonById(this.pokemon).id) : null); + } + if ((_b = App.game) === null || _b === void 0 ? void 0 : _b.party) { + if (this.partyPokemon()) { + // Reduce total steps based on amount of Carbos used + this.stepsRequired = this.partyPokemon().getEggSteps(); + } + else { + // The Pokémon is not in our party - this might be a shop egg. + this.stepsRequired = this.totalSteps; + } + } + } + isNone() { + return this.type === EggType.None; + } + updateShinyChance(steps, multiplier) { + const stepsChance = GameConstants.SHINY_CHANCE_BREEDING / multiplier.getBonus('shiny'); + const newChance = ((this.shinyChance * this.steps()) + (stepsChance * steps)) / (this.steps() + steps); + this.shinyChance = newChance; + } + addSteps(amount, multiplier, helper = false) { + // If no egg in slot, or no steps remaining, don't do anything + if (this.isNone() || this.stepsRemaining() <= 0) { + return; + } + // Need to add at least 1 step + if (!+amount) { + amount = 1; + } + // Increase our steps + this.updateShinyChance(amount, multiplier); + this.steps(this.steps() + amount); + // Notify that the egg is ready to hatch + if (this.canHatch() && !helper && !this.notified) { + let notifMessage; + if (this.type == EggType.Pokemon) { + notifMessage = `${PokemonHelper.displayName(PokemonHelper.getPokemonById(this.pokemon).name)()} is ready to hatch!`; + } + else if (this.type == EggType.Fossil) { + notifMessage = `The ${GameConstants.PokemonToFossil[PokemonHelper.getPokemonById(this.pokemon).name]} is ready to revive!`; + } + else { + notifMessage = 'An egg is ready to hatch!'; + } + Notifier.notify({ + message: notifMessage, + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.Hatchery.ready_to_hatch, + setting: NotificationConstants.NotificationSetting.Hatchery.ready_to_hatch, + }); + this.notified = true; + } + } + canHatch() { + return !this.isNone() && this.steps() >= this.stepsRequired; + } + hatch(efficiency = 100, helper = false) { + if (!this.canHatch()) { + return false; + } + const shiny = PokemonFactory.generateShiny(this.shinyChance, true); + const partyPokemon = this.partyPokemon(); + // If the party pokemon exist, increase it's damage output + const pokemonID = PokemonHelper.getPokemonById(this.pokemon).id; + const gender = PokemonFactory.generateGenderById(pokemonID); + const shadow = GameConstants.ShadowStatus.None; + if (partyPokemon) { + // Increase attack + const shinyMultiplier = shiny ? GameConstants.BREEDING_SHINY_ATTACK_MULTIPLIER : 1; + partyPokemon.attackBonusPercent += Math.max(1, Math.round((GameConstants.BREEDING_ATTACK_BONUS + partyPokemon.vitaminsUsed[GameConstants.VitaminType.Calcium]()) * (efficiency / 100)) * shinyMultiplier); + partyPokemon.attackBonusAmount += Math.max(0, Math.round(partyPokemon.vitaminsUsed[GameConstants.VitaminType.Protein]() * (efficiency / 100)) * shinyMultiplier); + // If breeding (not store egg), reset level, reset evolution check + if (partyPokemon.breeding) { + partyPokemon.exp = 0; + partyPokemon.level = 1; + partyPokemon.breeding = false; + partyPokemon.level = partyPokemon.calculateLevelFromExp(); + } + // Update pokerus status + if (partyPokemon.pokerus == GameConstants.Pokerus.Infected) { + partyPokemon.pokerus = GameConstants.Pokerus.Contagious; + } + } + if (shiny) { + Notifier.notify({ + message: `✨ You hatched a shiny ${PokemonHelper.displayName(PokemonHelper.getPokemonById(this.pokemon).name)()}! ✨`, + pokemonImage: PokemonHelper.getImage(PokemonHelper.getPokemonById(this.pokemon).id, shiny), + type: NotificationConstants.NotificationOption.warning, + sound: NotificationConstants.NotificationSound.General.shiny_long, + setting: NotificationConstants.NotificationSetting.Hatchery.hatched_shiny, + }); + const pokemon = PokemonHelper.getPokemonById(this.pokemon).name; + App.game.logbook.newLog(LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemon(pokemonID, true) + ? createLogContent.hatchedShinyDupe({ pokemon }) + : createLogContent.hatchedShiny({ pokemon })); + } + else { + Notifier.notify({ + message: `You hatched ${GameHelper.anOrA(PokemonHelper.getPokemonById(this.pokemon).name)} ${PokemonHelper.displayName(PokemonHelper.getPokemonById(this.pokemon).name)()}!`, + pokemonImage: PokemonHelper.getImage(PokemonHelper.getPokemonById(this.pokemon).id), + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Hatchery.hatched, + }); + } + App.game.party.gainPokemonById(pokemonID, shiny, undefined, gender); + // Capture base form if not already caught. This helps players get Gen2 Pokemon that are base form of Gen1 + if ((partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.heldItem()) !== ItemList.Everstone) { // Everstone prevents baby forms + const pokemonName = PokemonHelper.getPokemonById(this.pokemon).name; + const baseFormName = App.game.breeding.calculateBaseForm(pokemonName); + const baseForm = PokemonHelper.getPokemonByName(baseFormName); + if (pokemonName != baseFormName && !App.game.party.alreadyCaughtPokemon(baseForm.id)) { + Notifier.notify({ + message: `You also found ${GameHelper.anOrA(baseFormName)} ${baseFormName} nearby!`, + pokemonImage: PokemonHelper.getImage(baseForm.id), + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.General.new_catch, + setting: NotificationConstants.NotificationSetting.General.new_catch, + }); + App.game.party.gainPokemonById(baseForm.id, PokemonFactory.generateShiny(GameConstants.SHINY_CHANCE_BREEDING)); + } + } + // Update statistics + PokemonHelper.incrementPokemonStatistics(pokemonID, GameConstants.PokemonStatisticsType.Hatched, shiny, gender, shadow); + App.game.oakItems.use(OakItemType.Magma_Stone); + return true; + } + toJSON() { + return { + totalSteps: this.totalSteps, + steps: this.steps(), + shinyChance: this.shinyChance, + pokemon: this.pokemon, + type: this.type, + notified: this.notified, + }; + } + fromJSON(json) { + this.totalSteps = json.totalSteps; + this.steps = ko.observable(json.steps); + this.shinyChance = json.shinyChance; + this.pokemon = json.pokemon; + this.type = json.type; + this.notified = json.notified; + this.init(true); + } +} +const HatcheryHelperSkills = [ + 'energy', + 'efficiency', + 'accuracy', + 'cost', +]; +const HatcheryHelperCalcHatchBonus = (hatched) => Math.min(50, Math.floor(Math.sqrt(hatched / 50) * 10) / 10); +const HatcheryHelperMinBonusMap = {}; +// Generate our bonus amounts map +(() => { + let bonus = -1; + for (let hatched = 0; bonus < 50; hatched++) { + const b = HatcheryHelperCalcHatchBonus(hatched); + if (b > bonus) { + HatcheryHelperMinBonusMap[b] = hatched; + bonus = b; + } + } +})(); +class HatcheryHelper { + // public level: number; + // public experience: number; + constructor(name, cost, stepEfficiencyBase, // 1 - 200 + attackEfficiencyBase, unlockRequirement) { + this.name = name; + this.cost = cost; + this.stepEfficiencyBase = stepEfficiencyBase; + this.attackEfficiencyBase = attackEfficiencyBase; + this.unlockRequirement = unlockRequirement; + this.trainerSprite = 0; + this.hired = ko.observable(false).extend({ boolean: null }); + this.sortOption = ko.observable(SortOptions.id).extend({ numeric: 0 }); + this.sortDirection = ko.observable(false).extend({ boolean: null }); + this.hatched = ko.observable(0).extend({ numeric: 0 }); + this.hatchBonus = ko.observable(0).extend({ numeric: 1 }); + this.stepEfficiency = ko.observable(0).extend({ numeric: 1 }); + this.attackEfficiency = ko.observable(0).extend({ numeric: 1 }); + this.prevBonus = ko.observable(0).extend({ numeric: 0 }); + this.nextBonus = ko.observable(1).extend({ numeric: 0 }); + this.categories = ko.observableArray([]); + this.useHatcheryFilters = ko.observable(true); + SeededRand.seed(parseInt(this.name, 36)); + this.trainerSprite = SeededRand.intBetween(0, 118); + this.tooltip = ko.pureComputed(() => `${this.name}
    + Cost:  ${(this.cost.amount).toLocaleString('en-US')}/hatch
    + Step Efficiency: ${this.stepEfficiency()}%
    + Attack Efficiency: ${this.attackEfficiency()}%
    + Hatched: ${this.hatched().toLocaleString('en-US')}
    `); + // Update our bonus values + this.updateBonus(); + // Update our bonus values whenever our hatched amount changes + this.hatched.subscribe((hatched) => { + if (hatched >= this.nextBonus() || hatched <= this.prevBonus()) { + this.updateBonus(); + } + }); + } + updateBonus() { + this.hatchBonus(HatcheryHelperCalcHatchBonus(this.hatched())); + this.stepEfficiency(this.stepEfficiencyBase + this.hatchBonus()); + this.attackEfficiency(this.attackEfficiencyBase + this.hatchBonus()); + this.prevBonus(HatcheryHelperMinBonusMap[this.hatchBonus()] || 0); + this.nextBonus(HatcheryHelperMinBonusMap[((this.hatchBonus() * 10) + 1) / 10] || 1); + } + isUnlocked() { + var _a, _b; + return (_b = (_a = this.unlockRequirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true; + } + // String for currency in Notifications and Logs + currencyString() { + switch (GameConstants.Currency[this.cost.currency]) { + case 'money': + return 'Pokédollars'; + default: + return `${GameConstants.camelCaseToString(GameConstants.Currency[this.cost.currency])}s`; + } + } + hire() { + // Check the player has enough Currency to hire this Hatchery Helper + if (!App.game.wallet.hasAmount(this.cost)) { + Notifier.notify({ + title: `[HATCHERY HELPER] ${this.name}`, + message: `You don't have enough ${this.currencyString()} to hire me...\nCost: ${this.cost.amount.toLocaleString('en-US')}`, + type: NotificationConstants.NotificationOption.warning, + timeout: 30 * GameConstants.SECOND, + }); + return; + } + // Hatchery helper is hired + this.hired(true); + Notifier.notify({ + title: `[HATCHERY HELPER] ${this.name}`, + message: 'Thanks for hiring me,\nI won\'t let you down!', + type: NotificationConstants.NotificationOption.success, + timeout: 30 * GameConstants.SECOND, + setting: NotificationConstants.NotificationSetting.Hatchery.hatchery_helper, + }); + } + fire() { + Notifier.notify({ + title: `[HATCHERY HELPER] ${this.name}`, + message: 'Thanks for the work.\nLet me know when you\'re hiring again!', + type: NotificationConstants.NotificationOption.info, + timeout: 30 * GameConstants.SECOND, + setting: NotificationConstants.NotificationSetting.Hatchery.hatchery_helper, + }); + this.hired(false); + return; + } + charge() { + // Charge the player if they can afford it, otherwise notify that they cannot + if (!App.game.wallet.loseAmount(this.cost)) { + Notifier.notify({ + title: `[HATCHERY HELPER] ${this.name}`, + message: `It looks like you are a little short on ${this.currencyString()} right now...\nLet me know when you're hiring again!\nCost: ${this.cost.amount.toLocaleString('en-US')}`, + type: NotificationConstants.NotificationOption.danger, + timeout: 30 * GameConstants.MINUTE, + }); + this.hired(false); + App.game.logbook.newLog(LogBookTypes.OTHER, createLogContent.unableToPayHatcheryHelper({ + currency: this.currencyString(), + name: this.name, + })); + return; + } + } + toJSON() { + return { + name: this.name, + hired: this.hired(), + sortOption: this.sortOption(), + sortDirection: this.sortDirection(), + hatched: this.hatched(), + categories: this.categories(), + useHatcheryFilters: this.useHatcheryFilters(), + }; + } + fromJSON(json) { + var _a; + if (!json) { + return; + } + this.hired(json.hired || false); + this.sortOption(json.sortOption || 0); + this.sortDirection(json.sortDirection || false); + this.hatched(json.hatched || 0); + this.categories(json.categories || []); + this.useHatcheryFilters((_a = json.useHatcheryFilters) !== null && _a !== void 0 ? _a : true); + } +} +class HatcheryHelpers { + static add(helper) { + this.list.push(helper); + } + constructor(hatchery) { + this.hatchery = hatchery; + this.MAX_HIRES = 3; + this.requirement = new HatchRequirement(100); + this.available = ko.pureComputed(() => HatcheryHelpers.list.filter(f => f.isUnlocked())); + this.hired = ko.pureComputed(() => HatcheryHelpers.list.filter(f => f.hired())); + this.canHire = ko.pureComputed(() => this.hired().length < Math.min(this.MAX_HIRES, this.hatchery.eggSlots)); + } + isUnlocked() { + return this.requirement.isCompleted(); + } + addSteps(amount, multiplier) { + // Add steps and attack based on efficiency + this.hired().forEach((helper, index) => { + // Calculate how many steps should be applied + const steps = Math.max(1, Math.round(amount * (helper.stepEfficiency() / 100))); + // Add steps to the egg we are managing + let egg = this.hatchery.eggList[index](); + egg.addSteps(steps, multiplier, true); + // Check if the egg is ready to hatch + if (egg.canHatch()) { + const hatched = egg.hatch(helper.attackEfficiency(), true); + if (hatched) { + // Reset egg + this.hatchery.eggList[index](new Egg()); + egg = this.hatchery.eggList[index](); + } + } + // Check if egg slot empty + if (egg.isNone()) { + // Check if there's a pokemon we can chuck into an egg + const regionalAttackDebuff = App.game.challenges.list.regionalAttackDebuff.active() ? Settings.getSetting('breedingRegionalAttackDebuffSetting').value : GameConstants.Region.none; + const compare = PartyController.compareBy(helper.sortOption(), helper.sortDirection(), regionalAttackDebuff); + const categories = helper.categories(); + const useHatcheryFilters = helper.useHatcheryFilters(); + const pokemon = App.game.party.caughtPokemon.reduce((best, pokemon) => { + if (useHatcheryFilters && !pokemon.isHatchableFiltered()) { + return best; + } + if (!pokemon.isHatchable()) { + return best; + } + if (categories.length && !categories.some((cat) => pokemon.category.includes(cat))) { + return best; + } + if (best === null) { + return pokemon; + } + return compare(best, pokemon) <= 0 ? best : pokemon; + }, null); + if (pokemon) { + this.hatchery.gainPokemonEgg(pokemon, index); + // Charge the player when we put a pokemon in the hatchery + helper.charge(); + // Increment our hatched counter + GameHelper.incrementObservable(helper.hatched, 1); + } + } + }); + } + toJSON() { + return this.available().map(f => f.toJSON()); + } + fromJSON(json) { + if (!json || !json.length) { + return; + } + HatcheryHelpers.list.forEach(f => { + const data = json === null || json === void 0 ? void 0 : json.find(_f => _f.name == f.name); + if (data) { + f.fromJSON(data); + } + }); + } +} +HatcheryHelpers.list = []; +// Note: Mostly Gender-neutral names used as the trainer sprite is (seeded) randomly generated, or check the sprite +HatcheryHelpers.add(new HatcheryHelper('Sam', new Amount(1000, GameConstants.Currency.money), 10, 10, new HatchRequirement(100))); +HatcheryHelpers.add(new HatcheryHelper('Blake', new Amount(10000, GameConstants.Currency.money), 10, 20, new HatchRequirement(500))); +HatcheryHelpers.add(new HatcheryHelper('Jasmine', new Amount(50000, GameConstants.Currency.money), 15, 50, new UniqueItemOwnedRequirement('HatcheryHelperJasmine', 'purchase'))); +HatcheryHelpers.add(new HatcheryHelper('Leslie', new Amount(777777, GameConstants.Currency.money), 150, 50, new UniqueItemOwnedRequirement('HatcheryHelperLeslie', 'purchase'))); +HatcheryHelpers.add(new HatcheryHelper('Parker', new Amount(1000, GameConstants.Currency.dungeonToken), 15, 25, new HatchRequirement(1000))); +HatcheryHelpers.add(new HatcheryHelper('Dakota', new Amount(10000, GameConstants.Currency.dungeonToken), 50, 50, new UniqueItemOwnedRequirement('HatcheryHelperDakota', 'purchase'))); +HatcheryHelpers.add(new HatcheryHelper('Cameron', new Amount(75, GameConstants.Currency.farmPoint), 75, 75, new UniqueItemOwnedRequirement('HatcheryHelperCameron', 'purchase'))); +HatcheryHelpers.add(new HatcheryHelper('Justice', new Amount(10, GameConstants.Currency.questPoint), 100, 50, new QuestRequirement(200))); +HatcheryHelpers.add(new HatcheryHelper('Carey', new Amount(20, GameConstants.Currency.questPoint), 50, 125, new UniqueItemOwnedRequirement('HatcheryHelperCarey', 'purchase'))); +HatcheryHelpers.add(new HatcheryHelper('Aiden', new Amount(1, GameConstants.Currency.diamond), 100, 100, new UndergroundLayersMinedRequirement(100))); +HatcheryHelpers.add(new HatcheryHelper('Kris', new Amount(2, GameConstants.Currency.diamond), 100, 150, new UniqueItemOwnedRequirement('HatcheryHelperKris', 'purchase'))); +HatcheryHelpers.add(new HatcheryHelper('Noel', new Amount(25, GameConstants.Currency.battlePoint), 100, 200, new UniqueItemOwnedRequirement('HatcheryHelperNoel', 'purchase'))); +class Discord { + get enabled() { + // This was done like this so es/tslint doesn't throw errors + try { + return !!JSON.parse('false'); + } + catch (e) { + return false; + } + } + constructor() { + this.saveKey = 'discord'; + this.defaults = { + ID: null, + }; + this.ID = ko.observable(null); + this.codes = [ + new DiscordPokemonCode(pokemonMap['Unown (D)'], 700, 'An alternate form of Unown.'), + new DiscordPokemonCode(pokemonMap['Unown (I)'], 700, 'An alternate form of Unown.'), + new DiscordPokemonCode(pokemonMap['Unown (S)'], 700, 'An alternate form of Unown.'), + new DiscordPokemonCode(pokemonMap['Unown (C)'], 700, 'An alternate form of Unown.'), + new DiscordPokemonCode(pokemonMap['Unown (O)'], 700, 'An alternate form of Unown.'), + new DiscordPokemonCode(pokemonMap['Unown (R)'], 700, 'An alternate form of Unown.'), + new DiscordPokemonCode(pokemonMap['Surfing Pikachu'], 1500, 'It\'s a Pikachu on a surfboard!'), + new DiscordPokemonCode(pokemonMap['Rotom (Discord)'], 10000, 'A Discord-style Rotom!'), + new DiscordItemCode('HatcheryHelperLeslie', 'Someone to hire in your Daycare.'), + ]; + // Check if code provided by Discord, which means the user has logged in, and we need to get their details + const search = new URLSearchParams(location.search); + const discordID = search.get('discordID'); + if (discordID) { + this.ID(discordID); + Notifier.notify({ + message: 'Successfully logged in to Discord!', + type: NotificationConstants.NotificationOption.success, + timeout: GameConstants.MINUTE, + }); + window.history.replaceState('', '', `${location.origin + location.pathname}`); + } + } + login() { + // This will be updated from our config values + location.href = `false?action=login&redirect_uri=${encodeURIComponent(location.origin + location.pathname)}`; + } + logout() { + this.ID(this.defaults.id); + // Save now + Save.store(player); + } + calcCode(code) { + const discordID = +App.game.discord.ID() || false; + if (!discordID) { + return; + } + // reverse the string (for names that are similar - forms) + const codeSeed = code.name.split('').reverse() + // map to the character code + .map(l => l.charCodeAt(0)) + // multiply the numbers (should be random enough) + .reduce((s, b) => s * (b / 10), 1); + SeededRand.seed(discordID + codeSeed); + const arr = []; + for (let i = 0; i < 14; i++) { + let int; + while (int == undefined || int.length != 1) { + int = SeededRand.intBetween(0, 35).toString(36); + } + arr.push(int); + } + arr[4] = '-'; + arr[9] = '-'; + return arr.join('').toUpperCase(); + } + findCodeMatch(enteredCode) { + return this.codes.find(code => enteredCode.toUpperCase() == this.calcCode(code)); + } + enterCode(enteredCode) { + // Discord integration disabled + if (!this.enabled) { + Notifier.notify({ + message: 'Discord integration not enabled', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + // User not logged in to Discord + if (!this.ID()) { + Notifier.notify({ + message: 'You must sign in to Discord before attempting to use this code', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + // Try find a matching code + const code = this.findCodeMatch(enteredCode); + // No code found + if (!code) { + Notifier.notify({ + message: `Invalid code ${enteredCode}`, + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + // Claim the code + code.claim(); + return true; + } + loadCodes(codes) { + codes.forEach(code => { + const c = this.codes.find(c => c.name == code.name); + if (c) { + c.claimed = code.claimed; + } + }); + } + fromJSON(json) { + if (!json || !json.ID) { + return; + } + this.ID(json.ID || this.defaults.ID); + this.loadCodes(json.codes || []); + } + toJSON() { + return { + ID: this.ID(), + codes: this.codes.filter(c => c.claimed), + }; + } +} +class DiscordCode { + // Image, Price and Description fields are not currently used on the website, + // the data is there so the Discord bot and website can share the same dataset + constructor(name, image, price, description, claimFunction = () => true) { + this.name = name; + this.image = image; + this.price = price; + this.description = description; + this.claimFunction = claimFunction; + this.claimed = false; + } + claim() { + if (this.claimed) { + Notifier.notify({ + title: `[Discord Code] ${this.name}`, + message: 'Already claimed!', + type: NotificationConstants.NotificationOption.warning, + }); + return; + } + if (this.claimFunction()) { + this.claimed = true; + Notifier.notify({ + title: `[Discord Code] ${this.name}`, + message: 'Successfully claimed!', + type: NotificationConstants.NotificationOption.success, + }); + } + } + toJSON() { + return { + name: this.name, + image: this.image, + price: this.price, + description: this.description, + claimed: this.claimed, + }; + } +} +class DiscordItemCode extends DiscordCode { + constructor(itemName, description, amount = 1) { + const item = ItemList[itemName]; + const claimFunction = () => { + item.gain(amount); + // Notify that the code was activated successfully + Notifier.notify({ + message: `You obtained ${amount > 1 ? `${amount}×` : ''}${item.displayName}!`, + type: NotificationConstants.NotificationOption.success, + timeout: 1e4, + }); + return true; + }; + super(item.displayName, item.image, item.basePrice, description, claimFunction); + } +} +class DiscordPokemonCode extends DiscordCode { + constructor(pokemon, price, description) { + const image = `assets/images/pokemon/${pokemon.id}.png`; + const claimFunction = () => { + if (pokemon.nativeRegion > player.highestRegion()) { + Notifier.notify({ + message: 'You need to progress further to unlock this pokemon.', + type: NotificationConstants.NotificationOption.warning, + }); + return false; + } + const shiny = PokemonFactory.generateShiny(GameConstants.SHINY_CHANCE_SHOP); + App.game.party.gainPokemonById(pokemon.id, shiny, true); + // Notify that the code was activated successfully + Notifier.notify({ + message: `You obtained a${shiny ? ' shiny' : ''} ${pokemon.name}!`, + type: NotificationConstants.NotificationOption.success, + timeout: 1e4, + }); + return true; + }; + super(pokemon.name, image, price, description, claimFunction); + } +} +class DiscordRichPresence { + static replaceDiscordText(input) { + let output = input; + this.outputOptions.forEach((option) => { + try { + let value = option.value(); + if (typeof value == 'number') { + value = value.toLocaleString('en-US'); + } + output = output.replace(new RegExp(`{${option.key}}`, 'g'), value); + } + catch (e) { + output = output.replace(new RegExp(`{${option.key}}`, 'g'), option.default); + } + }); + return output.replace(/<\/?br>/g, ' '); + } + static getRichPresenceData() { + var _a, _b, _c, _d; + let nextArea; + if (player == undefined) { + nextArea = 'Loading Game'; + } + else if (player.route) { + nextArea = Routes.getName(player.route, player.region); + } + else if (player.town) { + nextArea = player.town.name; + } + else { + nextArea = 'Unknown Area'; + } + const discordRPCValues = { + enabled: (player != undefined ? Settings.getSetting('discord-rp.enabled').observableValue() : false), + line1: this.replaceDiscordText(Settings.getSetting('discord-rp.line-1').value || ' '), + line2: this.replaceDiscordText(Settings.getSetting('discord-rp.line-2').value || ' '), + }; + // Reset timer if area has changed + if (Settings.getSetting('discord-rp.timer-reset').observableValue() && this.currentArea != nextArea) { + this.startTimestamp = Date.now(); + } + this.currentArea = nextArea; + // Set our "start" timestamp + if (Settings.getSetting('discord-rp.timer').observableValue()) { + discordRPCValues.startTimestamp = this.startTimestamp; + } + // Our Discord images + switch (Settings.getSetting('discord-rp.large-image').observableValue()) { + case 'current-environment': + discordRPCValues.largeImageKey = `background-${(_a = MapHelper.calculateBattleCssClass()) !== null && _a !== void 0 ? _a : 'grass'}`; + break; + default: + discordRPCValues.largeImageKey = Settings.getSetting('discord-rp.large-image').observableValue(); + } + discordRPCValues.largeImageText = this.currentArea; + let smallImage = Settings.getSetting('discord-rp.small-image').observableValue(); + if (smallImage === 'cycle') { + smallImage = this.cycleOptions[++this.cycleSmallImageIndex % this.cycleOptions.length]; + } + if (App.game != undefined) { + switch (smallImage) { + case 'trainer': + discordRPCValues.smallImageKey = `trainer-${App.game.profile.trainer()}`; + discordRPCValues.smallImageText = this.replaceDiscordText('Total Attack: {attack}'); + break; + case 'egg': + discordRPCValues.smallImageKey = smallImage; + discordRPCValues.smallImageText = this.replaceDiscordText('Total Hatched: {hatched}'); + break; + case 'pokeball': + discordRPCValues.smallImageKey = smallImage; + discordRPCValues.smallImageText = this.replaceDiscordText('Shinies: {caught_shiny}/{caught} ✨'); + break; + default: + discordRPCValues.smallImageKey = smallImage.toLowerCase(); + discordRPCValues.smallImageText = `${GameConstants.camelCaseToString(smallImage)}: ${(_d = (_c = (_b = App.game.wallet.currencies)[GameConstants.Currency[smallImage]]) === null || _c === void 0 ? void 0 : _c.call(_b).toLocaleString('en-US')) !== null && _d !== void 0 ? _d : '0'}`; + } + } + else { + discordRPCValues.smallImageKey = smallImage; + discordRPCValues.smallImageText = ''; + } + return discordRPCValues; + } +} +DiscordRichPresence.focusedElement = document.createElement('input'); +DiscordRichPresence.clientVersion = ''; +DiscordRichPresence.startTimestamp = Date.now(); +DiscordRichPresence.currentArea = ''; +DiscordRichPresence.cycleSmallImageIndex = 0; +DiscordRichPresence.cycleOptions = [ + 'money', + 'dungeonToken', + 'questPoint', + 'farmPoint', + 'diamond', + 'battlePoint', + 'trainer', + 'egg', + 'pokeball', +]; +DiscordRichPresence.outputOptions = [ + { + key: 'caught', + value: () => App.game.party.caughtPokemon.length, + default: 0, + }, + { + key: 'caught_shiny', + value: () => App.game.party.caughtPokemon.filter(p => p.shiny).length, + default: 0, + }, + { + key: 'hatched', + value: () => App.game.statistics.totalPokemonHatched(), + default: 0, + }, + { + key: 'hatched_shiny', + value: () => App.game.statistics.totalShinyPokemonHatched(), + default: 0, + }, + { + key: 'sparkle', + value: () => '✨', + default: '✨', + }, + { + key: 'pokerus', + value: () => App.game.party.caughtPokemon.filter(p => p.pokerus).length, + default: 0, + }, + { + key: 'pokerus_resistant', + value: () => App.game.party.caughtPokemon.filter(p => p.pokerus >= 3).length, + default: 0, + }, + { + key: 'attack', + value: () => App.game.party.calculatePokemonAttack(PokemonType.None, PokemonType.None, true, undefined, true, false, WeatherType.Clear, true, true), + default: 0, + }, + { + key: 'regional_attack', + value: () => App.game.party.calculatePokemonAttack(), + default: 0, + }, + { + key: 'current_region', + value: () => GameConstants.camelCaseToString(GameConstants.Region[player.region]), + default: 'Unknown Region', + }, + { + key: 'current_subregion', + value: () => { var _a; return (_a = SubRegions.getSubRegionById(player.region, player.subregion)) === null || _a === void 0 ? void 0 : _a.name; }, + default: 'Unknown Subregion', + }, + { + key: 'current_route', + value: () => player.route ? Routes.getName(player.route, player.region) : player.town ? player.town.name : 'Unknown Area', + default: 'Unknown Area', + }, + { + key: 'current_area', + value: () => player.route ? Routes.getName(player.route, player.region) : player.town ? player.town.name : 'Unknown Area', + default: 'Unknown Area', + }, + { + key: 'current_route_stats', + value: () => player.route ? App.game.statistics.routeKills[player.region][player.route]() : player.town.dungeon ? App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(player.town.name)]() : player.town.gym ? App.game.statistics.gymsDefeated[GameConstants.getGymIndex(player.town.name)]() : 0, + default: 0, + }, + { + key: 'current_area_stats', + value: () => player.route ? App.game.statistics.routeKills[player.region][player.route]() : player.town.dungeon ? App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(player.town.name)]() : player.town.gym ? App.game.statistics.gymsDefeated[GameConstants.getGymIndex(player.town.name)]() : 0, + default: 0, + }, + { + key: 'money', + value: () => App.game.wallet.currencies[GameConstants.Currency.money](), + default: 0, + }, + { + key: 'dungeon_tokens', + value: () => App.game.wallet.currencies[GameConstants.Currency.dungeonToken](), + default: 0, + }, + { + key: 'diamonds', + value: () => App.game.wallet.currencies[GameConstants.Currency.diamond](), + default: 0, + }, + { + key: 'farm_points', + value: () => App.game.wallet.currencies[GameConstants.Currency.farmPoint](), + default: 0, + }, + { + key: 'quest_points', + value: () => App.game.wallet.currencies[GameConstants.Currency.questPoint](), + default: 0, + }, + { + key: 'battle_points', + value: () => App.game.wallet.currencies[GameConstants.Currency.battlePoint](), + default: 0, + }, + { + key: 'achievement_bonus', + value: () => AchievementHandler.achievementBonusPercent(), + default: '0%', + }, + { + key: 'clicks', + value: () => App.game.statistics.clickAttacks(), + default: 0, + }, + { + key: 'time_played', + value: () => GameConstants.formatSecondsToTime(App.game.statistics.secondsPlayed()), + default: '0 Seconds', + }, + { + key: 'underground_levels_cleared', + value: () => App.game.statistics.undergroundLayersMined(), + default: 0, + }, + { + key: 'underground_items_found', + value: () => App.game.statistics.undergroundItemsFound(), + default: 0, + }, + { + key: 'underground_deal_trades', + value: () => App.game.statistics.undergroundDailyDealTrades(), + default: 0, + }, + { + key: 'quests_completed', + value: () => App.game.statistics.questsCompleted(), + default: 0, + }, + { + key: 'frontier_stages_cleared', + value: () => App.game.statistics.battleFrontierTotalStagesCompleted(), + default: 0, + }, + { + key: 'frontier_highest_cleared', + value: () => App.game.statistics.battleFrontierHighestStageCompleted(), + default: 0, + }, + { + key: 'total_berries_obtained', + value: () => App.game.statistics.totalBerriesObtained(), + default: 0, + }, + { + key: 'total_manual_harvests', + value: () => App.game.statistics.totalManualHarvests(), + default: 0, + }, + { + key: 'total_berries_harvested', + value: () => App.game.statistics.totalBerriesHarvested(), + default: 0, + }, + { + key: 'total_berries_replanted', + value: () => App.game.statistics.totalBerriesReplanted(), + default: 0, + }, + { + key: 'total_berries_mutated', + value: () => App.game.statistics.totalBerriesMutated(), + default: 0, + }, + { + key: 'total_mulches_used', + value: () => App.game.statistics.totalMulchesUsed(), + default: 0, + }, + { + key: 'total_shovels_used', + value: () => App.game.statistics.totalShovelsUsed(), + default: 0, + }, + { + key: 'berry_daily_deal_trades', + value: () => App.game.statistics.berryDailyDealTrades(), + default: 0, + }, +]; +class DungeonBossPokemon { + constructor(name, baseHealth, level, options) { + this.name = name; + this.baseHealth = baseHealth; + this.level = level; + this.options = options; + } +} +class Trainer { + constructor(trainerClass, team, name, subTrainerClass) { + this.trainerClass = trainerClass; + this.team = team; + this.subTrainerClass = subTrainerClass; + this.name = name ? `${trainerClass} ${name}` : trainerClass; + } + get image() { + const imageName = this.subTrainerClass ? `${this.trainerClass} ${this.subTrainerClass}` : this.trainerClass; + return `assets/images/npcs/${imageName}.png`; + } + getTeam() { + return this.team.filter((p) => p.requirements.every((r => r.isCompleted()))); + } +} +/// +class DungeonTrainer extends Trainer { + constructor(trainerClass, team, options, name, subTrainerClass) { + super(trainerClass, team, name, subTrainerClass); + this.options = options; + } +} +class GymPokemon { + constructor(name, maxHealth, level, requirements = [], shiny, shadow = GameConstants.ShadowStatus.None) { + this.name = name; + this.maxHealth = maxHealth; + this.level = level; + if (requirements instanceof Requirement) { + this.requirements = [requirements]; + } + else { + this.requirements = requirements; + } + this.shiny = shiny; + this.shadow = shadow; + } +} +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +// These should add up to 1 if you want to keep it easy to judge chances +const baseLootTierChance = { + common: 0.75, + rare: 0.2, + epic: 0.04, + legendary: 0.0099, + mythic: 0.0001, +}; +const nerfedLootTierChance = { + common: 0.75, + rare: 0.24, + epic: 0.009, + legendary: 0.00099, + mythic: 0.00001, +}; +// Should sum to 0 +const lootRedistribution = { + common: -1, + rare: 0.33, + epic: 0.4, + legendary: 0.2, + mythic: 0.07, +}; +// Max amount to take from common and redistibute @ 500 clears +const lootRedistibuteAmount = 0.15; +// Gain a gym badge after first completion of a dungeon +// Used for trials pre 10.16, could be useful for something else? +const DungeonGainGymBadge = (gym) => { + // Check that the player hasn't already obtained the badge + if (!App.game.badgeCase.hasBadge(gym.badgeReward)) { + // Set the set to our expected gym + // This updates our modal values + GymRunner.gymObservable(gym); + GymBattle.gym = gym; + // Give the player the badge + gym.firstWinReward(); + } +}; +class Dungeon { + constructor(name, enemyList, lootTable, baseHealth, bossList, tokenCost, difficultyRoute, // Closest route in terms of difficulty, used for egg steps, dungeon tokens etc. + rewardFunction = () => { }, optionalParameters = {}) { + this.name = name; + this.enemyList = enemyList; + this.lootTable = lootTable; + this.baseHealth = baseHealth; + this.bossList = bossList; + this.tokenCost = tokenCost; + this.difficultyRoute = difficultyRoute; + this.rewardFunction = rewardFunction; + this.optionalParameters = optionalParameters; + this.mimicList = []; + this.lootFilter = (loot, onlyDebuffable) => ((!loot.requirement || loot.requirement.isCompleted()) && (!ItemList[loot.loot] || (ItemList[loot.loot].isAvailable() && !ItemList[loot.loot].isSoldOut()))) && !(onlyDebuffable && loot.ignoreDebuff); + this.isThereQuestAtLocation = ko.pureComputed(() => { + return App.game.quests.currentQuests().some(q => q instanceof DefeatDungeonQuest && q.dungeon == this.name); + }); + // Keep a list of mimics to use with getCaughtMimics() + Object.entries(this.lootTable).forEach(([_, itemList]) => { + itemList.forEach((loot) => { + const mimic = pokemonMap[loot.loot].name; + if (mimic != 'MissingNo.') { + this.mimicList.push(mimic); + } + }); + }); + } + isUnlocked() { + // Player requires the Dungeon Ticket to access the dungeons + if (!App.game.keyItems.hasKeyItem(KeyItemType.Dungeon_ticket)) { + return false; + } + // Player may not meet the requirements to start the dungeon + const dungeonTown = TownList[this.name]; + const dungeonRequirement = this.optionalParameters.requirement; + // Use dungeonRequirement if it exists, else default to dungeonTown status + if (dungeonRequirement ? !dungeonRequirement.isCompleted() : !dungeonTown.isUnlocked()) { + return false; + } + return true; + } + getRequirementHints() { + var _a; + const dungeonTown = TownList[this.name]; + const reqsList = []; + (_a = dungeonTown.requirements) === null || _a === void 0 ? void 0 : _a.forEach(req => { + if (!req.isCompleted()) { + reqsList.push(req.hint()); + } + }); + if (this.optionalParameters.requirement ? !this.optionalParameters.requirement.isCompleted() : false) { + reqsList.push(this.optionalParameters.requirement.hint()); + } + return reqsList; + } + /** + * Finds the possible Bosses in the dungeon + * @param includeTrainers Whether to include Trainer Bosses. Defaults to true + * @param ignoreRequirement Whether to check if requirements are met. Defaults to false + */ + availableBosses(includeTrainers = true, ignoreRequirement = false) { + // TODO: We need this check as this method is called somewhere during initialization when App isn't initialized yet + // the requirement.isCompleted call can sometimes use the App object, which will cause this to crash + // Once App is moved to modules, this check might be able to be removed. + if (!App.game) { + return []; + } + if (includeTrainers) { + return this.bossList.filter(boss => { + var _a; + return (!ignoreRequirement && ((_a = boss.options) === null || _a === void 0 ? void 0 : _a.requirement)) ? boss.options.requirement.isCompleted() : true; + }); + } + else { + return this.bossList.filter(b => { + var _a; + if (b instanceof DungeonBossPokemon) { + return (!ignoreRequirement && ((_a = b.options) === null || _a === void 0 ? void 0 : _a.requirement)) ? b.options.requirement.isCompleted() : true; + } + return false; + }).map(b => b); + } + } + /** + * Retreives the weights for all the possible bosses + */ + get bossWeightList() { + return this.availableBosses().map((boss) => { + var _a, _b; + return (_b = (_a = boss.options) === null || _a === void 0 ? void 0 : _a.weight) !== null && _b !== void 0 ? _b : 1; + }); + } + /** + * Returns the possible enemies in the dungeon. + * @param ignoreRequirement Whether to check if requirements are met. Defaults to false + */ + availableMinions(ignoreRequirement = false) { + return this.enemyList.filter((enemy) => { + var _a; + if (typeof enemy === 'string') { + return true; + } + else { + return (!ignoreRequirement && ((_a = enemy.options) === null || _a === void 0 ? void 0 : _a.requirement)) ? enemy.options.requirement.isCompleted() : true; + } + }); + } + /** + * Gets all available Pokemon in the dungeon + */ + allAvailablePokemon() { + const encounterInfo = this.allAvailableShadowPokemon(); + // Handling minions + this.enemyList.forEach((enemy) => { + var _a; + // Handling Pokemon + if (typeof enemy === 'string' || enemy.hasOwnProperty('pokemon')) { + let pokemonName; + if (enemy.hasOwnProperty('pokemon')) { + // Check if requirements have been met + if ((_a = enemy.options) === null || _a === void 0 ? void 0 : _a.requirement) { + if (!enemy.options.requirement.isCompleted()) { + return; + } + } + pokemonName = enemy.pokemon; + } + else { + pokemonName = enemy; + } + encounterInfo.push(pokemonName); + // Handling Trainers + } + else { /* We don't include Trainers */ } + }); + // Handling Bosses + this.bossList.forEach((boss) => { + var _a; + // Handling Pokemon + if (boss instanceof DungeonBossPokemon) { + if ((_a = boss.options) === null || _a === void 0 ? void 0 : _a.requirement) { + if (!boss.options.requirement.isCompleted()) { + return; + } + } + const pokemonName = boss.name; + encounterInfo.push(pokemonName); + // Handling Trainer + } + else { /* We don't include Trainers */ } + }); + this.getCaughtMimics().forEach((mimic) => encounterInfo.push(mimic)); + return encounterInfo; + } + allShadowPokemon() { + const encounterInfo = this.normalEncounterList.filter(e => e.shadow).map(e => e.pokemonName); + encounterInfo.push(...this.bossEncounterList.filter(e => e.shadow).map(e => e.pokemonName)); + return encounterInfo; + } + allAvailableShadowPokemon() { + const encounterInfo = this.normalEncounterList.filter(e => e.shadow && !e.hide).map(e => e.pokemonName); + encounterInfo.push(...this.bossEncounterList.filter(e => e.shadow && !e.hide).map(e => e.pokemonName)); + return encounterInfo; + } + getCaughtMimics() { + return this.mimicList.filter(p => App.game.party.alreadyCaughtPokemonByName(p)); + } + getRandomLootTier(clears, debuffed = false, onlyDebuffable = false) { + const tierWeights = this.getLootTierWeights(clears, debuffed, onlyDebuffable); + return Rand.fromWeightedArray(Object.keys(tierWeights), Object.values(tierWeights)); + } + getRandomLoot(tier, onlyDebuffable = false) { + const lootTable = this.lootTable[tier].filter((loot) => this.lootFilter(loot, onlyDebuffable)); + return Rand.fromWeightedArray(lootTable, lootTable.map((loot) => { var _a; return (_a = loot.weight) !== null && _a !== void 0 ? _a : 1; })); + } + getLootTierWeights(clears, debuffed, onlyDebuffable = false) { + if (debuffed) { + return Object.entries(nerfedLootTierChance).reduce((chances, [tier, chance]) => { + if (tier in this.lootTable && + this.lootTable[tier].some((loot) => this.lootFilter(loot, onlyDebuffable))) { + chances[tier] = chance; + } + return chances; + }, {}); + } + const timesCleared = Math.min(500, Math.max(1, clears)); + const redist = lootRedistibuteAmount * timesCleared / 500; + const updatedChances = Object.entries(baseLootTierChance).reduce((chances, [tier, chance]) => { + if (tier in this.lootTable && + this.lootTable[tier].some((loot) => !loot.requirement || loot.requirement.isCompleted())) { + chances[tier] = chance + (redist * lootRedistribution[tier]); + } + return chances; + }, {}); + return updatedChances; + } + /** + * Retrieves the weights for all the possible enemies + */ + get weightList() { + return this.availableMinions().map((enemy) => { + var _a, _b, _c; + if (typeof enemy === 'string') { + return 1; + } + else if (enemy.hasOwnProperty('pokemon')) { + return (_a = enemy.options.weight) !== null && _a !== void 0 ? _a : 1; + } + else { + return (_c = (_b = enemy.options) === null || _b === void 0 ? void 0 : _b.weight) !== null && _c !== void 0 ? _c : 1; + } + }); + } + /** + * Returns the possible minion Pokemon in the dungeon. + * Filters out Trainers and collapses DetailedPokemon + */ + get pokemonList() { + // Filtering out Trainers + return this.enemyList.filter((enemy) => { + return !enemy.hasOwnProperty('name'); + }).map((enemy) => { + // Collapsing DetailedPokemon + if (typeof enemy === 'string') { + return enemy; + } + else if (enemy.hasOwnProperty('pokemon')) { + return enemy.pokemon; + } + }); + } + /** + * Returns the possible boss Pokemon in the dungeon. + * Filters out Trainers + */ + get bossPokemonList() { + // Filtering out Trainers + return this.bossList.filter((enemy) => { + return enemy instanceof DungeonBossPokemon; + }).map((enemy) => { + return enemy.name; + }); + } + /** + * Gets all possible Pokemon in the dungeon + */ + get allPokemon() { + return this.pokemonList.concat(this.bossPokemonList, this.getCaughtMimics()); + } + getEncounterInfo(pokemonName, mimicData, hideEncounter = false, shadow = false) { + var _a; + const partyPokemon = App.game.party.getPokemonByName(pokemonName); + const pokerus = partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.pokerus; + const caught = App.game.party.alreadyCaughtPokemonByName(pokemonName); + const shinyCaught = App.game.party.alreadyCaughtPokemonByName(pokemonName, true); + const shadowCaught = (partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.shadow) >= GameConstants.ShadowStatus.Shadow; + const purified = (partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.shadow) >= GameConstants.ShadowStatus.Purified; + const encounter = { + pokemonName, + image: `assets/images/${shinyCaught ? 'shiny' : ''}${shadow && shadowCaught ? 'shadow' : ''}pokemon/${pokemonMap[pokemonName].id}.png`, + shadowBackground: shadow && !shadowCaught ? `assets/images/shadowpokemon/${pokemonMap[pokemonName].id}.png` : '', + pkrsImage: pokerus > GameConstants.Pokerus.Uninfected ? `assets/images/breeding/pokerus/${GameConstants.Pokerus[pokerus]}.png` : '', + EVs: pokerus >= GameConstants.Pokerus.Contagious ? `EVs: ${partyPokemon.evs().toLocaleString('en-US')}` : '', + shiny: shinyCaught, + hide: hideEncounter, + uncaught: !caught, + lock: !!(mimicData === null || mimicData === void 0 ? void 0 : mimicData.lockedMessage), + lockMessage: (_a = mimicData === null || mimicData === void 0 ? void 0 : mimicData.lockedMessage) !== null && _a !== void 0 ? _a : '', + mimic: !!mimicData, + mimicTier: mimicData === null || mimicData === void 0 ? void 0 : mimicData.tier, + shadow, + shadowCaught, + purified, + }; + return encounter; + } + /** + * Gets all non-boss Pokemon encounters in the dungeon + * Used for generating the dungeon encounter list view + */ + get normalEncounterList() { + const encounterInfo = []; + // Handling minions + this.enemyList.forEach((enemy) => { + var _a, _b, _c, _d, _e; + // Handling Pokemon + if (typeof enemy === 'string' || enemy.hasOwnProperty('pokemon')) { + let pokemonName; + let hideEncounter = false; + if (enemy.hasOwnProperty('pokemon')) { + const pokemon = enemy; + pokemonName = pokemon.pokemon; + hideEncounter = ((_a = pokemon.options) === null || _a === void 0 ? void 0 : _a.hide) ? (((_b = pokemon.options) === null || _b === void 0 ? void 0 : _b.requirement) ? !((_c = pokemon.options) === null || _c === void 0 ? void 0 : _c.requirement.isCompleted()) : (_d = pokemon.options) === null || _d === void 0 ? void 0 : _d.hide) : false; + } + else { + pokemonName = enemy; + } + encounterInfo.push(this.getEncounterInfo(pokemonName, null, hideEncounter)); + // Handling Trainers (only those with shadow Pokemon) + } + else if (enemy instanceof DungeonTrainer) { + const hideEncounter = (((_e = enemy.options) === null || _e === void 0 ? void 0 : _e.requirement) && !enemy.options.requirement.isCompleted()); + const shadowPokemon = enemy.getTeam().filter(p => p.shadow == GameConstants.ShadowStatus.Shadow); + if (shadowPokemon.length) { + const shadowEncounters = shadowPokemon.map(p => this.getEncounterInfo(p.name, null, hideEncounter, true)); + const trainerEncounter = { + image: enemy.image, + EVs: '', + hide: hideEncounter, + lockMessage: '', + shadowTrainer: true, + }; + encounterInfo.push(...shadowEncounters); + encounterInfo.push(trainerEncounter); + } + } + }); + // Handling Mimics + this.getCaughtMimics().forEach(enemy => { + const pokemonName = enemy; + encounterInfo.push(this.getEncounterInfo(pokemonName, this.getMimicData(pokemonName))); + }); + return encounterInfo; + } + /** + * Gets all boss encounters in the dungeon + * Used for generating the dungeon encounter list view + */ + get bossEncounterList() { + const encounterInfo = []; + // Handling Bosses + this.bossList.forEach((boss) => { + var _a, _b, _c, _d, _e, _f, _g, _h; + const hideEncounter = ((_a = boss.options) === null || _a === void 0 ? void 0 : _a.hide) ? (((_b = boss.options) === null || _b === void 0 ? void 0 : _b.requirement) ? !((_c = boss.options) === null || _c === void 0 ? void 0 : _c.requirement.isCompleted()) : (_d = boss.options) === null || _d === void 0 ? void 0 : _d.hide) : false; + const lock = ((_e = boss.options) === null || _e === void 0 ? void 0 : _e.requirement) ? !((_f = boss.options) === null || _f === void 0 ? void 0 : _f.requirement.isCompleted()) : false; + const lockMessage = ((_g = boss.options) === null || _g === void 0 ? void 0 : _g.requirement) ? (_h = boss.options) === null || _h === void 0 ? void 0 : _h.requirement.hint() : ''; + // Handling Pokemon + if (boss instanceof DungeonBossPokemon) { + const encounter = this.getEncounterInfo(boss.name, null, hideEncounter); + encounter.lock = lock; + encounter.lockMessage = lockMessage; + encounterInfo.push(encounter); + // Handling Trainer + } + else { + // Check for Shadow Pokemon + const shadowPokemon = boss.getTeam().filter(p => p.shadow == GameConstants.ShadowStatus.Shadow); + const shadowEncounter = shadowPokemon.length > 0; + if (shadowEncounter) { + const shadowEncounters = shadowPokemon.map(p => this.getEncounterInfo(p.name, null, hideEncounter, true)); + encounterInfo.push(...shadowEncounters); + } + const encounter = { + image: boss.image, + EVs: '', + shiny: false, + hide: hideEncounter, + uncaught: false, + lock, + lockMessage, + shadowTrainer: shadowEncounter, + }; + encounterInfo.push(encounter); + } + }); + return encounterInfo; + } + getMimicData(pokemonName) { + let res; + Object.keys(this.lootTable).forEach(tier => { + this.lootTable[tier].forEach(loot => { + var _a, _b; + if (loot.loot === pokemonName) { + res = { tier: tier, lockedMessage: ((_b = (_a = loot.requirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true) ? '' : loot.requirement.hint() }; + } + }); + }); + return res; + } +} +/** + * Data list that contains all dungeons, accessible by name. + */ +const dungeonList = {}; +// Kanto Dungeons +dungeonList['Viridian Forest'] = new Dungeon('Viridian Forest', [ + { pokemon: 'Caterpie', options: { weight: 4 } }, + { pokemon: 'Metapod', options: { weight: 4 } }, + { pokemon: 'Weedle', options: { weight: 4 } }, + { pokemon: 'Kakuna', options: { weight: 4 } }, + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Weedle', 50, 6), + new GymPokemon('Caterpie', 50, 6), + ], { weight: 1 }, 'Rick'), + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Weedle', 50, 7), + new GymPokemon('Kakuna', 50, 7), + new GymPokemon('Weedle', 50, 7), + ], { weight: 1 }, 'Doug'), + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Caterpie', 50, 7), + new GymPokemon('Caterpie', 50, 8), + ], { weight: 1 }, 'Anthony'), + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Metapod', 50, 7), + new GymPokemon('Caterpie', 50, 7), + new GymPokemon('Metapod', 50, 7), + ], { weight: 1 }, 'Charlie'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Pecha' }, + ], + epic: [{ loot: 'Pokeball' }], + mythic: [{ loot: 'SmallRestore' }], +}, 102, [ + new DungeonBossPokemon('Pikachu', 510, 7), + new DungeonTrainer('Bug Catcher', [new GymPokemon('Weedle', 510, 9)], { weight: 1 }, 'Sammy'), + new DungeonTrainer('Egg Hunter', [new GymPokemon('Togepi (Flowering Crown)', 300000, 100)], { + hide: true, + weight: 2, + requirement: new MultiRequirement([ + new QuestLineStartedRequirement('Egg Hunt'), + new QuestLineStepCompletedRequirement('Egg Hunt', 0, GameConstants.AchievementOption.less), + ]), + }), + new DungeonBossPokemon('Pikachu (Easter)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Pikachu (Easter)', 0, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 50, 1); +dungeonList['Mt. Moon'] = new Dungeon('Mt. Moon', [ + { pokemon: 'Clefairy', options: { weight: 11 } }, + { pokemon: 'Zubat', options: { weight: 11 } }, + { pokemon: 'Paras', options: { weight: 11 } }, + { pokemon: 'Geodude', options: { weight: 11 } }, + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Weedle', 75, 11), + new GymPokemon('Kakuna', 75, 11), + ], { weight: 1 }, 'Kent'), + new DungeonTrainer('Lass', [new GymPokemon('Clefairy', 75, 14)], { weight: 1 }, 'Iris'), + new DungeonTrainer('Super Nerd', [ + new GymPokemon('Magnemite', 75, 11), + new GymPokemon('Voltorb', 75, 11), + ], { weight: 1 }, 'Jovan'), + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Caterpie', 75, 10), + new GymPokemon('Metapod', 75, 10), + new GymPokemon('Caterpie', 75, 10), + ], { weight: 1 }, 'Robby'), + new DungeonTrainer('Lass', [ + new GymPokemon('Oddish', 75, 11), + new GymPokemon('Bellsprout', 75, 11), + ], { weight: 1 }, 'Miriam'), + new DungeonTrainer('Youngster', [ + new GymPokemon('Rattata', 75, 10), + new GymPokemon('Rattata', 75, 10), + new GymPokemon('Zubat', 75, 10), + ], { weight: 1 }, 'Josh'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Geodude', 75, 10), + new GymPokemon('Geodude', 75, 10), + new GymPokemon('Onix', 75, 10), + ], { weight: 1 }, 'Marcos'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Sandshrew', 75, 11), + new GymPokemon('Rattata', 75, 11), + new GymPokemon('Zubat', 75, 11), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 75, 13), + new GymPokemon('Ekans', 75, 13), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 75, 13), + new GymPokemon('Sandshrew', 75, 13), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 75, 13), + new GymPokemon('Zubat', 75, 13), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Dowsing_machine' }, + ], + mythic: [ + { loot: 'Greatball', weight: 2 }, + { loot: 'SmallRestore' }, + { loot: 'Star Piece' }, + ], +}, 834, [ + new DungeonTrainer('Super Nerd', [ + new GymPokemon('Grimer', 2780, 12), + new GymPokemon('Voltorb', 2780, 12), + new GymPokemon('Koffing', 2780, 12), + ], { weight: 1 }, 'Miguel'), + new DungeonBossPokemon('Vivillon (High Plains)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 28), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 29, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (High Plains)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 75, 4, () => { + const item = Rand.boolean() ? 'Dome Fossil' : 'Helix Fossil'; + Underground.gainMineItem(UndergroundItems.getByName(item).id, 1); + Notifier.notify({ + message: `You were awarded a ${GameConstants.humanifyString(item)} for defeating the Super Nerd!`, + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); +}); +dungeonList['Diglett\'s Cave'] = new Dungeon('Diglett\'s Cave', ['Diglett'], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + mythic: [ + { loot: 'Wiki', weight: 2 }, + { loot: 'Max Revive' }, + ], +}, 2962, [ + new DungeonBossPokemon('Dugtrio', 16040, 31), + new DungeonBossPokemon('Pikachu (Easter)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Pikachu (Easter)', 1, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 250, 11); +dungeonList['Rock Tunnel'] = new Dungeon('Rock Tunnel', [ + { pokemon: 'Zubat', options: { weight: 14 } }, + { pokemon: 'Mankey', options: { weight: 14 } }, + { pokemon: 'Geodude', options: { weight: 14 } }, + { pokemon: 'Machop', options: { weight: 14 } }, + new DungeonTrainer('PokéManiac', [ + new GymPokemon('Cubone', 500, 23), + new GymPokemon('Slowpoke', 500, 23), + ], { weight: 1 }, 'Ashton'), + new DungeonTrainer('PokéManiac', [new GymPokemon('Slowpoke', 500, 25)], { weight: 1 }, 'Winston'), + new DungeonTrainer('Picnicker', [ + new GymPokemon('Oddish', 500, 22), + new GymPokemon('Bulbasaur', 500, 22), + ], { weight: 1 }, 'Martha'), + new DungeonTrainer('PokéManiac', [ + new GymPokemon('Charmander', 500, 22), + new GymPokemon('Cubone', 500, 22), + ], { weight: 1 }, 'Steve'), + new DungeonTrainer('Hiker', [new GymPokemon('Geodude', 500, 25)], { weight: 1 }, 'Allen'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Machop', 500, 20), + new GymPokemon('Onix', 500, 20), + ], { weight: 1 }, 'Eric'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Geodude', 500, 19), + new GymPokemon('Machop', 500, 19), + new GymPokemon('Geodude', 500, 19), + new GymPokemon('Geodude', 500, 19), + ], { weight: 1 }, 'Lenny'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Onix', 500, 20), + new GymPokemon('Onix', 500, 20), + new GymPokemon('Geodude', 500, 20), + ], { weight: 1 }, 'Oliver'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Geodude', 500, 21), + new GymPokemon('Graveler', 500, 21), + ], { weight: 1 }, 'Lucas'), + new DungeonTrainer('Picnicker', [ + new GymPokemon('Jigglypuff', 500, 21), + new GymPokemon('Pidgey', 500, 21), + new GymPokemon('Meowth', 500, 21), + ], { weight: 1 }, 'Sofia'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Geodude', 500, 21), + new GymPokemon('Geodude', 500, 21), + new GymPokemon('Graveler', 500, 21), + ], { weight: 1 }, 'Dudley'), + new DungeonTrainer('PokéManiac', [ + new GymPokemon('Slowpoke', 500, 20), + new GymPokemon('Slowpoke', 500, 20), + new GymPokemon('Slowpoke', 500, 20), + ], { weight: 1 }, 'Cooper'), + new DungeonTrainer('Picnicker', [ + new GymPokemon('Bellsprout', 500, 22), + new GymPokemon('Clefairy', 500, 22), + ], { weight: 1 }, 'Leah'), + new DungeonTrainer('Picnicker', [ + new GymPokemon('Meowth', 500, 20), + new GymPokemon('Oddish', 500, 20), + new GymPokemon('Pidgey', 500, 20), + ], { weight: 1 }, 'Dana'), +], { + common: [ + { loot: 'xClick', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Geodude' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + ], + legendary: [ + { loot: 'Greatball' }, + { loot: 'MediumRestore' }, + { loot: 'Oval Stone' }, + { loot: 'Revive' }, + ], + mythic: [ + { loot: 'Star Piece', weight: 1.5 }, + { loot: 'Heart Scale' }, + ], +}, 4117, [ + new DungeonBossPokemon('Onix', 20585, 17), + new DungeonTrainer('Picnicker', [ + new GymPokemon('Pidgey', 5147, 19), + new GymPokemon('Rattata', 5147, 19), + new GymPokemon('Rattata', 5147, 19), + new GymPokemon('Bellsprout', 5147, 19), + ], { weight: 1 }, 'Ariana'), +], 500, 9); +dungeonList['Rocket Game Corner'] = new Dungeon('Rocket Game Corner', [ + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Drowzee', 2910, 21), + new GymPokemon('Machop', 2910, 21), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Raticate', 2910, 21), + new GymPokemon('Raticate', 2910, 21), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 1455, 19), + new GymPokemon('Raticate', 1455, 19), + new GymPokemon('Raticate', 1455, 19), + new GymPokemon('Rattata', 1455, 19), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Grimer', 1940, 20), + new GymPokemon('Koffing', 1940, 20), + new GymPokemon('Koffing', 1940, 20), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Grimer', 2910, 22), + new GymPokemon('Koffing', 2910, 22), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 1164, 17), + new GymPokemon('Koffing', 1164, 17), + new GymPokemon('Grimer', 1164, 17), + new GymPokemon('Zubat', 1164, 17), + new GymPokemon('Raticate', 1164, 17), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Machop', 2910, 21), + new GymPokemon('Machop', 2910, 21), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 1940, 20), + new GymPokemon('Raticate', 1940, 20), + new GymPokemon('Drowzee', 1940, 20), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Koffing', 2910, 21), + new GymPokemon('Zubat', 2910, 21), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Sandshrew', 1940, 23), + new GymPokemon('Ekans', 1940, 23), + new GymPokemon('Sandslash', 1940, 23), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Ekans', 1940, 23), + new GymPokemon('Sandshrew', 1940, 23), + new GymPokemon('Arbok', 1940, 23), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [{ loot: 'Pokeball' }], + legendary: [ + { loot: 'Greatball', weight: 2 }, + { loot: 'Revive' }, + { loot: 'Nestball' }, + ], + mythic: [ + { loot: 'LargeRestore' }, + { loot: 'Max Revive' }, + { loot: 'Star Piece' }, + ], +}, 5820, [ + new DungeonTrainer('Team Rocket Boss', [ + new GymPokemon('Onix', 9501, 25), + new GymPokemon('Rhyhorn', 9501, 24), + new GymPokemon('Kangaskhan', 10101, 29), + ], { weight: 1 }, 'Giovanni', 'Giovanni'), +], 625, 7); +dungeonList['Pokémon Tower'] = new Dungeon('Pokémon Tower', [ + { pokemon: 'Gastly', options: { weight: 21.3 } }, + { pokemon: 'Haunter', options: { weight: 21.3 } }, + { pokemon: 'Cubone', options: { weight: 21.3 } }, + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 23)], { weight: 1 }, 'Hope'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 22)], { weight: 1 }, 'Patricia'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 24)], { weight: 1 }, 'Carly'), + new DungeonTrainer('Channeler', [ + new GymPokemon('Gastly', 750, 23), + new GymPokemon('Gastly', 750, 23), + ], { weight: 1 }, 'Laurel'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 22)], { weight: 1 }, 'Jody'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 24)], { weight: 1 }, 'Paula'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 22)], { weight: 1 }, 'Ruth'), + new DungeonTrainer('Channeler', [new GymPokemon('Haunter', 750, 23)], { weight: 1 }, 'Tammy'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 24)], { weight: 1 }, 'Karina'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 22)], { weight: 1 }, 'Janae'), + new DungeonTrainer('Channeler', [ + new GymPokemon('Gastly', 750, 22), + new GymPokemon('Gastly', 750, 22), + new GymPokemon('Gastly', 750, 22), + ], { weight: 1 }, 'Angelica'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 24)], { weight: 1 }, 'Jennifer'), + new DungeonTrainer('Channeler', [new GymPokemon('Gastly', 750, 24)], { weight: 1 }, 'Emilia'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 750, 25), + new GymPokemon('Zubat', 750, 25), + new GymPokemon('Golbat', 750, 25), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Koffing', 750, 26), + new GymPokemon('Drowzee', 750, 26), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 750, 23), + new GymPokemon('Rattata', 750, 23), + new GymPokemon('Raticate', 750, 23), + new GymPokemon('Zubat', 750, 23), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Chesto' }, + ], + rare: [{ loot: 'Green Shard' }], + legendary: [ + { loot: 'Greatball' }, + { loot: 'MediumRestore' }, + { loot: 'Star Piece' }, + { loot: 'Revive' }, + ], + mythic: [ + { loot: 'Rare Bone' }, + { loot: 'Ultraball' }, + { loot: 'LargeRestore' }, + ], +}, 7523, [ + new DungeonBossPokemon('Marowak', 37615, 30), + new DungeonBossPokemon('Pikachu (Easter)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Pikachu (Easter)', 2, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 750, 7); +dungeonList['Silph Co.'] = new Dungeon('Silph Co.', [ + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Golbat', 2103, 25), + new GymPokemon('Zubat', 2103, 25), + new GymPokemon('Zubat', 2103, 25), + new GymPokemon('Raticate', 2103, 25), + new GymPokemon('Zubat', 2103, 25), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magnemite', 3505, 28), + new GymPokemon('Voltorb', 3505, 28), + new GymPokemon('Magneton', 3505, 28), + ], { weight: 1 }, 'Jerry', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Cubone', 5258, 29), + new GymPokemon('Zubat', 5258, 29), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Grimer', 2629, 26), + new GymPokemon('Weezing', 2629, 26), + new GymPokemon('Koffing', 2629, 26), + new GymPokemon('Weezing', 2629, 26), + ], { weight: 1 }, 'Connor', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Raticate', 3505, 28), + new GymPokemon('Hypno', 3505, 28), + new GymPokemon('Raticate', 3505, 28), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Electrode', 5258, 29), + new GymPokemon('Weezing', 5258, 29), + ], { weight: 1 }, 'Jose', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Ekans', 3505, 28), + new GymPokemon('Zubat', 3505, 28), + new GymPokemon('Cubone', 3505, 28), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Machop', 5258, 29), + new GymPokemon('Drowzee', 5258, 29), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [new GymPokemon('Electrode', 10515, 33)], { weight: 1 }, 'Rodney', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [new GymPokemon('Hypno', 10515, 33)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Juggler', [ + new GymPokemon('Kadabra', 5258, 29), + new GymPokemon('Mr. Mime', 5258, 29), + ], { weight: 1 }, 'Dalton'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magneton', 2629, 26), + new GymPokemon('Magnemite', 2629, 26), + new GymPokemon('Koffing', 2629, 26), + new GymPokemon('Weezing', 2629, 26), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Team Rocket', 2) }, 'Beau', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [new GymPokemon('Arbok', 10515, 33)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Machop', 5258, 29), + new GymPokemon('Machoke', 5258, 29), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 3505, 28), + new GymPokemon('Zubat', 3505, 28), + new GymPokemon('Golbat', 3505, 28), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Voltorb', 2103, 25), + new GymPokemon('Koffing', 2103, 25), + new GymPokemon('Magneton', 2103, 25), + new GymPokemon('Magnemite', 2103, 25), + new GymPokemon('Koffing', 2103, 25), + ], { weight: 1 }, 'Taylor', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Cubone', 5258, 29), + new GymPokemon('Cubone', 5258, 29), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Raticate', 2629, 26), + new GymPokemon('Zubat', 2629, 26), + new GymPokemon('Golbat', 2629, 26), + new GymPokemon('Rattata', 2629, 26), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Electrode', 5258, 29), + new GymPokemon('Muk', 5258, 29), + ], { weight: 1 }, 'Joshua', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Sandshrew', 5258, 29), + new GymPokemon('Sandslash', 5258, 29), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Raticate', 2629, 26), + new GymPokemon('Golbat', 2629, 26), + new GymPokemon('Arbok', 2629, 26), + new GymPokemon('Koffing', 2629, 26), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Weezing', 3505, 28), + new GymPokemon('Golbat', 3505, 28), + new GymPokemon('Koffing', 3505, 28), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Grimer', 5258, 29), + new GymPokemon('Electrode', 5258, 29), + ], { weight: 1 }, 'Parker', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Golbat', 3505, 28), + new GymPokemon('Drowzee', 3505, 28), + new GymPokemon('Hypno', 3505, 28), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Drowzee', 3505, 28), + new GymPokemon('Grimer', 3505, 28), + new GymPokemon('Machop', 3505, 28), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Voltorb', 3505, 28), + new GymPokemon('Magneton', 3505, 28), + new GymPokemon('Koffing', 3505, 28), + ], { weight: 1 }, 'Ed', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [new GymPokemon('Machoke', 10515, 33)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magnemite', 5258, 29), + new GymPokemon('Koffing', 5258, 29), + ], { weight: 1 }, 'Travis', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 2103, 25), + new GymPokemon('Zubat', 2103, 25), + new GymPokemon('Ekans', 2103, 25), + new GymPokemon('Rattata', 2103, 25), + new GymPokemon('Rattata', 2103, 25), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Cubone', 3505, 32), + new GymPokemon('Drowzee', 3505, 32), + new GymPokemon('Marowak', 3505, 32), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'Dowsing_machine', weight: 3 }, + { loot: 'Lucky_incense', weight: 2 }, + { loot: 'Pokeball' }, + { loot: 'Electrode' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Red Shard' }, + ], + legendary: [{ loot: 'Greatball' }], + mythic: [{ loot: 'Ultraball' }], +}, 10515, [ + new DungeonTrainer('Scientist', [ + new GymPokemon('Magneton', 10322, 26), + new GymPokemon('Magnemite', 10322, 26), + new GymPokemon('Koffing', 10322, 26), + new GymPokemon('Weezing', 12915, 26), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Team Rocket', 2, GameConstants.AchievementOption.less) }, 'Beau', '(male)'), + new DungeonTrainer('Team Rocket Boss', [ + new GymPokemon('Nidorino', 12144, 37), + new GymPokemon('Rhyhorn', 12144, 37), + new GymPokemon('Kangaskhan', 12144, 35), + new GymPokemon('Nidoqueen', 16144, 41), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Team Rocket', 2) }, 'Giovanni', 'Giovanni'), +], 875, 7); +dungeonList['Power Plant'] = new Dungeon('Power Plant', ['Pikachu', 'Magnemite', 'Magneton', 'Voltorb', 'Electrode'], { + common: [ + { loot: 'Lucky_incense', weight: 4 }, + { loot: 'Cheri', weight: 2 }, + { loot: 'Electrode' }, + ], + rare: [{ loot: 'Yellow Shard' }], + mythic: [{ loot: 'Max Revive' }], +}, 13507, [ + new DungeonBossPokemon('Electabuzz', 67535, 35), + new DungeonBossPokemon('Zapdos', 101302, 50), + new DungeonBossPokemon('Pikachu (Easter)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Pikachu (Easter)', 3, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 1000, 18); +dungeonList['Seafoam Islands'] = new Dungeon('Seafoam Islands', ['Zubat', 'Golbat', 'Psyduck', 'Golduck', 'Slowpoke', 'Slowbro', 'Krabby', 'Horsea', 'Magikarp'], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Aspear' }, + ], + rare: [{ loot: 'Blue Shard' }], + epic: [{ loot: 'Snorlax (Snowman)', ignoreDebuff: true, requirement: new SpecialEventRequirement('Merry Christmas!') }], + legendary: [{ loot: 'Revive' }], + mythic: [{ loot: 'Ultraball' }], +}, 17226, [ + new DungeonBossPokemon('Seel', 86130, 35), + new DungeonBossPokemon('Articuno', 129195, 50), + new DungeonBossPokemon('Pikachu (Easter)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Pikachu (Easter)', 4, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 1250, 19); +dungeonList['Pokémon Mansion'] = new Dungeon('Pokémon Mansion', [ + { pokemon: 'Rattata', options: { weight: 3.11 } }, + { pokemon: 'Raticate', options: { weight: 3.11 } }, + { pokemon: 'Vulpix', options: { weight: 3.11 } }, + { pokemon: 'Growlithe', options: { weight: 3.11 } }, + { pokemon: 'Grimer', options: { weight: 3.11 } }, + { pokemon: 'Muk', options: { weight: 3.11 } }, + { pokemon: 'Koffing', options: { weight: 3.11 } }, + { pokemon: 'Weezing', options: { weight: 3.11 } }, + { pokemon: 'Ditto', options: { weight: 3.11 } }, + new DungeonTrainer('Youngster', [ + new GymPokemon('Ekans', 1500, 33), + new GymPokemon('Ekans', 1500, 33), + new GymPokemon('Raticate', 1500, 34), + ], { weight: 1 }, 'Johnson'), + new DungeonTrainer('Burglar', [ + new GymPokemon('Charmander', 1500, 34), + new GymPokemon('Charmeleon', 1500, 34), + ], { weight: 1 }, 'Arnie'), + new DungeonTrainer('Burglar', [new GymPokemon('Ninetales', 1500, 38)], { weight: 1 }, 'Simon'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magnemite', 1500, 33), + new GymPokemon('Magneton', 1500, 33), + new GymPokemon('Voltorb', 1500, 33), + ], { weight: 1 }, 'Braydon', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Electrode', 1500, 29), + new GymPokemon('Weezing', 1500, 29), + ], { weight: 1 }, 'Ted', '(male)'), + new DungeonTrainer('Burglar', [ + new GymPokemon('Growlithe', 1500, 34), + new GymPokemon('Ponyta', 1500, 34), + ], { weight: 1 }, 'Lewis'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magnemite', 1500, 34), + new GymPokemon('Electrode', 1500, 34), + ], { weight: 1 }, 'Ivan', '(male)'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Rawst' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + ], + epic: [{ loot: 'Figy' }], + legendary: [{ loot: 'Ultraball' }], + mythic: [{ loot: 'Max Revive' }], +}, 17760, [new DungeonBossPokemon('Magmar', 88800, 40)], 1500, 20); +dungeonList['Mt. Ember Summit'] = new Dungeon('Mt. Ember Summit', [ + { pokemon: 'Spearow', options: { weight: 1.5 } }, + { pokemon: 'Fearow', options: { weight: 1.5 } }, + { pokemon: 'Machop', options: { weight: 1.5 } }, + { pokemon: 'Machoke', options: { weight: 1.5 } }, + { pokemon: 'Geodude', options: { weight: 1.5 } }, + { pokemon: 'Graveler', options: { weight: 1.5 } }, + { pokemon: 'Ponyta', options: { weight: 1.5 } }, + { pokemon: 'Rapidash', options: { weight: 1.5 } }, + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Bellsprout', 18120, 38), + new GymPokemon('Gloom', 18120, 38), + new GymPokemon('Gloom', 18120, 38), + ], { weight: 1 }, 'Beth', '(female)'), + new DungeonTrainer('Crush Girl', [ + new GymPokemon('Hitmonchan', 18120, 38), + new GymPokemon('Hitmonchan', 18120, 38), + ], { weight: 1 }, 'Jocelyn'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Exeggcute', 18120, 37), + new GymPokemon('Exeggutor', 18120, 40), + ], { weight: 1 }, 'Logan', '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Token_collector' }, + ], + rare: [{ loot: 'Red Shard' }], + legendary: [{ loot: 'Ultraball' }], +}, 18120, [ + new DungeonBossPokemon('Magmar', 101427, 40), + new DungeonBossPokemon('Moltres', 184462, 50), +], 1750, 27); +dungeonList['Berry Forest'] = new Dungeon('Berry Forest', ['Pidgey', 'Pidgeotto', 'Oddish', 'Gloom', 'Venonat', 'Psyduck', 'Golduck', 'Poliwag', 'Bellsprout', 'Weepinbell', 'Slowpoke', 'Slowbro', 'Drowzee', 'Exeggcute', 'Goldeen', 'Magikarp'], { + common: [ + { loot: 'xClick' }, + { loot: 'Cheri' }, + { loot: 'Chesto' }, + { loot: 'Pecha' }, + { loot: 'Rawst' }, + { loot: 'Aspear' }, + { loot: 'Leppa' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Razz' }, + { loot: 'Persim' }, + { loot: 'Bluk' }, + { loot: 'Nanab' }, + { loot: 'Wepear' }, + { loot: 'Iapapa' }, + ], + mythic: [{ loot: 'Lum', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Berry Forest')) }], +}, 18120, [ + new DungeonBossPokemon('Venomoth', 101427, 30), + new DungeonBossPokemon('Hypno', 101427, 30), +], 1750, 29); +dungeonList['New Island'] = new Dungeon('New Island', [ + new DungeonTrainer('Armored Mewtwo', [ + new GymPokemon('Tentacruel', 18500, 40), + new GymPokemon('Gyarados', 18500, 40), + ], { weight: 1 }, ''), + new DungeonTrainer('Armored Mewtwo', [ + new GymPokemon('Sandslash', 18500, 40), + new GymPokemon('Vaporeon', 18500, 40), + new GymPokemon('Golduck', 18500, 40), + ], { weight: 1 }, ''), + new DungeonTrainer('Armored Mewtwo', [ + new GymPokemon('Nidoqueen', 18500, 40), + new GymPokemon('Ninetales', 18500, 40), + ], { weight: 1 }, ''), + new DungeonTrainer('Armored Mewtwo', [new GymPokemon('Blastoise (Clone)', 20000, 50)], { weight: 2 }, ''), + new DungeonTrainer('Armored Mewtwo', [new GymPokemon('Venusaur (Clone)', 20000, 50)], { weight: 2 }, ''), + new DungeonTrainer('Armored Mewtwo', [new GymPokemon('Charmander (Clone)', 20000, 50)], { weight: 2 }, ''), + new DungeonTrainer('Armored Mewtwo', [ + new GymPokemon('Vulpix', 18500, 40), + new GymPokemon('Vileplume', 18500, 40), + ], { weight: 1 }, ''), + new DungeonTrainer('Armored Mewtwo', [ + new GymPokemon('Wigglytuff', 18500, 40), + new GymPokemon('Rapidash', 18500, 40), + ], { weight: 1 }, ''), + new DungeonTrainer('Armored Mewtwo', [new GymPokemon('Rhydon', 18500, 40)], { weight: 1 }, ''), + new DungeonTrainer('Jessie and James', [new GymPokemon('Meowth', 150, 10)], { weight: 1 }, ''), +], { + common: [{ loot: 'xClick' }], + rare: [{ loot: 'Yellow Shard' }], + mythic: [{ loot: 'Heart Scale' }], +}, 18500, [new DungeonBossPokemon('Armored Mewtwo', 131500, 70)], 1800, 40); +dungeonList['Victory Road'] = new Dungeon('Victory Road', [ + { pokemon: 'Arbok', options: { weight: 4.88 } }, + { pokemon: 'Sandslash', options: { weight: 4.88 } }, + { pokemon: 'Zubat', options: { weight: 4.88 } }, + { pokemon: 'Golbat', options: { weight: 4.88 } }, + { pokemon: 'Primeape', options: { weight: 4.88 } }, + { pokemon: 'Machop', options: { weight: 4.88 } }, + { pokemon: 'Geodude', options: { weight: 4.88 } }, + { pokemon: 'Onix', options: { weight: 4.88 } }, + { pokemon: 'Marowak', options: { weight: 4.88 } }, + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Persian', 2000, 42), + new GymPokemon('Ponyta', 2000, 42), + new GymPokemon('Rapidash', 2000, 42), + new GymPokemon('Vulpix', 2000, 42), + new GymPokemon('Ninetales', 2000, 42), + ], { weight: 1 }, 'Naomi', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Raticate', 2000, 42), + new GymPokemon('Ivysaur', 2000, 42), + new GymPokemon('Wartortle', 2000, 42), + new GymPokemon('Charmeleon', 2000, 42), + new GymPokemon('Charizard', 2000, 42), + ], { weight: 1 }, 'Rolando', '(male)'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Machoke', 2000, 43), + new GymPokemon('Machop', 2000, 43), + new GymPokemon('Machoke', 2000, 43), + ], { weight: 1 }, 'Daisuke'), + new DungeonTrainer('Juggler', [ + new GymPokemon('Drowzee', 2000, 41), + new GymPokemon('Hypno', 2000, 41), + new GymPokemon('Kadabra', 2000, 41), + new GymPokemon('Kadabra', 2000, 41), + ], { weight: 1 }, 'Nelson'), + new DungeonTrainer('Tamer', [ + new GymPokemon('Persian', 2000, 44), + new GymPokemon('Golduck', 2000, 44), + ], { weight: 1 }, 'Vincent'), + new DungeonTrainer('Juggler', [new GymPokemon('Mr. Mime', 2000, 48)], { weight: 1 }, 'Gregory'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Exeggutor', 2000, 42), + new GymPokemon('Sandslash', 2000, 42), + new GymPokemon('Cloyster', 2000, 42), + new GymPokemon('Electrode', 2000, 42), + new GymPokemon('Arcanine', 2000, 42), + ], { weight: 1 }, 'George', '(male)'), + new DungeonTrainer('PokéManiac', [ + new GymPokemon('Charmeleon', 2000, 40), + new GymPokemon('Lapras', 2000, 40), + new GymPokemon('Lickitung', 2000, 40), + ], { weight: 1 }, 'Dawson'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Clefairy', 2000, 42), + new GymPokemon('Jigglypuff', 2000, 42), + new GymPokemon('Persian', 2000, 42), + new GymPokemon('Dewgong', 2000, 42), + new GymPokemon('Chansey', 2000, 42), + ], { weight: 1 }, 'Alexa', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Kingler', 2000, 41), + new GymPokemon('Poliwhirl', 2000, 42), + new GymPokemon('Tentacruel', 2000, 42), + new GymPokemon('Seadra', 2000, 42), + new GymPokemon('Blastoise', 2000, 42), + ], { weight: 1 }, 'Colby', '(male)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Bellsprout', 2000, 42), + new GymPokemon('Weepinbell', 2000, 42), + new GymPokemon('Victreebel', 2000, 42), + new GymPokemon('Paras', 2000, 42), + new GymPokemon('Parasect', 2000, 42), + ], { weight: 1 }, 'Caroline', '(female)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + ], + legendary: [ + { loot: 'Ultraball' }, + { loot: 'SmallRestore' }, + ], + mythic: [ + { loot: 'Max Revive', weight: 2 }, + { loot: 'Star Piece' }, + { loot: 'Heart Scale' }, + ], +}, 24595, [ + new DungeonBossPokemon('Machoke', 122975, 42), + new DungeonTrainer('Cool Couple', [ + new GymPokemon('Nidoking', 61488, 45), + new GymPokemon('Nidoqueen', 61488, 45), + ], { weight: 1 }, 'Ray & Tyra'), + new DungeonBossPokemon('Pikachu (Easter)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Pikachu (Easter)', 5, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 2000, 23); +dungeonList['Cerulean Cave'] = new Dungeon('Cerulean Cave', ['Golbat', 'Parasect', 'Psyduck', 'Golduck', 'Primeape', 'Poliwag', 'Machoke', 'Slowpoke', 'Slowbro', 'Magneton', 'Electrode', 'Goldeen', 'Magikarp', 'Ditto'], { + common: [ + { loot: 'Pokeball', weight: 2 }, + { loot: 'Token_collector', weight: 2 }, + { loot: 'Lucky_incense', weight: 2 }, + { loot: 'Graveler' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [{ loot: 'Greatball' }], + legendary: [{ loot: 'Ultraball' }], + mythic: [ + { loot: 'LargeRestore' }, + { loot: 'Max Revive', weight: 2 }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(500, GameConstants.getDungeonIndex('Cerulean Cave')) }, + ], +}, 28735, [ + new DungeonBossPokemon('Kadabra', 183675, 60), + new DungeonBossPokemon('Mewtwo', 255512, 100), + new DungeonBossPokemon('Vivillon (Modern)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 2), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 3, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Modern)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 2500, 23); +dungeonList['Ruby Path'] = new Dungeon('Ruby Path', ['Geodude', 'Graveler', 'Machop', 'Machoke', 'Slugma'], { + common: [ + { loot: 'xAttack', weight: 3 }, + { loot: 'Rawst', weight: 3 }, + { loot: 'Geodude' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Grey Shard' }, + ], +}, 720600, [new DungeonBossPokemon('Magcargo', 3703000, 20)], 43000, 30, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.hoenn }); +dungeonList['Icefall Cave'] = new Dungeon('Icefall Cave', ['Zubat', 'Golbat', 'Seel', 'Psyduck', 'Slowpoke', 'Swinub', 'Delibird', 'Sneasel', 'Wooper', 'Marill', 'Magikarp', 'Poliwag', 'Goldeen', 'Poliwhirl', 'Tentacool', 'Tentacruel', 'Horsea', 'Krabby', 'Shellder', 'Staryu', 'Seadra', 'Kingler', 'Dewgong', 'Gyarados', 'Lapras'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'xClick' }, + { loot: 'Aspear' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [ + { loot: 'Ultraball' }, + { loot: 'Splash Plate' }, + { loot: 'Icicle Plate' }, + ], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Never_Melt_Ice' }, + ], +}, 720600, [ + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 250000, 20), + new GymPokemon('Zubat', 250000, 20), + new GymPokemon('Golbat', 250000, 20), + ], { weight: 1 }, undefined, '(male)'), +], 43000, 30, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.hoenn }); +dungeonList['Sunburst Island'] = new Dungeon('Sunburst Island', ['Hoppip', 'Tentacool', 'Tentacruel', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Kingler', 'Psyduck', 'Slowpoke'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Red Shard' }, + ], + epic: [ + { loot: 'Splash Plate' }, + { loot: 'Flame Plate' }, + ], + legendary: [ + { loot: 'Heat Rock' }, + { loot: 'Icy Rock' }, + ], +}, 720600, [new DungeonBossPokemon('Crystal Onix', 4500000, 20)], 43000, 31, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.hoenn }); +dungeonList['Lost Cave'] = new Dungeon('Lost Cave', [ + 'Gastly', 'Haunter', 'Zubat', 'Golbat', 'Murkrow', 'Misdreavus', + new DungeonTrainer('Ruin Maniac', [ + new GymPokemon('Onix', 200600, 20), + new GymPokemon('Graveler', 200600, 20), + new GymPokemon('Marowak', 200600, 20), + ], { weight: 0.75 }, 'Lawson'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Natu', 200600, 20), + new GymPokemon('Natu', 200600, 20), + new GymPokemon('Xatu', 200600, 20), + ], { weight: 0.75 }, 'Laura', '(female)'), +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Purple Shard' }, + { loot: 'Grey Shard' }, + ], + epic: [ + { loot: 'Toxic Plate' }, + { loot: 'Spooky Plate' }, + ], + legendary: [ + { loot: 'Max Revive' }, + { loot: 'Silk_Scarf' }, + ], +}, 720600, [ + new DungeonTrainer('Lady', [ + new GymPokemon('Persian', 1800000, 49), + new GymPokemon('Persian', 1800000, 49), + ], { weight: 1 }, 'Selphy'), +], 36000, 33, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.hoenn }); +dungeonList['Pattern Bush'] = new Dungeon('Pattern Bush', [ + 'Spinarak', 'Ledyba', 'Caterpie', 'Weedle', 'Metapod', 'Kakuna', + new DungeonTrainer('Youngster', [ + new GymPokemon('Farfetch\'d', 720600, 20), + new GymPokemon('Farfetch\'d', 720600, 20), + ], { weight: 0.125 }, 'Cordell'), + new DungeonTrainer('Pokémon Breeder', [new GymPokemon('Chansey', 720600, 20)], { weight: 0.125 }, 'Bethany', '(female)'), + new DungeonTrainer('Bug Catcher', [new GymPokemon('Heracross', 720600, 20)], { weight: 0.125 }, 'Garett'), + new DungeonTrainer('Lass', [new GymPokemon('Snubbull', 720600, 20)], { weight: 0.125 }, 'Joanna'), + new DungeonTrainer('Youngster', [ + new GymPokemon('Weepinbell', 200000, 20), + new GymPokemon('Weepinbell', 200000, 20), + new GymPokemon('Victreebel', 200000, 20), + ], { weight: 0.125 }, 'Nash'), + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Venonat', 200000, 20), + new GymPokemon('Venomoth', 200000, 20), + ], { weight: 0.125 }, 'Vance'), + new DungeonTrainer('Ruin Maniac', [ + new GymPokemon('Sandslash', 200000, 20), + new GymPokemon('Onix', 200000, 20), + new GymPokemon('Sandslash', 200000, 20), + ], { weight: 0.125 }, 'Layton'), + new DungeonTrainer('Picnicker', [ + new GymPokemon('Paras', 200000, 20), + new GymPokemon('Paras', 200000, 20), + new GymPokemon('Parasect', 200000, 20), + ], { weight: 0.125 }, 'Marcy'), + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Yanma', 200000, 20), + new GymPokemon('Beedrill', 200000, 20), + new GymPokemon('Yanma', 200000, 20), + new GymPokemon('Beedrill', 200000, 20), + ], { weight: 0.125 }, 'Jonah'), + new DungeonTrainer('Lass', [ + new GymPokemon('Hoppip', 200000, 20), + new GymPokemon('Hoppip', 200000, 20), + new GymPokemon('Skiploom', 200000, 20), + new GymPokemon('Skiploom', 200000, 20), + ], { weight: 0.125 }, 'Dalia'), + new DungeonTrainer('Pokémon Breeder', [ + new GymPokemon('Clefairy', 200000, 20), + new GymPokemon('Clefairy', 200000, 20), + new GymPokemon('Clefable', 200000, 20), + ], { weight: 0.125 }, 'Allison', '(female)'), + new DungeonTrainer('Camper', [ + new GymPokemon('Pinsir', 200000, 20), + new GymPokemon('Heracross', 200000, 20), + ], { weight: 0.125 }, 'Riley'), +], { + common: [ + { loot: 'Cheri' }, + { loot: 'Chesto' }, + { loot: 'Pecha' }, + { loot: 'Rawst' }, + { loot: 'Aspear' }, + { loot: 'Leppa' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Persim' }, + { loot: 'Razz' }, + { loot: 'Bluk' }, + { loot: 'Nanab' }, + { loot: 'Wepear' }, + { loot: 'Pinap' }, + { loot: 'Figy' }, + { loot: 'Wiki' }, + { loot: 'Mago' }, + { loot: 'Aguav' }, + { loot: 'Iapapa' }, + ], + mythic: [{ loot: 'Lum', requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Pattern Bush')) }], +}, 720600, [new DungeonBossPokemon('Heracross', 3703000, 20)], 43000, 35, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.hoenn }); +dungeonList['Altering Cave'] = new Dungeon('Altering Cave', ['Zubat', 'Mareep', 'Pineco', 'Houndour', 'Teddiursa', 'Aipom', 'Shuckle'], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Grey Shard' }, + { loot: 'Ochre Shard' }, + ], + legendary: [ + { loot: 'SmallRestore', weight: 3 }, + { loot: 'MediumRestore', weight: 2 }, + { loot: 'LargeRestore' }, + ], +}, 720600, [ + new DungeonBossPokemon('Stantler', 3703000, 20), + new DungeonBossPokemon('Smeargle', 3703000, 20), +], 43000, 36, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.hoenn }); +// All Unown except "EFHP" +const TanobyUnownList = 'ABCDGIJKLMNOQRSTUVWXYZ!?'.split(''); +dungeonList['Tanoby Ruins'] = new Dungeon('Tanoby Ruins', [ + 'Tentacool', 'Tentacruel', 'Mantine', 'Magikarp', 'Horsea', 'Krabby', 'Qwilfish', 'Remoraid', 'Gyarados', 'Seadra', 'Psyduck', 'Kingler', + new DungeonTrainer('Ruin Maniac', [new GymPokemon('Onix', 1940, 20)], { weight: 0.75 }, 'Brandon'), + new DungeonTrainer('Gentleman', [ + new GymPokemon('Marowak', 200000, 20), + new GymPokemon('Golduck', 200000, 20), + ], { weight: 0.75 }, 'Clifford'), + new DungeonTrainer('Painter', [new GymPokemon('Smeargle', 200000, 20)], { weight: 0.75 }, 'Allison'), + new DungeonTrainer('Ruin Maniac', [ + new GymPokemon('Geodude', 200000, 20), + new GymPokemon('Graveler', 200000, 20), + new GymPokemon('Graveler', 200000, 20), + ], { weight: 0.75 }, 'Benjamin'), +], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], + rare: [{ loot: 'Grey Shard' }], + epic: [{ loot: 'Mind Plate' }], + mythic: [{ loot: 'Heart Scale' }], +}, 720600, [ + ...TanobyUnownList.map((char, index) => new DungeonBossPokemon(`Unown (${char})`, 4100000, 30, { + hide: true, + requirement: new OneFromManyRequirement([ + new SeededDateSelectNRequirement(index, TanobyUnownList.length, 1), + new MultiRequirement([new SeededDateSelectNRequirement(index, TanobyUnownList.length, 2), new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Tanoby Ruins'))]), + new MultiRequirement([new SeededDateSelectNRequirement(index, TanobyUnownList.length, 3), new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Tanoby Ruins'))]), + ]), + })), +], 43000, 39, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.hoenn }); +dungeonList['Pinkan Mountain'] = new Dungeon('Pinkan Mountain', ['Pinkan Rattata', 'Pinkan Nidoran(M)', 'Pinkan Nidoran(F)', 'Pinkan Mankey', 'Pinkan Rhyhorn'], { + common: [ + { loot: 'Pecha', weight: 6 }, + { loot: 'Persim' }, + { loot: 'Nanab' }, + { loot: 'Mago' }, + ], + rare: [ + { loot: 'Purple Shard' }, + { loot: 'Pink Shard', requirement: new MaxRegionRequirement(GameConstants.Region.kalos) }, + ], + epic: [ + { loot: 'Pinkan Pikachu', ignoreDebuff: true, requirement: new TemporaryBattleRequirement('Ash Ketchum Pinkan'), weight: 2 }, + { loot: 'Qualot' }, + { loot: 'Magost' }, + { loot: 'Watmel' }, + ], + legendary: [{ loot: 'Fairy_Feather' }], + mythic: [{ loot: 'Heart Scale' }], +}, 1503000, [ + new DungeonBossPokemon('Pinkan Primeape', 7000000, 40), + new DungeonBossPokemon('Pinkan Rhydon', 7000000, 40), + new DungeonBossPokemon('Pinkan Nidoking', 7000000, 40), +], 89500, 42, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.hoenn }); +// Johto Dungeons +dungeonList['Sprout Tower'] = new Dungeon('Sprout Tower', [ + { pokemon: 'Rattata', options: { weight: 8 } }, + { pokemon: 'Gastly', options: { weight: 8 } }, + { pokemon: 'Hoothoot', options: { weight: 8 } }, + new DungeonTrainer('Sage', [ + new GymPokemon('Bellsprout', 2500, 3), + new GymPokemon('Bellsprout', 2500, 3), + new GymPokemon('Bellsprout', 2500, 3), + ], { weight: 1 }, 'Nico'), + new DungeonTrainer('Sage', [ + new GymPokemon('Bellsprout', 2500, 3), + new GymPokemon('Bellsprout', 2500, 3), + new GymPokemon('Bellsprout', 2500, 3), + ], { weight: 1 }, 'Chow'), + new DungeonTrainer('Sage', [ + new GymPokemon('Bellsprout', 2500, 3), + new GymPokemon('Bellsprout', 2500, 3), + new GymPokemon('Bellsprout', 2500, 3), + ], { weight: 1 }, 'Edmond'), + new DungeonTrainer('Sage', [new GymPokemon('Bellsprout', 2500, 6)], { weight: 1 }, 'Jin'), + new DungeonTrainer('Sage', [new GymPokemon('Bellsprout', 2500, 6)], { weight: 1 }, 'Neal'), + new DungeonTrainer('Sage', [ + new GymPokemon('Bellsprout', 2500, 7), + new GymPokemon('Hoothoot', 2500, 7), + ], { weight: 1 }, 'Troy'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_incense' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + ], + legendary: [ + { loot: 'Meadow Plate', weight: 2 }, + { loot: 'SmallRestore' }, + { loot: 'Miracle_Seed' }, + ], +}, 56735, [ + new DungeonTrainer('Sage', [ + new GymPokemon('Bellsprout', 86000, 7), + new GymPokemon('Bellsprout', 86000, 7), + new GymPokemon('Hoothoot', 87000, 10), + ], { weight: 1 }, 'Li'), + new DungeonBossPokemon('Vivillon (Archipelago)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 12), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 13, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Archipelago)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 2500, 31); +// All Unown except "E?!" +const AlphUnownList = 'ABCDFGHIJKLMNOPQRSTUVWXYZ'.split(''); +dungeonList['Ruins of Alph'] = new Dungeon('Ruins of Alph', [ + { pokemon: 'Poliwag', options: { weight: 0.6 } }, + { pokemon: 'Poliwhirl', options: { weight: 0.6 } }, + { pokemon: 'Magikarp', options: { weight: 0.6 } }, + { pokemon: 'Natu', options: { weight: 0.6 } }, + { pokemon: 'Wooper', options: { weight: 0.6 } }, + { pokemon: 'Quagsire', options: { weight: 0.6 } }, + { pokemon: 'Smeargle', options: { weight: 0.6 } }, + new DungeonTrainer('Psychic', [new GymPokemon('Girafarig', 3000, 26)], { weight: 1 }, 'Nathan', '(male)'), +], { + common: [ + { loot: 'Oran', weight: 2 }, + { loot: 'Greatball' }, + { loot: 'Pecha' }, + { loot: 'Sitrus' }, + { loot: 'Leppa' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + ], + legendary: [ + { loot: 'SmallRestore', weight: 2 }, + { loot: 'Star Piece' }, + { loot: 'Twisted_Spoon' }, + ], + mythic: [ + { loot: 'LargeRestore' }, + { loot: 'Max Revive' }, + ], +}, 60600, [ + ...AlphUnownList.map((char, index) => new DungeonBossPokemon(`Unown (${char})`, 280000, 14, { + hide: true, + requirement: new OneFromManyRequirement([ + new SeededDateSelectNRequirement(index, AlphUnownList.length, 1), + new MultiRequirement([new SeededDateSelectNRequirement(index, AlphUnownList.length, 2), new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Ruins of Alph'))]), + new MultiRequirement([new SeededDateSelectNRequirement(index, AlphUnownList.length, 3), new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Ruins of Alph'))]), + ]), + })), + new DungeonBossPokemon('Togepi (Flowering Crown)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Togepi (Flowering Crown)', 0, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 3000, 32); +dungeonList['Union Cave'] = new Dungeon('Union Cave', [ + { pokemon: 'Rattata', options: { weight: 1.5 } }, + { pokemon: 'Sandshrew', options: { weight: 1.5 } }, + { pokemon: 'Zubat', options: { weight: 1.5 } }, + { pokemon: 'Geodude', options: { weight: 1.5 } }, + { pokemon: 'Onix', options: { weight: 1.5 } }, + { pokemon: 'Goldeen', options: { weight: 1.5 } }, + { pokemon: 'Magikarp', options: { weight: 1.5 } }, + { pokemon: 'Wooper', options: { weight: 1.5 } }, + new DungeonTrainer('Hiker', [ + new GymPokemon('Geodude', 2000, 4), + new GymPokemon('Geodude', 3000, 6), + new GymPokemon('Geodude', 4000, 8), + ], { weight: 1 }, 'Russell'), + new DungeonTrainer('Firebreather', [ + new GymPokemon('Koffing', 3000, 6), + new GymPokemon('Koffing', 3000, 6), + ], { weight: 1 }, 'Bill'), + new DungeonTrainer('PokéManiac', [new GymPokemon('Slowpoke', 3000, 10)], { weight: 1 }, 'Larry'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'xClick', weight: 2 }, + { loot: 'Geodude' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [{ loot: 'Greatball' }], + legendary: [ + { loot: 'SmallRestore' }, + { loot: 'Revive' }, + { loot: 'Soft_Sand', weight: 3 }, + ], + mythic: [ + { loot: 'Ultraball' }, + { loot: 'LargeRestore' }, + ], +}, 63600, [ + new DungeonTrainer('Hiker', [new GymPokemon('Onix', 300000, 11)], { weight: 1 }, 'Daniel'), + new DungeonTrainer('Firebreather', [new GymPokemon('Vulpix', 300000, 9)], { weight: 1 }, 'Ray'), + new DungeonBossPokemon('Lapras', 450000, 20, { + hide: true, + requirement: new MultiRequirement([ + new GymBadgeRequirement(BadgeEnums.Fog), + new DayOfWeekRequirement(GameConstants.DayOfWeek.Friday), + ]) + }), +], 3000, 32); +dungeonList['Slowpoke Well'] = new Dungeon('Slowpoke Well', [ + { pokemon: 'Zubat', options: { weight: 6 } }, + { pokemon: 'Slowpoke', options: { weight: 6 } }, + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 3500, 9), + new GymPokemon('Rattata', 3500, 9), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 3500, 9), + new GymPokemon('Ekans', 3500, 11), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 3500, 7), + new GymPokemon('Zubat', 3500, 9), + new GymPokemon('Zubat', 3500, 9), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'Token_collector', weight: 2 }, + { loot: 'Dowsing_machine' }, + ], + rare: [{ loot: 'Grey Shard' }], + epic: [ + { loot: 'Greatball' }, + { loot: 'Lureball' }, + ], + legendary: [ + { loot: 'Splash Plate', weight: 2 }, + { loot: 'MediumRestore' }, + { loot: 'Poison_Barb' }, + ], +}, 67900, [ + new DungeonTrainer('Rocket Executive', [new GymPokemon('Koffing', 320000, 14)], { weight: 1 }, 'Proton', '(proton)'), + new DungeonBossPokemon('Togepi (Flowering Crown)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Togepi (Flowering Crown)', 1, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 3500, 33); +dungeonList['Ilex Forest'] = new Dungeon('Ilex Forest', [ + { pokemon: 'Caterpie', options: { weight: 0.5 } }, + { pokemon: 'Metapod', options: { weight: 0.5 } }, + { pokemon: 'Weedle', options: { weight: 0.5 } }, + { pokemon: 'Kakuna', options: { weight: 0.5 } }, + { pokemon: 'Zubat', options: { weight: 0.5 } }, + { pokemon: 'Oddish', options: { weight: 0.5 } }, + { pokemon: 'Paras', options: { weight: 0.5 } }, + { pokemon: 'Hoothoot', options: { weight: 0.5 } }, + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Ledyba', 4000, 8), + new GymPokemon('Paras', 4000, 10), + ], { weight: 1 }, 'Wayne'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Lucky_egg' }, + ], + rare: [{ loot: 'Green Shard' }], + epic: [{ loot: 'Spiky-eared Pichu', ignoreDebuff: true, requirement: new QuestLineStepCompletedRequirement('Unfinished Business', 7) }], + legendary: [ + { loot: 'Revive' }, + { loot: 'Insect Plate' }, + { loot: 'MediumRestore' }, + { loot: 'Silver_Powder' }, + ], + mythic: [{ loot: 'Zap Plate' }], +}, 82200, [ + new DungeonBossPokemon('Noctowl', 340000, 30), + new DungeonBossPokemon('Beedrill', 340000, 30), + new DungeonBossPokemon('Butterfree', 340000, 30), + new DungeonBossPokemon('Celebi', 800000, 50, { requirement: new QuestLineStepCompletedRequirement('Unfinished Business', 12) }), + new DungeonBossPokemon('Grinch Celebi', 1600000, 100, { + hide: true, + requirement: new MultiRequirement([ + new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion), + new SpecialEventRequirement('Merry Christmas!'), + ]) + }), + new DungeonTrainer('Egg Hunter', [new GymPokemon('Togepi (Flowering Crown)', 900000, 100)], { + hide: true, + weight: 2, + requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('Egg Hunt', 0), + new QuestLineStepCompletedRequirement('Egg Hunt', 1, GameConstants.AchievementOption.less), + ]), + }), + new DungeonBossPokemon('Togepi (Flowering Crown)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Togepi (Flowering Crown)', 2, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 4000, 34); +dungeonList['Burned Tower'] = new Dungeon('Burned Tower', ['Rattata', 'Raticate', 'Zubat', 'Koffing'], { + common: [ + { loot: 'Dowsing_machine', weight: 2 }, + { loot: 'xAttack' }, + ], + rare: [{ loot: 'Red Shard' }], + legendary: [ + { loot: 'Revive' }, + { loot: 'Flame Plate' }, + { loot: 'Ultraball' }, + { loot: 'Charcoal' }, + ], +}, 88500, [new DungeonBossPokemon('Golbat', 360000, 35), new DungeonBossPokemon('Weezing', 320000, 35), new DungeonBossPokemon('Shuckle', 610000, 50)], 4500, 37); +dungeonList['Olivine Lighthouse'] = new Dungeon('Olivine Lighthouse', [ + new DungeonTrainer('Gentleman', [new GymPokemon('Noctowl', 4550, 22)], { weight: 1 }, 'Alfred'), + new DungeonTrainer('Sailor', [ + new GymPokemon('Poliwag', 4550, 18), + new GymPokemon('Poliwhirl', 4550, 20), + ], { weight: 1 }, 'Huey'), + new DungeonTrainer('Bird Keeper', [ + new GymPokemon('Pidgey', 4200, 17), + new GymPokemon('Pidgey', 4200, 15), + new GymPokemon('Pidgey', 4200, 19), + new GymPokemon('Pidgey', 4200, 15), + new GymPokemon('Pidgey', 4200, 15), + ], { weight: 1 }, 'Theo'), + new DungeonTrainer('Sailor', [ + new GymPokemon('Krabby', 4550, 18), + new GymPokemon('Krabby', 4550, 20), + ], { weight: 1 }, 'Kent'), + new DungeonTrainer('Bird Keeper', [ + new GymPokemon('Spearow', 4550, 18), + new GymPokemon('Fearow', 4550, 20), + new GymPokemon('Spearow', 4550, 18), + ], { weight: 1 }, 'Denis'), + new DungeonTrainer('Gentleman', [ + new GymPokemon('Growlithe', 4550, 18), + new GymPokemon('Growlithe', 4550, 18), + ], { weight: 1 }, 'Preston'), + new DungeonTrainer('Lass', [new GymPokemon('Marill', 4550, 21)], { weight: 1 }, 'Connie'), + new DungeonTrainer('Sailor', [new GymPokemon('Poliwhirl', 4550, 20)], { weight: 1 }, 'Terell'), +], { + common: [ + { loot: 'Lucky_incense', weight: 2 }, + { loot: 'Dowsing_machine' }, + ], + rare: [{ loot: 'Yellow Shard' }], + epic: [{ loot: 'Greatball' }], + legendary: [ + { loot: 'Zap Plate' }, + { loot: 'MediumRestore' }, + ], + mythic: [ + { loot: 'Ultraball' }, + { loot: 'LargeRestore' }, + ], +}, 88500, [ + new DungeonTrainer('Sailor', [ + new GymPokemon('Machop', 125000, 18), + new GymPokemon('Machop', 125000, 18), + new GymPokemon('Poliwhirl', 125000, 18), + ], { weight: 1 }, 'Roberto'), +], 4500, 40); +dungeonList['Tin Tower'] = new Dungeon('Tin Tower', ['Rattata', 'Gastly'], { + common: [ + { loot: 'xClick' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Grey Shard' }, + ], + legendary: [ + { loot: 'MediumRestore' }, + { loot: 'Ultraball' }, + { loot: 'Flame Plate' }, + { loot: 'Spooky Plate' }, + { loot: 'Sky Plate' }, + { loot: 'Sharp_Beak' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 88500, [ + new DungeonBossPokemon('Raticate', 380000, 35), + new DungeonBossPokemon('Haunter', 380000, 35), + new DungeonBossPokemon('Ho-Oh', 1410000, 100, { requirement: new QuestLineStepCompletedRequirement('Rainbow Guardian', 1) }), + new DungeonBossPokemon('Togepi (Flowering Crown)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Togepi (Flowering Crown)', 4, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 4500, 37); +dungeonList['Whirl Islands'] = new Dungeon('Whirl Islands', ['Zubat', 'Golbat', 'Seel', 'Krabby', 'Horsea'], { + common: [ + { loot: 'Lucky_incense' }, + { loot: 'Token_collector' }, + ], + rare: [{ loot: 'Blue Shard' }], + epic: [{ loot: 'Moonball' }], + legendary: [ + { loot: 'Revive' }, + { loot: 'Mind Plate' }, + { loot: 'Sky Plate' }, + { loot: 'Mystic_Water' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 92800, [ + new DungeonBossPokemon('Dewgong', 400000, 40), + new DungeonBossPokemon('Kingler', 400000, 40), + new DungeonBossPokemon('Lugia', 1410000, 100, { requirement: new QuestLineStepCompletedRequirement('Whirl Guardian', 9) }), + new DungeonBossPokemon('Togepi (Flowering Crown)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Togepi (Flowering Crown)', 3, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 5000, 41); +dungeonList['Mt. Mortar'] = new Dungeon('Mt. Mortar', [ + { pokemon: 'Rattata', options: { weight: 0.5 } }, + { pokemon: 'Raticate', options: { weight: 0.5 } }, + { pokemon: 'Zubat', options: { weight: 0.5 } }, + { pokemon: 'Golbat', options: { weight: 0.5 } }, + { pokemon: 'Geodude', options: { weight: 0.5 } }, + { pokemon: 'Graveler', options: { weight: 0.5 } }, + { pokemon: 'Marill', options: { weight: 0.5 } }, + new DungeonTrainer('PokéManiac', [ + new GymPokemon('Nidoking', 5500, 17), + new GymPokemon('Nidoqueen', 5500, 17), + ], { weight: 1 }, 'Miller'), + new DungeonTrainer('Super Nerd', [new GymPokemon('Slowpoke', 5500, 19)], { weight: 1 }, 'Markus'), + new DungeonTrainer('Super Nerd', [new GymPokemon('Seadra', 5500, 39)], { weight: 1 }, 'Hugh'), +], { + common: [ + { loot: 'xAttack', weight: 6 }, + { loot: 'Graveler' }, + ], + rare: [{ loot: 'Grey Shard' }], + epic: [ + { loot: 'Iron Plate' }, + { loot: 'Stone Plate' }, + { loot: 'Earth Plate' }, + { loot: 'Draco Plate' }, + ], + legendary: [ + { loot: 'Ultraball' }, + { loot: 'LargeRestore' }, + { loot: 'Revive' }, + { loot: 'Black_Belt' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 104100, [ + new DungeonTrainer('Black Belt', [ + new GymPokemon('Hitmonlee', 210000, 34), + new GymPokemon('Hitmonchan', 210000, 34), + ], { weight: 1 }, 'Kiyo'), + new DungeonBossPokemon('Tyrogue', 420000, 45, { hide: true, requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Mt. Mortar')) }), +], 5500, 42, () => { + BagHandler.gainItem({ type: ItemType.item, id: 'Fighting_egg' }, 1); + Notifier.notify({ + message: 'You were awarded a Fighting Egg for defeating Black Belt Kiyo.', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); +}); +dungeonList['Team Rocket\'s Hideout'] = new Dungeon('Team Rocket\'s Hideout', [ + { pokemon: 'Geodude', options: { weight: 0.5 } }, + { pokemon: 'Voltorb', options: { weight: 0.5 } }, + { pokemon: 'Electrode', options: { weight: 0.5 } }, + { pokemon: 'Koffing', options: { weight: 0.5 } }, + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 5500, 16), + new GymPokemon('Rattata', 5500, 16), + new GymPokemon('Rattata', 5500, 16), + new GymPokemon('Rattata', 5500, 16), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magnemite', 5500, 20), + new GymPokemon('Magnemite', 5500, 20), + new GymPokemon('Magnemite', 5500, 20), + ], { weight: 1 }, 'Jed', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Drowzee', 5500, 17), + new GymPokemon('Zubat', 5500, 19), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 5500, 16), + new GymPokemon('Grimer', 5500, 17), + new GymPokemon('Rattata', 5500, 18), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Venonat', 5500, 18), + new GymPokemon('Venonat', 5500, 18), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [new GymPokemon('Golbat', 5500, 18)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 5500, 17), + new GymPokemon('Zubat', 5500, 17), + new GymPokemon('Rattata', 5500, 17), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Ekans', 5500, 18), + new GymPokemon('Gloom', 5500, 18), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Rocket Grunt', [new GymPokemon('Raticate', 5500, 19)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Koffing', 5500, 22), + new GymPokemon('Koffing', 5500, 22), + ], { weight: 1 }, 'Ross', '(male)'), + new DungeonTrainer('Scientist', [new GymPokemon('Ditto', 5500, 24)], { weight: 1 }, 'Mitch', '(male)'), +], { + common: [ + { loot: 'xAttack', weight: 3 }, + { loot: 'Token_collector', weight: 3 }, + { loot: 'Electrode' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + ], + legendary: [ + { loot: 'Ultraball', weight: 2 }, + { loot: 'Revive', weight: 2 }, + { loot: 'LargeRestore' }, + { loot: 'Dread Plate' }, + { loot: 'Splash Plate' }, + { loot: 'Black_Glasses' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Team Rocket\'s Hideout')) }], +}, 104100, [ + new DungeonTrainer('Rocket Executive', [ + new GymPokemon('Zubat', 140000, 22), + new GymPokemon('Koffing', 140000, 22), + new GymPokemon('Raticate', 140000, 24), + ], { weight: 1 }, 'Petrel', '(petrel)'), + new DungeonTrainer('Rocket Executive', [ + new GymPokemon('Arbok', 140000, 23), + new GymPokemon('Gloom', 140000, 23), + new GymPokemon('Murkrow', 140000, 25), + ], { weight: 1 }, 'Ariana', '(ariana)'), +], 5500, 43); +dungeonList['Radio Tower'] = new Dungeon('Radio Tower', [ + new DungeonTrainer('Team Rocket Grunt', [new GymPokemon('Rattata', 5750, 27)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Muk', 5750, 23), + new GymPokemon('Koffing', 5750, 23), + new GymPokemon('Rattata', 5750, 25), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Koffing', 5750, 24), + new GymPokemon('Muk', 5750, 24), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Burglar', [ + new GymPokemon('Growlithe', 5500, 26), + new GymPokemon('Koffing', 5500, 24), + ], { weight: 1 }, 'Eddie'), + new DungeonTrainer('Burglar', [ + new GymPokemon('Koffing', 5500, 23), + new GymPokemon('Magmar', 5500, 25), + new GymPokemon('Koffing', 5500, 23), + ], { weight: 1 }, 'Duncan'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Gloom', 5750, 25), + new GymPokemon('Gloom', 5750, 25), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Raticate', 5750, 24), + new GymPokemon('Golbat', 5750, 24), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Grimer', 5750, 26), + new GymPokemon('Weezing', 5750, 23), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Koffing', 5750, 25), + new GymPokemon('Koffing', 5750, 25), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Raticate', 5750, 24), + new GymPokemon('Raticate', 5750, 24), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [new GymPokemon('Arbok', 5750, 26)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Rattata', 5750, 21), + new GymPokemon('Rattata', 5750, 21), + new GymPokemon('Rattata', 5750, 21), + new GymPokemon('Rattata', 5750, 21), + new GymPokemon('Rattata', 5750, 21), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Grimer', 5750, 23), + new GymPokemon('Grimer', 5750, 23), + new GymPokemon('Muk', 5750, 25), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 5750, 26), + new GymPokemon('Zubat', 5750, 26), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Koffing', 5750, 23), + new GymPokemon('Zubat', 5750, 23), + new GymPokemon('Rattata', 5750, 23), + new GymPokemon('Grimer', 5750, 23), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magnemite', 5500, 27), + new GymPokemon('Magnemite', 5500, 27), + new GymPokemon('Magnemite', 5500, 27), + ], { weight: 1 }, 'Marc', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [new GymPokemon('Weezing', 5750, 26)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Raticate', 5750, 24), + new GymPokemon('Koffing', 5750, 26), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Zubat', 5750, 22), + new GymPokemon('Golbat', 5750, 24), + new GymPokemon('Grimer', 5750, 22), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [new GymPokemon('Porygon', 5750, 30)], { weight: 1 }, 'Rich', '(male)'), + new DungeonTrainer('Team Rocket Grunt', [ + new GymPokemon('Ekans', 5750, 21), + new GymPokemon('Oddish', 5750, 23), + new GymPokemon('Ekans', 5750, 21), + new GymPokemon('Gloom', 5750, 24), + ], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_egg' }, + ], + rare: [{ loot: 'Yellow Shard' }], + epic: [ + { loot: 'Persim' }, + { loot: 'Razz' }, + { loot: 'Bluk' }, + { loot: 'Nanab' }, + { loot: 'Wepear' }, + { loot: 'Pinap' }, + { loot: 'Figy' }, + { loot: 'Wiki' }, + { loot: 'Mago' }, + { loot: 'Aguav' }, + { loot: 'Iapapa' }, + ], + legendary: [ + { loot: 'Metal_Powder' }, + { loot: 'Magnet' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Radio Tower')) }, + ], +}, 112000, [ + new DungeonTrainer('Rocket Executive', [ + new GymPokemon('Houndour', 143000, 33), + new GymPokemon('Koffing', 143000, 32), + new GymPokemon('Houndoom', 144000, 35), + ], { weight: 1 }, 'Archer', '(archer)'), + new DungeonTrainer('Rocket Executive', [new GymPokemon('Golbat', 430000, 36)], { weight: 1 }, 'Proton', '(proton)'), + new DungeonTrainer('Rocket Executive', [ + new GymPokemon('Koffing', 71000, 30), + new GymPokemon('Koffing', 71000, 30), + new GymPokemon('Koffing', 71000, 30), + new GymPokemon('Koffing', 71000, 30), + new GymPokemon('Weezing', 72000, 32), + new GymPokemon('Koffing', 71000, 30), + ], { weight: 1 }, 'Petrel', '(petrel)'), + new DungeonTrainer('Rocket Executive', [ + new GymPokemon('Arbok', 143000, 32), + new GymPokemon('Gloom', 143000, 32), + new GymPokemon('Murkrow', 144000, 32), + ], { weight: 1 }, 'Ariana', '(ariana)'), +], 5750, 43); +dungeonList['Ice Path'] = new Dungeon('Ice Path', ['Zubat', 'Jynx', 'Swinub'], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_egg' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Purple Shard' }, + ], + legendary: [ + { loot: 'Icicle Plate' }, + { loot: 'Revive' }, + { loot: 'Never_Melt_Ice' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(450, GameConstants.getDungeonIndex('Ice Path')) }], +}, 120400, [ + new DungeonBossPokemon('Delibird', 440000, 50), + new DungeonBossPokemon('Togepi (Flowering Crown)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Togepi (Flowering Crown)', 5, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 6000, 44); +dungeonList['Dark Cave'] = new Dungeon('Dark Cave', ['Zubat', 'Golbat', 'Geodude', 'Graveler', 'Wobbuffet'], { + common: [ + { loot: 'Pokeball' }, + { loot: 'Dowsing_machine' }, + ], + rare: [{ loot: 'Purple Shard' }], + legendary: [ + { loot: 'Dread Plate', weight: 2 }, + { loot: 'Revive' }, + { loot: 'Star Piece' }, + { loot: 'SmallRestore' }, + { loot: 'Silk_Scarf' }, + ], + mythic: [ + { loot: 'Heart Scale' }, + { loot: 'Max Revive' }, + ], +}, 127000, [ + new DungeonBossPokemon('Dunsparce', 460000, 55), + new DungeonBossPokemon('Vivillon (Monsoon)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 6), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 7, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Monsoon)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 6500, 45); +dungeonList['Tohjo Falls'] = new Dungeon('Tohjo Falls', ['Rattata', 'Raticate', 'Zubat', 'Slowpoke', 'Goldeen', 'Magikarp'], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + ], + legendary: [ + { loot: 'Hard Stone' }, + { loot: 'SmallRestore' }, + { loot: 'Fairy_Feather' }, + { loot: 'Rock_Incense' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 127750, [ + new DungeonBossPokemon('Golbat', 480000, 55), + new DungeonBossPokemon('Seaking', 480000, 55), +], 6750, 45); +dungeonList['Victory Road Johto'] = new Dungeon('Victory Road Johto', ['Golbat', 'Graveler', 'Onix', 'Rhyhorn'], { + common: [ + { loot: 'Dowsing_machine', weight: 6 }, + { loot: 'Graveler' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + ], + legendary: [ + { loot: 'Earth Plate', weight: 2 }, + { loot: 'Ultraball', weight: 2 }, + { loot: 'SmallRestore', weight: 2 }, + { loot: 'LargeRestore' }, + { loot: 'Dragon_Fang' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 128500, [ + new DungeonBossPokemon('Sandslash', 500000, 55), + new DungeonBossPokemon('Rhydon', 500000, 55), +], 7000, 26); +dungeonList['Mt. Silver'] = new Dungeon('Mt. Silver', ['Ponyta', 'Doduo', 'Tangela', 'Sneasel', 'Ursaring', 'Donphan', 'Teddiursa', 'Phanpy', 'Quagsire', 'Misdreavus'], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + ], + legendary: [ + { loot: 'Fist Plate', weight: 2 }, + { loot: 'Zap Plate', weight: 2 }, + { loot: 'Ultraball', weight: 2 }, + { loot: 'LargeRestore' }, + { loot: 'Revive' }, + { loot: 'Star Piece' }, + { loot: 'Spell_Tag' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Heart Scale' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(450, GameConstants.getDungeonIndex('Mt. Silver')) }, + ], +}, 130500, [new DungeonBossPokemon('Larvitar', 840000, 60)], 10000, 28); +// Hoenn Dungeons +dungeonList['Petalburg Woods'] = new Dungeon('Petalburg Woods', [ + { pokemon: 'Poochyena', options: { weight: 1.33 } }, + { pokemon: 'Wurmple', options: { weight: 1.33 } }, + { pokemon: 'Silcoon', options: { weight: 1.33 } }, + { pokemon: 'Cascoon', options: { weight: 1.33 } }, + { pokemon: 'Taillow', options: { weight: 1.33 } }, + { pokemon: 'Shroomish', options: { weight: 1.33 } }, + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Wurmple', 12000, 3), + new GymPokemon('Wurmple', 12000, 3), + new GymPokemon('Wurmple', 12000, 3), + new GymPokemon('Wurmple', 12000, 3), + ], { weight: 1 }, 'Lyle'), + new DungeonTrainer('Bug Catcher', [ + new GymPokemon('Nincada', 12000, 6), + new GymPokemon('Nincada', 12000, 6), + ], { weight: 1 }, 'James'), +], { + common: [ + { loot: 'Pokeball' }, + { loot: 'Token_collector' }, + ], + rare: [{ loot: 'Green Shard' }], + epic: [ + { loot: 'Meadow Plate' }, + { loot: 'Insect Plate' }, + { loot: 'Iron Plate' }, + { loot: 'Greatball' }, + ], + legendary: [ + { loot: 'SmallRestore' }, + { loot: 'Miracle_Seed' }, + ], +}, 380000, [ + new DungeonBossPokemon('Slakoth', 860000, 10, { hide: true, requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Petalburg Woods')) }), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Poochyena', 860000, 9)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Egg Hunter', [new GymPokemon('Togepi (Flowering Crown)', 2700000, 100)], { + hide: true, + weight: 0.34, + requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('Egg Hunt', 1), + new QuestLineStepCompletedRequirement('Egg Hunt', 2, GameConstants.AchievementOption.less), + ]), + }), + new DungeonBossPokemon('Torchic (Egg)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Torchic (Egg)', 0, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 12000, 101); +dungeonList['Rusturf Tunnel'] = new Dungeon('Rusturf Tunnel', [ + { pokemon: 'Whismur', options: { weight: 4 } }, + new DungeonTrainer('Hiker', [ + new GymPokemon('Geodude', 14000, 16), + new GymPokemon('Geodude', 14000, 16), + new GymPokemon('Machop', 14000, 16), + ], { weight: 1 }, 'Mike'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Pokeball' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + ], + legendary: [ + { loot: 'Stone Plate', weight: 2 }, + { loot: 'Iron Plate', weight: 2 }, + { loot: 'Earth Plate', weight: 2 }, + { loot: 'Revive' }, + { loot: 'Star Piece' }, + { loot: 'Hard Stone' }, + ], + mythic: [{ loot: 'Heart Scale' }], +}, 400000, [ + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Poochyena', 900000, 11)], { weight: 1 }, undefined, '(male)'), + new DungeonBossPokemon('Torchic (Egg)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Torchic (Egg)', 1, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 14000, 101); +dungeonList['Granite Cave'] = new Dungeon('Granite Cave', ['Zubat', 'Abra', 'Geodude', 'Makuhita', 'Aron', 'Sableye'], { + common: [ + { loot: 'Pokeball' }, + { loot: 'xAttack' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Iron Plate' }, + { loot: 'Earth Plate' }, + { loot: 'Everstone' }, + { loot: 'Revive' }, + ], + legendary: [ + { loot: 'MediumRestore' }, + { loot: 'Star Piece', ignoreDebuff: true }, + { loot: 'Rock_Incense' }, + ], + mythic: [{ loot: 'Heart Scale' }], +}, 410000, [ + new DungeonBossPokemon('Mawile', 960000, 20), + new DungeonBossPokemon('Nosepass', 660000, 20), + new DungeonTrainer('Lorekeeper', [ + new GymPokemon('Tyrantrum', 4073950, 57), + new GymPokemon('Altaria', 4073950, 57), + new GymPokemon('Salamence', 4073950, 57), + new GymPokemon('Whismur', 4073950, 57), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('The Delta Episode', 9) }, 'Zinnia'), +], 16000, 101); +dungeonList['Fiery Path'] = new Dungeon('Fiery Path', ['Machop', 'Grimer', 'Koffing', 'Slugma', 'Numel'], { + common: [ + { loot: 'xAttack' }, + { loot: 'Dowsing_machine' }, + ], + rare: [{ loot: 'Red Shard' }], + legendary: [ + { loot: 'Flame Plate' }, + { loot: 'Draco Plate' }, + ], +}, 424000, [new DungeonBossPokemon('Torkoal', 1200000, 20)], 17000, 101); +dungeonList['Meteor Falls'] = new Dungeon('Meteor Falls', [ + { pokemon: 'Zubat', options: { weight: 0.8 } }, + { pokemon: 'Golbat', options: { weight: 0.8 } }, + { pokemon: 'Goldeen', options: { weight: 0.8 } }, + { pokemon: 'Magikarp', options: { weight: 0.8 } }, + { pokemon: 'Barboach', options: { weight: 0.8 } }, + { pokemon: 'Bagon', options: { weight: 0.8, hide: true, requirement: new ObtainedPokemonRequirement('Bagon') } }, + new DungeonTrainer('Old Couple', [ + new GymPokemon('Medicham', 18000, 39), + new GymPokemon('Hariyama', 18000, 39), + ], { weight: 1 }, 'John and Jay'), +], { + common: [ + { loot: 'Lucky_incense', weight: 6 }, + { loot: 'Pokeball', weight: 4 }, + { loot: 'Greatball' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + ], + epic: [ + { loot: 'Stone Plate' }, + { loot: 'Sky Plate' }, + { loot: 'Draco Plate' }, + { loot: 'Moonball' }, + ], + mythic: [{ loot: 'Star Piece' }], +}, 443000, [ + new DungeonBossPokemon('Solrock', 1240000, 20), + new DungeonBossPokemon('Lunatone', 1240000, 20), + new DungeonTrainer('Dragon Tamer', [ + new GymPokemon('Altaria', 640000, 37), + new GymPokemon('Altaria', 640000, 37), + ], { weight: 1 }, 'Nicolas'), + new DungeonTrainer('Draconid Elder', [ + new GymPokemon('Dragonite', 4073950, 57), + new GymPokemon('Flygon', 4073950, 57), + new GymPokemon('Haxorus', 4073950, 57), + new GymPokemon('Garchomp', 4073950, 57), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('The Delta Episode', 16) }), + new DungeonBossPokemon('Torchic (Egg)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Torchic (Egg)', 2, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 18000, 101); +dungeonList['Mt. Chimney Crater'] = new Dungeon('Mt. Chimney Crater', [ + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Numel', 20000, 20)], { weight: 2 }, undefined, '(female)'), + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Zubat', 20000, 20)], { weight: 2 }, undefined, '(male)'), + new DungeonTrainer('Magma Admin', [ + new GymPokemon('Numel', 18000, 18), + new GymPokemon('Poochyena', 20000, 20), + new GymPokemon('Numel', 22000, 22), + new GymPokemon('Zubat', 22000, 22), + ], { weight: 1 }, 'Tabitha'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + ], + legendary: [{ loot: 'Flame Plate' }], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Mt. Chimney Crater')) }], +}, 460000, [ + new DungeonTrainer('Magma Leader', [ + new GymPokemon('Mightyena', 450000, 24), + new GymPokemon('Zubat', 450000, 24), + new GymPokemon('Camerupt', 470000, 25), + ], { weight: 2, hide: true, requirement: new QuestLineCompletedRequirement('The Delta Episode', GameConstants.AchievementOption.less) }, 'Maxie'), + new DungeonTrainer('Magma Leader', [ + new GymPokemon('Mightyena', 4500000, 54), + new GymPokemon('Zubat', 4500000, 54), + new GymPokemon('Mega Camerupt', 4700000, 55), + ], { weight: 2, hide: true, requirement: new QuestLineCompletedRequirement('The Delta Episode') }, 'Maxie'), + new DungeonBossPokemon('Meta Groudon', 1820000, 20, { hide: true, requirement: new QuestLineStepCompletedRequirement('A Meta Discovery', 3) }), + new DungeonBossPokemon('Vivillon (Sun)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 10), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 11, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Sun)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 20000, 101); +dungeonList['Jagged Pass'] = new Dungeon('Jagged Pass', [ + { pokemon: 'Machop', options: { weight: 0.8 } }, + { pokemon: 'Numel', options: { weight: 0.8 } }, + { pokemon: 'Spoink', options: { weight: 0.8 } }, + new DungeonTrainer('Hiker', [ + new GymPokemon('Geodude', 22000, 20), + new GymPokemon('Baltoy', 22000, 20), + ], { weight: 1 }, 'Eric'), + new DungeonTrainer('Picnicker', [ + new GymPokemon('Shroomish', 22000, 19), + new GymPokemon('Oddish', 22000, 19), + new GymPokemon('Swablu', 22000, 19), + ], { weight: 1 }, 'Diana'), + new DungeonTrainer('Picnicker', [new GymPokemon('Shroomish', 22000, 21)], { weight: 1 }, 'Autumn'), + new DungeonTrainer('Triathlete', [new GymPokemon('Magnemite', 22000, 21)], { weight: 1 }, 'Julio', '(malecycling)'), + new DungeonTrainer('Camper', [ + new GymPokemon('Zigzagoon', 22000, 20), + new GymPokemon('Taillow', 22000, 20), + ], { weight: 1 }, 'Ethan'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Green Shard' }, + ], + epic: [{ loot: 'Greatball' }], + legendary: [ + { loot: 'Dread Plate' }, + { loot: 'Stone Plate' }, + ], +}, 460000, [ + new DungeonTrainer('Team Magma Grunt', [ + new GymPokemon('Mightyena', 700000, 22), + new GymPokemon('Zubat', 700000, 22), + ], { weight: 1 }, undefined, '(male)'), +], 22000, 101); +dungeonList['New Mauville'] = new Dungeon('New Mauville', ['Magnemite', 'Voltorb'], { + common: [ + { loot: 'Lucky_incense', weight: 3 }, + { loot: 'Cheri', weight: 3 }, + { loot: 'Voltorb' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + ], + epic: [ + { loot: 'Razz' }, + { loot: 'Ultraball' }, + ], + legendary: [{ loot: 'Zap Plate' }], +}, 460000, [ + new DungeonBossPokemon('Magneton', 1650000, 20), + new DungeonBossPokemon('Electrode', 1650000, 20), + new DungeonBossPokemon('Vivillon (Continental)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 18), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 19, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Continental)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), + new DungeonBossPokemon('Torchic (Egg)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Torchic (Egg)', 3, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 24000, 101); +dungeonList['Weather Institute'] = new Dungeon('Weather Institute', [ + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Carvanha', 39000, 28)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Zubat', 39000, 27), + new GymPokemon('Poochyena', 39000, 27), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Poochyena', 39000, 27), + new GymPokemon('Carvanha', 39000, 27), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Zubat', 39000, 27), + new GymPokemon('Poochyena', 39000, 27), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Poochyena', 39000, 26), + new GymPokemon('Zubat', 39000, 26), + new GymPokemon('Carvanha', 39000, 26), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Damp Rock' }, + { loot: 'Smooth Rock' }, + { loot: 'Heat Rock' }, + { loot: 'Icy Rock' }, + ], + legendary: [ + { loot: 'Splash Plate' }, + { loot: 'Mystic_Water' }, + ], +}, 470000, [ + new DungeonTrainer('Aqua Admin', [ + new GymPokemon('Carvanha', 910000, 28), + new GymPokemon('Mightyena', 910000, 28), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 9, GameConstants.AchievementOption.less) }, 'Shelly', '(shelly)'), + new DungeonTrainer('Aqua Admin', [ + new GymPokemon('Carvanha', 4500000, 58), + new GymPokemon('Mightyena', 4500000, 58), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 9) }, 'Shelly', '(shelly)'), + new DungeonBossPokemon('Castform', 1820000, 20, { hide: true, requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Weather Institute')) }), + new DungeonBossPokemon('Castform (Sunny)', 1820000, 20, { hide: true, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Castform'), new WeatherRequirement([WeatherType.Harsh_Sunlight])]) }), + new DungeonBossPokemon('Castform (Rainy)', 1820000, 20, { hide: true, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Castform'), new WeatherRequirement([WeatherType.Rain, WeatherType.Thunderstorm])]) }), + new DungeonBossPokemon('Castform (Snowy)', 1820000, 20, { hide: true, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Castform'), new WeatherRequirement([WeatherType.Snow, WeatherType.Blizzard, WeatherType.Hail])]) }), +], 26000, 101); +dungeonList['Mt. Pyre'] = new Dungeon('Mt. Pyre', [ + { pokemon: 'Shuppet', options: { weight: 12 } }, + { pokemon: 'Duskull', options: { weight: 12 } }, + { pokemon: 'Vulpix', options: { weight: 12 } }, + { pokemon: 'Wingull', options: { weight: 12 } }, + { pokemon: 'Meditite', options: { weight: 12 } }, + new DungeonTrainer('PokéManiac', [new GymPokemon('Rhyhorn', 28000, 31)], { weight: 1 }, 'Mark'), + new DungeonTrainer('Hex Maniac', [new GymPokemon('Spoink', 28000, 31)], { weight: 1 }, 'Leah'), + new DungeonTrainer('Black Belt', [new GymPokemon('Hariyama', 28000, 31)], { weight: 1 }, 'Zander'), + new DungeonTrainer('Young Couple', [ + new GymPokemon('Delcatty', 28000, 31), + new GymPokemon('Manectric', 28000, 31), + ], { weight: 1 }, 'Dez & Luke'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Wobbuffet', 28000, 26), + new GymPokemon('Natu', 28000, 26), + new GymPokemon('Kadabra', 28000, 26), + ], { weight: 1 }, 'Kayla', '(female)'), + new DungeonTrainer('Pokémon Breeder', [ + new GymPokemon('Skitty', 15000, 26), + new GymPokemon('Poochyena', 15000, 26), + new GymPokemon('Zigzagoon', 15000, 26), + new GymPokemon('Lotad', 15000, 26), + new GymPokemon('Seedot', 15000, 26), + new GymPokemon('Taillow', 15000, 26), + ], { weight: 1 }, 'Gabrielle', '(female)'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Ralts', 28000, 26), + new GymPokemon('Ralts', 28000, 26), + new GymPokemon('Kirlia', 28000, 26), + ], { weight: 1 }, 'William', '(male)'), + new DungeonTrainer('Hex Maniac', [new GymPokemon('Shuppet', 28000, 32)], { weight: 1 }, 'Tasha'), + new DungeonTrainer('Black Belt', [new GymPokemon('Hariyama', 28000, 32)], { weight: 1 }, 'Atsushi'), + new DungeonTrainer('Hex Maniac', [new GymPokemon('Sableye', 28000, 32)], { weight: 1 }, 'Valerie'), + new DungeonTrainer('Psychic', [new GymPokemon('Wobbuffet', 28000, 32)], { weight: 1 }, 'Cedric', '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Carvanha', 28000, 32)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Zubat', 28000, 32)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Poochyena', 28000, 30), + new GymPokemon('Carvanha', 28000, 30), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Wailmer', 28000, 30), + new GymPokemon('Zubat', 28000, 30), + ], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_incense' }, + ], + rare: [{ loot: 'Purple Shard' }], + epic: [{ loot: 'Ultraball' }], + legendary: [ + { loot: 'Spooky Plate' }, + { loot: 'Fist Plate' }, + { loot: 'Mind Plate' }, + { loot: 'Black_Belt' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Mt. Pyre')) }], +}, 480000, [ + new DungeonBossPokemon('Shuppet', 1880000, 20), + new DungeonBossPokemon('Duskull', 1890000, 20), + new DungeonBossPokemon('Chimecho', 1880000, 20), +], 28000, 101); +dungeonList['Magma Hideout'] = new Dungeon('Magma Hideout', [ + { pokemon: 'Geodude', options: { weight: 12 } }, + { pokemon: 'Graveler', options: { weight: 12 } }, + { pokemon: 'Torkoal', options: { weight: 12 } }, + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Poochyena', 29000, 29)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Numel', 29000, 29)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Mightyena', 29000, 29)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Magma Grunt', [ + new GymPokemon('Baltoy', 29000, 28), + new GymPokemon('Numel', 29000, 28), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Zubat', 29000, 29)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Numel', 29000, 29)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Mightyena', 29000, 29)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Baltoy', 29000, 29)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Magma Grunt', [new GymPokemon('Baltoy', 29000, 29)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Magma Admin', [ + new GymPokemon('Numel', 6000, 26), + new GymPokemon('Mightyena', 8000, 28), + new GymPokemon('Zubat', 10000, 30), + new GymPokemon('Camerupt', 13000, 33), + ], { weight: 1 }, 'Tabitha'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Figy', weight: 2 }, + { loot: 'Pinap' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + ], + legendary: [ + { loot: 'Flame Plate' }, + { loot: 'Dread Plate' }, + { loot: 'Nestball' }, + ], +}, 490000, [ + new DungeonTrainer('Magma Leader', [ + new GymPokemon('Mightyena', 630000, 37), + new GymPokemon('Crobat', 640000, 38), + new GymPokemon('Camerupt', 650000, 39), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('The Delta Episode', GameConstants.AchievementOption.less) }, 'Maxie'), + new DungeonTrainer('Magma Leader', [ + new GymPokemon('Mightyena', 6300000, 37), + new GymPokemon('Crobat', 6400000, 38), + new GymPokemon('Mega Camerupt', 6500000, 39), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('The Delta Episode') }, 'Maxie'), +], 29000, 101); +dungeonList['Aqua Hideout'] = new Dungeon('Aqua Hideout', [ + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Poochyena', 30000, 32)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Carvanha', 30000, 32)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Zubat', 30000, 31), + new GymPokemon('Carvanha', 30000, 31), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Poochyena', 30000, 31), + new GymPokemon('Zubat', 30000, 31), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Carvanha', 30000, 32)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Zubat', 30000, 32)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Zubat', 30000, 32)], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'Token_collector', weight: 4 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Electrode' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Lureball' }, + { loot: 'Diveball' }, + ], + legendary: [ + { loot: 'Dread Plate', weight: 2 }, + { loot: 'Splash Plate', weight: 2 }, + { loot: 'Duskball' }, + { loot: 'Nestball' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 490000, [ + new DungeonTrainer('Aqua Admin', [ + new GymPokemon('Mightyena', 900000, 34), + new GymPokemon('Golbat', 900000, 34), + ], { weight: 1 }, 'Matt', '(matt)'), +], 30000, 101); +dungeonList['Shoal Cave'] = new Dungeon('Shoal Cave', ['Zubat', 'Golbat', 'Spheal', 'Tentacool', 'Magikarp', 'Wailmer'], { + common: [ + { loot: 'xClick', weight: 2 }, + { loot: 'Lucky_incense' }, + ], + rare: [{ loot: 'Ochre Shard' }], + legendary: [ + { loot: 'Icicle Plate', weight: 2 }, + { loot: 'Star Piece' }, + { loot: 'Revive' }, + { loot: 'Never_Melt_Ice' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Heart Scale' }, + ], +}, 490000, [ + new DungeonBossPokemon('Snorunt', 1900000, 20), + new DungeonBossPokemon('Glalie', 61614300, 60, { hide: true, requirement: new TemporaryBattleRequirement('Icy Boulder') }), +], 30000, 101); +dungeonList['Cave of Origin'] = new Dungeon('Cave of Origin', ['Zubat', 'Golbat', 'Sableye', 'Mawile'], { + common: [{ loot: 'xAttack' }], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Ochre Shard' }, + ], + legendary: [{ loot: 'Revive' }], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Cave of Origin')) }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Cave of Origin')) }, + ], +}, 590000, [ + new DungeonBossPokemon('Exploud', 2000000, 50), + new DungeonBossPokemon('Kyogre', 4700000, 100, { requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), new QuestLineStepCompletedRequirement('The Weather Trio', 5)]) }), + new DungeonBossPokemon('Groudon', 4700000, 100, { requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), new QuestLineStepCompletedRequirement('The Weather Trio', 5)]) }), + new DungeonBossPokemon('Primal Kyogre', 95743340, 80, { hide: true, requirement: new MultiRequirement([new QuestLineCompletedRequirement('Primal Reversion'), new WeatherRequirement([WeatherType.Rain])]) }), + new DungeonBossPokemon('Primal Groudon', 95743340, 80, { hide: true, requirement: new MultiRequirement([new QuestLineCompletedRequirement('Primal Reversion'), new WeatherRequirement([WeatherType.Harsh_Sunlight])]) }), +], 34000, 101); +dungeonList['Seafloor Cavern'] = new Dungeon('Seafloor Cavern', [ + { pokemon: 'Zubat', options: { weight: 4.8 } }, + { pokemon: 'Golbat', options: { weight: 4.8 } }, + { pokemon: 'Tentacool', options: { weight: 4.8 } }, + { pokemon: 'Magikarp', options: { weight: 4.8 } }, + { pokemon: 'Wailmer', options: { weight: 4.8 } }, + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Poochyena', 32000, 36)], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7, GameConstants.AchievementOption.less) }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Carvanha', 32000, 36)], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7, GameConstants.AchievementOption.less) }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Zubat', 32000, 36)], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7, GameConstants.AchievementOption.less) }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Carvanha', 32000, 36)], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7, GameConstants.AchievementOption.less) }, undefined, '(female)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Mightyena', 32000, 35), + new GymPokemon('Golbat', 32000, 35), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7, GameConstants.AchievementOption.less) }, undefined, '(male)'), + new DungeonTrainer('Aqua Admin', [ + new GymPokemon('Sharpedo', 32000, 37), + new GymPokemon('Mightyena', 32000, 37), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7, GameConstants.AchievementOption.less) }, 'Shelly', '(shelly)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Poochyena', 3200000, 36)], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7) }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Carvanha', 3200000, 36)], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7) }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Zubat', 3200000, 36)], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7) }, undefined, '(male)'), + new DungeonTrainer('Team Aqua Grunt', [new GymPokemon('Carvanha', 3200000, 36)], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7) }, undefined, '(female)'), + new DungeonTrainer('Team Aqua Grunt', [ + new GymPokemon('Mightyena', 3200000, 35), + new GymPokemon('Golbat', 3200000, 35), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7) }, undefined, '(male)'), + new DungeonTrainer('Aqua Admin', [ + new GymPokemon('Sharpedo', 3200000, 37), + new GymPokemon('Mightyena', 3200000, 37), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7) }, 'Shelly', '(shelly)'), +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Hard Stone', requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7) }, + { loot: 'SmallRestore', requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 7) }, + ], + epic: [{ loot: 'Bluk' }], + legendary: [ + { loot: 'Splash Plate' }, + { loot: 'Earth Plate' }, + ], + mythic: [{ loot: 'Heart Scale' }], +}, 530000, [ + new DungeonTrainer('Aqua Leader', [ + new GymPokemon('Mightyena', 700000, 41), + new GymPokemon('Crobat', 700000, 41), + new GymPokemon('Sharpedo', 900000, 43), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('The Delta Episode', GameConstants.AchievementOption.less) }, 'Archie'), + new DungeonTrainer('Aqua Leader', [ + new GymPokemon('Mightyena', 7000000, 61), + new GymPokemon('Crobat', 7000000, 61), + new GymPokemon('Mega Sharpedo', 9000000, 63), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('The Delta Episode') }, 'Archie'), +], 32000, 101); +dungeonList['Sky Pillar'] = new Dungeon('Sky Pillar', ['Golbat', 'Sableye', 'Ariados', 'Banette', 'Mawile', 'Swablu'], { + common: [ + { loot: 'xAttack', weight: 4 }, + { loot: 'Greatball' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [{ loot: 'Ultraball' }], + legendary: [ + { loot: 'Sky Plate' }, + { loot: 'Mind Plate' }, + { loot: 'Draco Plate' }, + { loot: 'Sharp_Beak' }, + ], +}, 720000, [ + new DungeonBossPokemon('Claydol', 3200000, 20), + new DungeonBossPokemon('Altaria', 3200000, 20), + new DungeonBossPokemon('Dusclops', 3200000, 20), + new DungeonBossPokemon('Rayquaza', 5824002, 100, { requirement: new QuestLineStepCompletedRequirement('The Weather Trio', 5) }), + new DungeonBossPokemon('Vivillon (Polar)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 22), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 23, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Polar)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), + new DungeonBossPokemon('Torchic (Egg)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Torchic (Egg)', 5, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 34000, 101); +dungeonList['Sealed Chamber'] = new Dungeon('Sealed Chamber', ['Zubat', 'Magikarp', 'Tentacool', 'Wailmer', 'Horsea'], { + common: [ + { loot: 'xClick' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Greatball' }, + { loot: 'Diveball' }, + ], + legendary: [ + { loot: 'Stone Plate', weight: 2 }, + { loot: 'Icicle Plate', weight: 2 }, + { loot: 'Iron Plate', weight: 2 }, + { loot: 'Hard Stone' }, + ], +}, 500000, [ + new DungeonBossPokemon('Golbat', 4500000, 20, { hide: true, requirement: new QuestLineStepCompletedRequirement('The Three Golems', 8, GameConstants.AchievementOption.less) }), + new DungeonBossPokemon('Regirock', 4500000, 20, { requirement: new QuestLineStepCompletedRequirement('The Three Golems', 8) }), + new DungeonBossPokemon('Regice', 4500000, 20, { requirement: new QuestLineStepCompletedRequirement('The Three Golems', 8) }), + new DungeonBossPokemon('Registeel', 4500000, 20, { requirement: new QuestLineStepCompletedRequirement('The Three Golems', 8) }), + new DungeonBossPokemon('Torchic (Egg)', 2700000, 23, { + requirement: new MultiRequirement([ + new PokemonDefeatedSelectNRequirement('Torchic (Egg)', 4, 6, 1), + new SpecialEventRequirement('Easter'), + new QuestLineCompletedRequirement('Egg Hunt'), + ]), + hide: true, + }), +], 36000, 101); +dungeonList['Victory Road Hoenn'] = new Dungeon('Victory Road Hoenn', [ + { pokemon: 'Zubat', options: { weight: 4 } }, + { pokemon: 'Golbat', options: { weight: 4 } }, + { pokemon: 'Goldeen', options: { weight: 4 } }, + { pokemon: 'Magikarp', options: { weight: 4 } }, + { pokemon: 'Whismur', options: { weight: 4 } }, + { pokemon: 'Loudred', options: { weight: 4 } }, + { pokemon: 'Makuhita', options: { weight: 4 } }, + { pokemon: 'Aron', options: { weight: 4 } }, + { pokemon: 'Lairon', options: { weight: 4 } }, + { pokemon: 'Mawile', options: { weight: 4 } }, + { pokemon: 'Meditite', options: { weight: 4 } }, + { pokemon: 'Medicham', options: { weight: 4 } }, + { pokemon: 'Barboach', options: { weight: 4 } }, + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Magneton', 37000, 43), + new GymPokemon('Muk', 37000, 43), + ], { weight: 1 }, 'Albert', '(male)'), + new DungeonTrainer('Cooltrainer', [new GymPokemon('Roselia', 37000, 45)], { weight: 1 }, 'Hope', '(female)'), + new DungeonTrainer('Cooltrainer', [new GymPokemon('Claydol', 37000, 45)], { weight: 1 }, 'Shannon', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Swellow', 37000, 42), + new GymPokemon('Mawile', 37000, 42), + new GymPokemon('Kadabra', 37000, 42), + ], { weight: 1 }, 'Samuel', '(male)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Sandslash', 37000, 42), + new GymPokemon('Ninetales', 37000, 42), + new GymPokemon('Tropius', 37000, 42), + ], { weight: 1 }, 'Julie', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Claydol', 37000, 43), + new GymPokemon('Lanturn', 37000, 43), + ], { weight: 1 }, 'Dianne', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Medicham', 37000, 43), + new GymPokemon('Claydol', 37000, 43), + ], { weight: 1 }, 'Felix', '(male)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Skarmory', 37000, 43), + new GymPokemon('Sableye', 37000, 43), + ], { weight: 1 }, 'Caroline', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Dodrio', 30000, 42), + new GymPokemon('Kadabra', 30000, 42), + new GymPokemon('Electrode', 30000, 42), + new GymPokemon('Shiftry', 30000, 42), + ], { weight: 1 }, 'Vito', '(male)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Torkoal', 37000, 42), + new GymPokemon('Medicham', 37000, 42), + new GymPokemon('Ludicolo', 37000, 42), + ], { weight: 1 }, 'Michelle', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Lunatone', 37000, 43), + new GymPokemon('Solrock', 37000, 43), + ], { weight: 1 }, 'Mitchell', '(male)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Sableye', 37000, 43), + new GymPokemon('Absol', 37000, 43), + ], { weight: 1 }, 'Halle', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Cacturne', 37000, 43), + new GymPokemon('Pelipper', 37000, 43), + ], { weight: 1 }, 'Edgar', '(male)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Gardevoir', 37000, 43), + new GymPokemon('Slaking', 37000, 43), + ], { weight: 1 }, 'Katelynn', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Slaking', 37000, 43), + new GymPokemon('Dusclops', 37000, 43), + ], { weight: 1 }, 'Quincy', '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [{ loot: 'Ultraball' }], + legendary: [ + { loot: 'Mind Plate' }, + { loot: 'Flame Plate' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Victory Road Hoenn')) }], +}, 560000, [ + new DungeonBossPokemon('Whiscash', 3003000, 14), + new DungeonBossPokemon('Hariyama', 3003000, 14), +], 37000, 101); +dungeonList['Near Space'] = new Dungeon('Near Space', ['Solrock', 'Lunatone', 'Elgyem', 'Beheeyem'], { + common: [ + { loot: 'xClick' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Pink Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Duskball' }, + { loot: 'Moonball' }, + { loot: 'Star Piece' }, + ], + legendary: [ + { loot: 'Stone Plate' }, + { loot: 'Mind Plate' }, + { loot: 'Iron Plate' }, + ], + mythic: [{ loot: 'Carbos', requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Near Space')) }], +}, 9000000, [ + new DungeonBossPokemon('Deoxys', 95743340, 80), + new DungeonBossPokemon('Deoxys (Attack)', 95743340, 80, { hide: true, requirement: new ObtainedPokemonRequirement('Deoxys (Attack)') }), + new DungeonBossPokemon('Deoxys (Defense)', 95743340, 80, { hide: true, requirement: new ObtainedPokemonRequirement('Deoxys (Defense)') }), + new DungeonBossPokemon('Deoxys (Speed)', 95743340, 80, { hide: true, requirement: new ObtainedPokemonRequirement('Deoxys (Speed)') }), +], 700000, 131, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.kalos }); +// Orre +dungeonList['Phenac City Battles'] = new Dungeon('Phenac City Battles', [ + new DungeonTrainer('Miror B. Peon', [ + new GymPokemon('Whismur', 38000, 24), + new GymPokemon('Whismur', 38000, 25), + ], { weight: 1, requirement: new ClearDungeonRequirement(25, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less) }, 'Folly', '(folly)'), + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Corphish', 38000, 25), + new GymPokemon('Koffing', 38000, 27), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less) }, 'Wakin'), + new DungeonTrainer('Miror B. Peon', [ + new GymPokemon('Whismur', 38000, 26), + new GymPokemon('Lotad', 38000, 25), + ], { weight: 1, requirement: new ClearDungeonRequirement(75, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less) }, 'Folly', '(folly)'), + new DungeonTrainer('Mystery Troop Green', [ + new GymPokemon('Grimer', 38000, 26), + new GymPokemon('Spoink', 38000, 24), + new GymPokemon('Bayleef', 38000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Verde'), + new DungeonTrainer('Mystery Troop Red', [ + new GymPokemon('Grimer', 38000, 26), + new GymPokemon('Spoink', 38000, 24), + new GymPokemon('Quilava', 38000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Rosso'), + new DungeonTrainer('Mystery Troop Blue', [ + new GymPokemon('Grimer', 38000, 26), + new GymPokemon('Spoink', 38000, 24), + new GymPokemon('Croconaw', 38000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Bluno'), + new DungeonTrainer('Miror B. Peon', [ + new GymPokemon('Exploud', 38000, 53), + new GymPokemon('Ludicolo', 38000, 55), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less) }, 'Folly', '(folly)'), + new DungeonTrainer('Miror B. Peon', [ + new GymPokemon('Dusclops', 38000, 54), + new GymPokemon('Spinarak', 38000, 53), + new GymPokemon('Machoke', 38000, 53), + ], { weight: 1, requirement: new ClearDungeonRequirement(125, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less) }, 'Trudly', '(trudly)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Seviper', 38000, 20), + new GymPokemon('Snorunt', 38000, 20, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Golbat', 38000, 22), + new GymPokemon('Mightyena', 38000, 21), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 12) }, 'Exinn', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Murkrow', 38000, 22), + new GymPokemon('Pineco', 38000, 20, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Ariados', 38000, 22), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 12) }, 'Gonrag', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Poochyena', 38000, 22), + new GymPokemon('Magnemite', 38000, 21), + new GymPokemon('Staryu', 38000, 21), + new GymPokemon('Absol', 38000, 21), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Ertlig', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Duskull', 38000, 21), + new GymPokemon('Corphish', 38000, 20), + new GymPokemon('Qwilfish', 38000, 21), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(175, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Forgs', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Sudowoodo', 38000, 20), + new GymPokemon('Clamperl', 38000, 21), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Pellim', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Mightyena', 38000, 21), + new GymPokemon('Goldeen', 38000, 21), + new GymPokemon('Carvanha', 38000, 21), + new GymPokemon('Koffing', 38000, 21), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(225, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Fenton', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Shuppet', 38000, 21), + new GymPokemon('Teddiursa', 38000, 21), + new GymPokemon('Corsola', 38000, 21), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Ezoor', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Volbeat', 38000, 20), + new GymPokemon('Illumise', 38000, 20), + new GymPokemon('Spoink', 38000, 21), + new GymPokemon('Seviper', 38000, 21), + new GymPokemon('Wailmer', 38000, 22), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(275, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Kepen', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Nuzleaf', 38000, 23), + new GymPokemon('Torkoal', 38000, 22), + new GymPokemon('Swinub', 38000, 22, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 12) }, 'Greck', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Slugma', 38000, 20), + new GymPokemon('Numel', 38000, 20), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Resix', 'Resix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Horsea', 38000, 21), + new GymPokemon('Goldeen', 38000, 20), + new GymPokemon('Beldum', 38000, 19), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(325, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Blusix', 'Blusix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Noctowl', 38000, 20), + new GymPokemon('Vigoroth', 38000, 20), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Browsix', 'Browsix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Chinchou', 38000, 20), + new GymPokemon('Electrike', 38000, 20), + new GymPokemon('Magnemite', 38000, 20), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(375, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Yellosix', 'Yellosix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Grimer', 38000, 20), + new GymPokemon('Koffing', 38000, 20), + new GymPokemon('Tentacool', 38000, 20), + new GymPokemon('Zubat', 38000, 20), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Purpsix', 'Purpsix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Lotad', 38000, 19), + new GymPokemon('Oddish', 38000, 18), + new GymPokemon('Cacnea', 38000, 18), + new GymPokemon('Shroomish', 38000, 19), + new GymPokemon('Pineco', 38000, 20), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(425, GameConstants.getDungeonIndex('Phenac City Battles'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 12)]) }, 'Greesix', 'Greesix'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + epic: [ + { loot: 'Flame Plate' }, + { loot: 'Splash Plate' }, + { loot: 'Meadow Plate' }, + ], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Revive' }, + { loot: 'Charcoal' }, + { loot: 'Miracle_Seed' }, + { loot: 'Mystic_Water' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Phenac City Battles')) }], +}, 570000, [ + new DungeonTrainer('Miror B. Peon', [ + new GymPokemon('Duskull', 870000, 25), + new GymPokemon('Spinarak', 870000, 25), + new GymPokemon('Makuhita', 870000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Trudly', '(trudly)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Kirlia', 23925000, 22), + new GymPokemon('Linoone', 23925000, 20), + new GymPokemon('Natu', 23925000, 22, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 12) }, 'Eloin', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Remoraid', 23925000, 22), + new GymPokemon('Golbat', 23925000, 20), + new GymPokemon('Roselia', 23925000, 22, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 12) }, 'Fasin', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Kadabra', 21125000, 22), + new GymPokemon('Sneasel', 21125000, 22), + new GymPokemon('Misdreavus', 21125000, 22), + new GymPokemon('Meowth', 21125000, 22, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 12) }, 'Fostin', 'XD (male)'), +], 38000, 110); +dungeonList['Pyrite Town Battles'] = new Dungeon('Pyrite Town Battles', [ + new DungeonTrainer('Chaser', [ + new GymPokemon('Sentret', 41000, 25), + new GymPokemon('Taillow', 41000, 25), + new GymPokemon('Slaking', 41000, 26), + ], { weight: 1, requirement: new ClearDungeonRequirement(25, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Calda', '(male)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Gulpin', 41000, 27), + new GymPokemon('Zubat', 41000, 27), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Emok', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Skitty', 41000, 28), + new GymPokemon('Zigzagoon', 41000, 28), + new GymPokemon('Misdreavus', 41000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Vant', '(male)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Psyduck', 41000, 29), + new GymPokemon('Quagsire', 41000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Divel'), + new DungeonTrainer('Roller Boy', [ + new GymPokemon('Igglybuff', 41000, 28), + new GymPokemon('Azurill', 41000, 27), + new GymPokemon('Swablu', 41000, 27), + new GymPokemon('Slugma', 41000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Lon'), + new DungeonTrainer('Rider', [ + new GymPokemon('Ledyba', 41000, 27), + new GymPokemon('Wingull', 41000, 27), + new GymPokemon('Noctowl', 41000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Nover', '(male)'), + new DungeonTrainer('Street Performer', [ + new GymPokemon('Shroomish', 41000, 29), + new GymPokemon('Flaaffy', 41000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Diogo'), + new DungeonTrainer('Rider', [ + new GymPokemon('Oddish', 41000, 26), + new GymPokemon('Dustox', 41000, 26), + new GymPokemon('Skiploom', 41000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Leba', '(female)'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Beldum', 41000, 34), + new GymPokemon('Aron', 41000, 35), + ], { weight: 1, requirement: new ClearDungeonRequirement(75, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Hadar', '(male)'), + new DungeonTrainer('Rogue', [ + new GymPokemon('Snubbull', 41000, 35), + new GymPokemon('Kirlia', 41000, 35), + new GymPokemon('Nuzleaf', 41000, 35), + new GymPokemon('Machop', 41000, 35), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Cail', 'Cail'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Furret', 41000, 35), + new GymPokemon('Taillow', 41000, 32), + new GymPokemon('Slakoth', 41000, 21), + ], { weight: 1, requirement: new ClearDungeonRequirement(125, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Calda', '(male)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Gulpin', 41000, 36), + new GymPokemon('Golbat', 41000, 36), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Emok', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Skitty', 41000, 28), + new GymPokemon('Zigzagoon', 41000, 28), + new GymPokemon('Shuppet', 41000, 29), + ], { weight: 1, requirement: new ClearDungeonRequirement(175, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Vant', '(male)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Psyduck', 41000, 29), + new GymPokemon('Horsea', 41000, 30), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Divel'), + new DungeonTrainer('Roller Boy', [ + new GymPokemon('Igglybuff', 41000, 28), + new GymPokemon('Numel', 41000, 25), + new GymPokemon('Azurill', 41000, 27), + new GymPokemon('Swablu', 41000, 27), + ], { weight: 1, requirement: new ClearDungeonRequirement(225, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Lon'), + new DungeonTrainer('Rider', [ + new GymPokemon('Doduo', 41000, 26), + new GymPokemon('Ledyba', 41000, 27), + new GymPokemon('Wingull', 41000, 27), + ], { weight: 1, requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Nover', '(male)'), + new DungeonTrainer('Street Performer', [ + new GymPokemon('Pichu', 41000, 27), + new GymPokemon('Shroomish', 41000, 26), + ], { weight: 1, requirement: new ClearDungeonRequirement(275, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Diogo'), + new DungeonTrainer('Rider', [ + new GymPokemon('Sunkern', 41000, 28), + new GymPokemon('Oddish', 41000, 26), + new GymPokemon('Dustox', 41000, 26), + ], { weight: 1, requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Pyrite Town Battles'), GameConstants.AchievementOption.less) }, 'Leba', '(female)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Joy_Scent', ignoreDebuff: true }, + { loot: 'Toxic Plate' }, + { loot: 'Spooky Plate' }, + ], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Revive' }, + { loot: 'Spell_Tag' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Pyrite Town Battles')) }], +}, 580000, [ + new DungeonTrainer('Rogue', [ + new GymPokemon('Machop', 900000, 29), + new GymPokemon('Seedot', 900000, 29), + new GymPokemon('Ralts', 900000, 29), + new GymPokemon('Furret', 900000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Cail', 'Cail'), +], 41000, 116); +dungeonList['Pyrite Colosseum'] = new Dungeon('Pyrite Colosseum', [ + new DungeonTrainer('Hunter', [ + new GymPokemon('Barboach', 43000, 30), + new GymPokemon('Sandshrew', 43000, 31), + ], { weight: 1 }, 'Hoks', '(male)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Natu', 43000, 30), + new GymPokemon('Meditite', 43000, 30), + ], { weight: 1 }, 'Tisler', '(female)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Electrike', 43000, 30), + new GymPokemon('Cacnea', 43000, 31), + new GymPokemon('Vulpix', 43000, 31), + ], { weight: 1 }, 'Vilch'), +], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Grey Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Joy_Scent', ignoreDebuff: true }, + { loot: 'Icicle Plate' }, + { loot: 'Zap Plate' }, + ], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Revive' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Pyrite Colosseum')) }], +}, 620000, [ + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Bagon', 940000, 32), + new GymPokemon('Goldeen', 940000, 32), + new GymPokemon('Magnemite', 940000, 31), + new GymPokemon('Delibird', 940000, 34), + ], { weight: 0.25 }, 'Mirez', '(male)'), +], 43000, 121); +dungeonList['Pyrite Building'] = new Dungeon('Pyrite Building', [ + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Yanma', 45000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Pineco', 45000, 32), + new GymPokemon('Nincada', 45000, 31), + new GymPokemon('Surskit', 45000, 32), + ], { weight: 0.5 }, 'Nore', '(male)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Phanpy', 45000, 31), + new GymPokemon('Trapinch', 45000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(25, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Kai', '(female)'), + new DungeonTrainer('Roller Boy', [ + new GymPokemon('Taillow', 45000, 33), + new GymPokemon('Hoothoot', 45000, 34), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Pike'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Larvitar', 45000, 31), + new GymPokemon('Barboach', 45000, 32), + new GymPokemon('Carvanha', 45000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(75, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Geats'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Wingull', 45000, 32), + new GymPokemon('Wooper', 45000, 33), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Loba'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Electrike', 45000, 31), + new GymPokemon('Voltorb', 45000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(125, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Akmen', '(male)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Doduo', 45000, 32), + new GymPokemon('Ledyba', 45000, 32), + new GymPokemon('Swablu', 45000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Raleen', '(female)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Spheal', 45000, 31), + new GymPokemon('Snorunt', 45000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(175, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Tura', '(male)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Horsea', 45000, 31), + new GymPokemon('Oddish', 45000, 32), + new GymPokemon('Sandshrew', 45000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Toti', '(female)'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Cacnea', 45000, 32), + new GymPokemon('Tentacool', 45000, 33), + ], { weight: 1, requirement: new ClearDungeonRequirement(225, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less) }, 'Elidi', '(female)'), + new DungeonTrainer('Miror B. Peon', [ + new GymPokemon('Remoraid', 45000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Spinarak', 45000, 33), + new GymPokemon('Luvdisc', 45000, 32), + ], { weight: 0.5 }, 'Reath', '(reath)'), + new DungeonTrainer('Miror B. Peon', [ + new GymPokemon('Mantine', 45000, 28, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Aipom', 45000, 28), + new GymPokemon('Furret', 45000, 28), + new GymPokemon('Yanma', 45000, 28), + ], { weight: 0.5 }, 'Ferma', '(ferma)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Carvanha', 45000, 18), + new GymPokemon('Barboach', 45000, 17), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 10)]) }, 'Rett', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Corphish', 45000, 18), + new GymPokemon('Electrike', 45000, 17), + new GymPokemon('Grimer', 45000, 18), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(275, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 10)]) }, 'Mocor', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Kecleon', 45000, 19), + new GymPokemon('Surskit', 45000, 21), + new GymPokemon('Makuhita', 45000, 18, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 10) }, 'Torkin', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Doduo', 45000, 20), + new GymPokemon('Tentacool', 45000, 18), + new GymPokemon('Chimecho', 45000, 20), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 10)]) }, 'Elox', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Qwilfish', 45000, 19), + new GymPokemon('Rhyhorn', 45000, 20), + new GymPokemon('Chinchou', 45000, 20), + new GymPokemon('Koffing', 45000, 20), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(325, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 10)]) }, 'Rixor', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Spinarak', 45000, 20), + new GymPokemon('Beautifly', 45000, 19), + new GymPokemon('Dustox', 45000, 20), + new GymPokemon('Vulpix', 45000, 18, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 10) }, 'Mesin', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Gulpin', 45000, 19), + new GymPokemon('Mareep', 45000, 18), + new GymPokemon('Luvdisc', 45000, 20), + new GymPokemon('Bellossom', 45000, 21), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 10)]) }, 'Dilly', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Furret', 45000, 19), + new GymPokemon('Zigzagoon', 45000, 20), + new GymPokemon('Togetic', 45000, 19), + new GymPokemon('Delibird', 45000, 21), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(375, GameConstants.getDungeonIndex('Pyrite Building'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 10)]) }, 'Edlos', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Sneasel', 45000, 20), + new GymPokemon('Yanma', 45000, 19), + new GymPokemon('Misdreavus', 45000, 20), + new GymPokemon('Duskull', 45000, 18, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 10) }, 'Lobar', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Kadabra', 45000, 20), + new GymPokemon('Flaaffy', 45000, 19), + new GymPokemon('Vigoroth', 45000, 20), + new GymPokemon('Ralts', 45000, 18, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 10) }, 'Feldas', 'XD (male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + epic: [{ loot: 'Fastball' }], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Revive' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Pyrite Building')) }, + { loot: 'Vivid_Scent', ignoreDebuff: true }, + ], +}, 630000, [ + new DungeonTrainer('Hunter', [ + new GymPokemon('Qwilfish', 950000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Goldeen', 950000, 33), + new GymPokemon('Linoone', 950000, 33), + ], { weight: 1 }, 'Doken', '(male)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Loudred', 21750000, 23), + new GymPokemon('Girafarig', 21750000, 23), + new GymPokemon('Mawile', 21750000, 22, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Raichu', 21750000, 23), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 10) }, 'Commander Exol', '(commander)'), +], 45000, 126); +dungeonList['Pyrite Cave'] = new Dungeon('Pyrite Cave', [ + new DungeonTrainer('Street Performer', [ + new GymPokemon('Anorith', 46000, 32), + new GymPokemon('Lotad', 46000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(25, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Simes'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Koffing', 46000, 32), + new GymPokemon('Ralts', 46000, 31), + new GymPokemon('Shroomish', 46000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Maiz', '(male)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Meditite', 46000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Bagon', 46000, 33), + new GymPokemon('Numel', 46000, 32), + ], { weight: 0.5 }, 'Twan', '(male)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Lotad', 46000, 32), + new GymPokemon('Whismur', 46000, 33), + new GymPokemon('Slakoth', 46000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(75, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Valen', '(male)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Geodude', 46000, 32), + new GymPokemon('Lotad', 46000, 31), + new GymPokemon('Snorunt', 46000, 32), + new GymPokemon('Slakoth', 46000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Rehan', '(female)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Lotad', 46000, 32), + new GymPokemon('Lotad', 46000, 33), + new GymPokemon('Lotad', 46000, 33), + new GymPokemon('Lotad', 46000, 33), + ], { weight: 1, requirement: new ClearDungeonRequirement(125, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Noxy'), + new DungeonTrainer('Rider', [ + new GymPokemon('Dunsparce', 46000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Mareep', 46000, 34), + new GymPokemon('Cacnea', 46000, 34), + ], { weight: 0.5 }, 'Sosh', '(female)'), + new DungeonTrainer('Roller Boy', [ + new GymPokemon('Lotad', 46000, 32), + new GymPokemon('Lombre', 46000, 33), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Evat'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Swablu', 46000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Lotad', 46000, 31), + new GymPokemon('Beldum', 46000, 32), + new GymPokemon('Lombre', 46000, 32), + ], { weight: 0.5 }, 'Zalo', '(male)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Shuppet', 46000, 33), + new GymPokemon('Pineco', 46000, 30), + new GymPokemon('Koffing', 46000, 30), + ], { weight: 1, requirement: new ClearDungeonRequirement(175, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Derid', '(male)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Zigzagoon', 46000, 32), + new GymPokemon('Zigzagoon', 46000, 32), + new GymPokemon('Linoone', 46000, 33), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Meli', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Natu', 46000, 33), + new GymPokemon('Tentacool', 46000, 32), + new GymPokemon('Teddiursa', 46000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(225, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Mela', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Lileep', 46000, 32), + new GymPokemon('Spheal', 46000, 34), + new GymPokemon('Dustox', 46000, 33), + ], { weight: 1, requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Pyrite Cave'), GameConstants.AchievementOption.less) }, 'Sema', '(female)'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Lombre', 46000, 17), + new GymPokemon('Lombre', 46000, 17), + new GymPokemon('Lombre', 46000, 17), + new GymPokemon('Voltorb', 46000, 19, undefined, undefined, GameConstants.ShadowStatus.Shadow), // Located here as make-up if missed in Temp Battle + ], { weight: 0.25, requirement: new QuestLineCompletedRequirement('Gale of Darkness') }, 'Miror B.', 'Miror B'), +], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Fastball' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Twisted_Spoon' }, + { loot: 'Macho_Brace' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Pyrite Cave')) }, + { loot: 'Carbos', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Pyrite Cave')) }, + ], +}, 650000, [ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Ludicolo', 950000, 28), + new GymPokemon('Ludicolo', 950000, 29), + new GymPokemon('Ludicolo', 950000, 31), + new GymPokemon('Ludicolo', 950000, 30), + new GymPokemon('Sudowoodo', 950000, 35, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Miror B.', 'Miror B'), + new DungeonTrainer('Peon', [ + new GymPokemon('Seaking', 950000, 39), + new GymPokemon('Ludicolo', 950000, 39), + new GymPokemon('Ludicolo', 950000, 39), + new GymPokemon('Ludicolo', 950000, 39), + new GymPokemon('Sudowoodo', 950000, 39), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('Shadows in the Desert') }, 'Mirakle B.', '(mirakle b)'), +], 46000, 131); +dungeonList['Relic Cave'] = new Dungeon('Relic Cave', [ + new DungeonTrainer('Old Man', [ + new GymPokemon('Machop', 48000, 34), + new GymPokemon('Beldum', 48000, 35), + new GymPokemon('Lombre', 48000, 34), + ], { weight: 1 }, 'Skof'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Swellow', 48000, 39), + new GymPokemon('Rhyhorn', 48000, 39), + new GymPokemon('Sunflora', 48000, 40), + ], { weight: 1 }, 'Dury', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Spheal', 48000, 33), + new GymPokemon('Carvanha', 48000, 34), + ], { weight: 1 }, 'Doven', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Shroomish', 48000, 34), + new GymPokemon('Cacnea', 48000, 34), + ], { weight: 1 }, 'Silton', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Baltoy', 48000, 35), + new GymPokemon('Ralts', 48000, 35), + new GymPokemon('Kirlia', 48000, 35), + ], { weight: 1 }, 'Kass', '(female)'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Lombre', 48000, 39), + new GymPokemon('Lombre', 48000, 39), + new GymPokemon('Lombre', 48000, 39), + new GymPokemon('Voltorb', 48000, 39, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineCompletedRequirement('Gale of Darkness') }, 'Miror B.', 'Miror B'), +], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Fist Plate' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Silver_Powder' }, + { loot: 'Silk_Scarf' }, + ], + mythic: [ + { loot: 'Lum' }, + { loot: 'Vivid_Scent', ignoreDebuff: true }, + ], +}, 665000, [ + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Wynaut', 960000, 37), + new GymPokemon('Clamperl', 960000, 38), + new GymPokemon('Geodude', 960000, 38), + new GymPokemon('Hitmontop', 960000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Skrub', '(male)'), +], 48000, 131); +dungeonList['Mt. Battle'] = new Dungeon('Mt. Battle', [ + new DungeonTrainer('Rider', [ + new GymPokemon('Trapinch', 52000, 35), + new GymPokemon('Numel', 52000, 34), + new GymPokemon('Sandshrew', 52000, 35), + ], { weight: 1 }, 'Turo', '(male)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Swinub', 52000, 35), + new GymPokemon('Baltoy', 52000, 36), + new GymPokemon('Larvitar', 52000, 37), + ], { weight: 1 }, 'Drovic', '(male)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Sandshrew', 52000, 37), + new GymPokemon('Geodude', 52000, 36), + new GymPokemon('Numel', 52000, 36), + ], { weight: 1 }, 'Kimit', '(female)'), + new DungeonTrainer('Athlete', [ + new GymPokemon('Pikachu', 52000, 40), + new GymPokemon('Vulpix', 52000, 39), + new GymPokemon('Abra', 52000, 38), + ], { weight: 1 }, 'Aidel', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Pineco', 52000, 35), + new GymPokemon('Baltoy', 52000, 35), + new GymPokemon('Houndour', 52000, 37), + new GymPokemon('Graveler', 52000, 37), + ], { weight: 1 }, 'Riden', '(male)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Trapinch', 52000, 38), + new GymPokemon('Barboach', 52000, 36), + new GymPokemon('Trapinch', 52000, 38), + new GymPokemon('Lileep', 52000, 36), + ], { weight: 1 }, 'Telia', '(female)'), + new DungeonTrainer('Street Performer', [ + new GymPokemon('Cacnea', 52000, 37), + new GymPokemon('Spinda', 52000, 3), + new GymPokemon('Kadabra', 52000, 37), + ], { weight: 1 }, 'Nortz'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Graveler', 52000, 36), + new GymPokemon('Sandslash', 52000, 37), + new GymPokemon('Vibrava', 52000, 37), + ], { weight: 1 }, 'Weeg', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Houndour', 52000, 37), + new GymPokemon('Duskull', 52000, 36), + new GymPokemon('Koffing', 52000, 37), + new GymPokemon('Kirlia', 52000, 36), + ], { weight: 1 }, 'Kison', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Geodude', 52000, 36), + new GymPokemon('Geodude', 52000, 36), + new GymPokemon('Sandslash', 52000, 38), + ], { weight: 1 }, 'Berin', '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Grey Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'LargeRestore' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Charcoal' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Mt. Battle')) }, + { loot: 'Carbos', requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Mt. Battle')) }, + ], +}, 680000, [ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Metang', 999000, 37), + new GymPokemon('Golem', 999000, 38), + new GymPokemon('Marshtomp', 999000, 38), + new GymPokemon('Camerupt', 999000, 38), + new GymPokemon('Entei', 999000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Dakim', 'Dakim'), +], 52000, 131); +dungeonList['The Under'] = new Dungeon('The Under', [ + new DungeonTrainer('Hunter', [ + new GymPokemon('Skitty', 57000, 35), + new GymPokemon('Oddish', 57000, 34), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('The Under'), GameConstants.AchievementOption.less) }, 'Zada', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Magikarp', 57000, 36), + new GymPokemon('Wailord', 57000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('The Under'), GameConstants.AchievementOption.less) }, 'Gurks', '(male)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Skitty', 57000, 35), + new GymPokemon('Oddish', 57000, 34), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('The Under'), GameConstants.AchievementOption.less) }, 'Zada', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Feebas', 57000, 36), + new GymPokemon('Wailord', 57000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('The Under'), GameConstants.AchievementOption.less) }, 'Gurks', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Ledian', 57000, 40, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Volbeat', 57000, 38), + new GymPokemon('Spinarak', 57000, 39), + ], { weight: 0.25 }, 'Kloak', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Ariados', 57000, 38), + new GymPokemon('Illumise', 57000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('The Under'), GameConstants.AchievementOption.less) }, 'Dagur', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Gloom', 57000, 39), + new GymPokemon('Illumise', 57000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('The Under'), GameConstants.AchievementOption.less) }, 'Dagur', '(female)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Shroomish', 57000, 35), + new GymPokemon('Jigglypuff', 57000, 38), + new GymPokemon('Teddiursa', 57000, 37), + new GymPokemon('Gligar', 57000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Frena', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Kirlia', 57000, 37), + new GymPokemon('Gloom', 57000, 38), + new GymPokemon('Roselia', 57000, 38), + new GymPokemon('Stantler', 57000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Liaks', '(female)'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Octillery', 57000, 38), + new GymPokemon('Dunsparce', 57000, 39), + new GymPokemon('Masquerain', 57000, 38), + new GymPokemon('Piloswine', 57000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Lonia', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Loudred', 57000, 41), + new GymPokemon('Seviper', 57000, 40), + new GymPokemon('Corsola', 57000, 41), + new GymPokemon('Sneasel', 57000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Nelis', '(female)'), +], { + common: [ + { loot: 'Lucky_incense' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'LargeRestore' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Black_Glasses' }, + { loot: 'Timerball' }, + { loot: 'Soft_Sand' }, + ], + mythic: [ + { loot: 'Carbos', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('The Under')) }, + { loot: 'Vivid_Scent', ignoreDebuff: true }, + ], +}, 740000, [ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Delcatty', 1010000, 45), + new GymPokemon('Steelix', 1010000, 45), + new GymPokemon('Banette', 1010000, 45), + new GymPokemon('Vileplume', 1010000, 44), + new GymPokemon('Suicune', 1010000, 40, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Venus', 'Venus'), +], 57000, 131); +dungeonList['Cipher Lab'] = new Dungeon('Cipher Lab', [ + new DungeonTrainer('Scientist', [ + new GymPokemon('Voltorb', 62000, 38), + new GymPokemon('Voltorb', 62000, 38), + ], { weight: 1 }, 'Myron', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Furret', 62000, 37), + new GymPokemon('Remoraid', 62000, 39), + new GymPokemon('Castform', 62000, 41), + new GymPokemon('Aipom', 62000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Cole', '(female)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Electrode', 62000, 39), + new GymPokemon('Magneton', 62000, 39), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Odlow', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magnemite', 62000, 39), + new GymPokemon('Magneton', 62000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(75, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Coren', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Chinchou', 62000, 38), + new GymPokemon('Magnemite', 62000, 37), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Lethco', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Electrode', 62000, 39), + new GymPokemon('Magnemite', 62000, 38), + ], { weight: 1, requirement: new ClearDungeonRequirement(125, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Odlow', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Electrode', 62000, 40), + new GymPokemon('Magneton', 62000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Coren', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Chinchou', 62000, 38), + new GymPokemon('Electrike', 62000, 39), + ], { weight: 1, requirement: new ClearDungeonRequirement(175, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Lethco', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Nuzleaf', 62000, 38), + new GymPokemon('Carvanha', 62000, 38), + new GymPokemon('Houndour', 62000, 38), + new GymPokemon('Murkrow', 62000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Lare', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Pupitar', 62000, 40), + new GymPokemon('Zubat', 62000, 40), + new GymPokemon('Swablu', 62000, 40), + new GymPokemon('Forretress', 62000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Vana', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Rhyhorn', 62000, 40), + new GymPokemon('Grovyle', 62000, 40), + new GymPokemon('Ariados', 62000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Lesar', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Linoone', 62000, 38), + new GymPokemon('Vigoroth', 62000, 39), + new GymPokemon('Granbull', 62000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Tanie', '(female)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Electrode', 62000, 37), + new GymPokemon('Electrode', 62000, 37), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Dubik', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Magneton', 62000, 40), + new GymPokemon('Ampharos', 62000, 41), + ], { weight: 1, requirement: new ClearDungeonRequirement(225, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Kotan', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Electrode', 62000, 42), + new GymPokemon('Ampharos', 62000, 41), + ], { weight: 1, requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less) }, 'Kotan', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Kadabra', 62000, 42), + new GymPokemon('Swellow', 62000, 42), + new GymPokemon('Kecleon', 62000, 43), + new GymPokemon('Vibrava', 62000, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Remil', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Slugma', 62000, 14), + new GymPokemon('Houndour', 62000, 17, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Resix', 'Resix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Horsea', 62000, 11), + new GymPokemon('Goldeen', 62000, 12), + new GymPokemon('Spheal', 62000, 17, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Blusix', 'Blusix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Hoothoot', 62000, 14), + new GymPokemon('Baltoy', 62000, 17, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Browsix', 'Browsix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Chinchou', 62000, 11), + new GymPokemon('Electrike', 62000, 12), + new GymPokemon('Mareep', 62000, 17, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Yellosix', 'Yellosix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Grimer', 62000, 11), + new GymPokemon('Koffing', 62000, 10), + new GymPokemon('Tentacool', 62000, 10), + new GymPokemon('Gulpin', 62000, 17, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Purpsix', 'Purpsix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Lotad', 62000, 11), + new GymPokemon('Oddish', 62000, 10), + new GymPokemon('Cacnea', 62000, 10), + new GymPokemon('Shroomish', 62000, 10), + new GymPokemon('Pineco', 62000, 10), + new GymPokemon('Seedot', 62000, 17, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Greesix', 'Greesix'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Duskull', 62000, 14), + new GymPokemon('Skitty', 62000, 14), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(275, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Corla', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Doduo', 62000, 13), + new GymPokemon('Taillow', 62000, 14), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Javion', 'XD (female)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Lileep', 62000, 13), + new GymPokemon('Anorith', 62000, 13), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(325, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Mesak', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Swinub', 62000, 14), + new GymPokemon('Shuppet', 62000, 13), + new GymPokemon('Spinarak', 62000, 14, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Nexir', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Ralts', 62000, 14), + new GymPokemon('Voltorb', 62000, 13), + new GymPokemon('Bagon', 62000, 13), + new GymPokemon('Numel', 62000, 14, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Solox', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Snorunt', 62000, 14), + new GymPokemon('Barboach', 62000, 14), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Crink', 'XD (male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Spoink', 62000, 16), + new GymPokemon('Lotad', 62000, 14), + new GymPokemon('Staryu', 62000, 14), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(375, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Morbit', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Natu', 62000, 16), + new GymPokemon('Nincada', 62000, 14), + new GymPokemon('Wailmer', 62000, 15), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Meda', 'XD (female)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Swablu', 62000, 17), + new GymPokemon('Wynaut', 62000, 16), + new GymPokemon('Corsola', 62000, 15), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(425, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Elrok', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Dustox', 62000, 14), + new GymPokemon('Wingull', 62000, 17), + new GymPokemon('Pineco', 62000, 16), + new GymPokemon('Qwilfish', 62000, 15), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(450, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Coffy', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Abra', 62000, 17), + new GymPokemon('Machop', 62000, 16), + new GymPokemon('Feebas', 62000, 16), + new GymPokemon('Makuhita', 62000, 16), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(475, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Digor', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Carvanha', 62000, 15, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Magnemite', 62000, 15), + new GymPokemon('Psyduck', 62000, 15), + new GymPokemon('Remoraid', 62000, 16), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Cabol', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Jigglypuff', 62000, 15), + new GymPokemon('Chimecho', 62000, 17), + new GymPokemon('Dunsparce', 62000, 16), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(500, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Nopia', 'XD (female)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Shroomish', 62000, 15, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Snubbull', 62000, 16), + new GymPokemon('Kecleon', 62000, 16), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Klots', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Clamperl', 62000, 13), + new GymPokemon('Corphish', 62000, 14), + new GymPokemon('Zubat', 62000, 15), + ], { weight: 1, requirement: new MultiRequirement([new ClearDungeonRequirement(525, GameConstants.getDungeonIndex('Cipher Lab'), GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Gale of Darkness', 6)]) }, 'Tekot', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Beldum', 62000, 18), + new GymPokemon('Murkrow', 62000, 18), + new GymPokemon('Teddiursa', 62000, 18, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Rhyhorn', 62000, 18), + ], { weight: 0.25, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Naps', '(yellow)'), +], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Diveball' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Revive' }, + { loot: 'Dragon_Fang' }, + { loot: 'Silver_Powder' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Cipher Lab')) }, + { loot: 'Carbos', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Cipher Lab')) }, + ], +}, 800000, [ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Golbat', 1060000, 48), + new GymPokemon('Huntail', 1060000, 47), + new GymPokemon('Lanturn', 1060000, 47), + new GymPokemon('Altaria', 1060000, 46), + new GymPokemon('Raikou', 1060000, 40, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Ein', 'Ein'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Luvdisc', 17400000, 20), + new GymPokemon('Beautifly', 17400000, 19), + new GymPokemon('Roselia', 17400000, 19), + new GymPokemon('Delcatty', 17400000, 18, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 6) }, 'Lovrina', 'Lovrina'), +], 62000, 131); +dungeonList['Realgam Tower Battles'] = new Dungeon('Realgam Tower Battles', [ + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Grimer', 70000, 39), + new GymPokemon('Seviper', 70000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(25, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Bopen', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Dustox', 70000, 38), + new GymPokemon('Seviper', 70000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Bopen', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Delibird', 70000, 45, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Piloswine', 70000, 42), + new GymPokemon('Glalie', 70000, 42), + ], { weight: 0.5 }, 'Arton', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Sunflora', 70000, 45, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Jumpluff', 70000, 42), + new GymPokemon('Gloom', 70000, 41), + ], { weight: 0.5 }, 'Baila', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Masquerain', 70000, 42), + new GymPokemon('Ariados', 70000, 41), + new GymPokemon('Heracross', 70000, 45, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.5 }, 'Dioge', '(male)'), + new DungeonTrainer('Mystery Troop Green', [ + new GymPokemon('Muk', 70000, 45), + new GymPokemon('Grumpig', 70000, 44), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Verde'), + new DungeonTrainer('Mystery Troop Red', [ + new GymPokemon('Muk', 70000, 45), + new GymPokemon('Grumpig', 70000, 44), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Rosso'), + new DungeonTrainer('Mystery Troop Blue', [ + new GymPokemon('Muk', 70000, 45), + new GymPokemon('Grumpig', 70000, 44), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Bluno'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Shelgon', 70000, 40), + new GymPokemon('Vigoroth', 70000, 41), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Rugen', '(male)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Hariyama', 70000, 41), + new GymPokemon('Lombre', 70000, 42), + ], { weight: 1, requirement: new ClearDungeonRequirement(175, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Klest'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Nuzleaf', 70000, 39), + new GymPokemon('Graveler', 70000, 42), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Klest'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Metang', 70000, 39), + new GymPokemon('Mawile', 70000, 40), + new GymPokemon('Lairon', 70000, 41), + ], { weight: 1, requirement: new ClearDungeonRequirement(225, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Aline', '(female)'), + new DungeonTrainer('Street Performer', [ + new GymPokemon('Seadra', 70000, 39), + new GymPokemon('Feraligatr', 70000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Luper'), + new DungeonTrainer('Street Performer', [ + new GymPokemon('Qwilfish', 70000, 40), + new GymPokemon('Octillery', 70000, 39), + ], { weight: 1, requirement: new ClearDungeonRequirement(275, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Luper'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Loudred', 70000, 45), + new GymPokemon('Wigglytuff', 70000, 43), + ], { weight: 1, requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Givern', '(male)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Ninetales', 70000, 40), + new GymPokemon('Machoke', 70000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(325, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Trus', '(male)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Swellow', 70000, 40), + new GymPokemon('Magneton', 70000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Trus', '(male)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Quagsire', 70000, 41), + new GymPokemon('Donphan', 70000, 40), + new GymPokemon('Sandslash', 70000, 40), + ], { weight: 1, requirement: new ClearDungeonRequirement(375, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Kevel', '(male)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Swalot', 70000, 40), + new GymPokemon('Chimecho', 70000, 41), + ], { weight: 1, requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Elose', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Cradily', 70000, 41), + new GymPokemon('Noctowl', 70000, 41), + ], { weight: 1, requirement: new ClearDungeonRequirement(425, GameConstants.getDungeonIndex('Realgam Tower Battles'), GameConstants.AchievementOption.less) }, 'Elose', '(female)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + epic: [{ loot: 'Lureball' }], + legendary: [ + { loot: 'Never_Melt_Ice' }, + { loot: 'Sharp_Beak' }, + ], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Realgam Tower Battles')) }, + { loot: 'Carbos', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Realgam Tower Battles')) }, + { loot: 'Vivid_Scent', ignoreDebuff: true }, + ], +}, 850000, [ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Crobat', 1100000, 48), + new GymPokemon('Pelipper', 1100000, 49), + new GymPokemon('Rhydon', 1100000, 50), + new GymPokemon('Starmie', 1100000, 49), + new GymPokemon('Manectric', 1100000, 50), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('Shadows in the Desert', GameConstants.AchievementOption.less) }, 'Ein', 'Ein'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Ludicolo', 1100000, 44), + new GymPokemon('Ludicolo', 1100000, 45), + new GymPokemon('Loudred', 1100000, 46), + new GymPokemon('Golduck', 1100000, 45), + new GymPokemon('Armaldo', 1100000, 43), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('Shadows in the Desert', GameConstants.AchievementOption.less) }, 'Miror B.', 'Miror B'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Claydol', 1100000, 46), + new GymPokemon('Forretress', 1100000, 45), + new GymPokemon('Flygon', 1100000, 46), + new GymPokemon('Whiscash', 1100000, 46), + new GymPokemon('Houndoom', 1100000, 47), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('Shadows in the Desert', GameConstants.AchievementOption.less) }, 'Dakim', 'Dakim'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Bellossom', 1100000, 47), + new GymPokemon('Misdreavus', 1100000, 47), + new GymPokemon('Raichu', 1100000, 48), + new GymPokemon('Wigglytuff', 1100000, 48), + new GymPokemon('Milotic', 1100000, 48), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('Shadows in the Desert', GameConstants.AchievementOption.less) }, 'Venus', 'Venus'), + new DungeonTrainer('Snagem Head', [ + new GymPokemon('Crawdaunt', 1100000, 47), + new GymPokemon('Shiftry', 1100000, 47), + new GymPokemon('Pinsir', 1100000, 48), + new GymPokemon('Hariyama', 1100000, 48), + new GymPokemon('Skarmory', 1100000, 48, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Gonzap', '(gonzap)'), +], 70000, 131); +dungeonList['Realgam Colosseum'] = new Dungeon('Realgam Colosseum', [ + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Porygon2', 75200, 45), + new GymPokemon('Zangoose', 75200, 45), + new GymPokemon('Miltank', 75200, 48, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.5 }, 'Jomas', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Mightyena', 75200, 46), + new GymPokemon('Sharpedo', 75200, 47), + new GymPokemon('Absol', 75200, 48, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.5 }, 'Delan', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Torkoal', 75200, 47), + new GymPokemon('Magcargo', 75200, 46), + new GymPokemon('Houndoom', 75200, 48, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.5 }, 'Nella', '(female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Cradily', 75200, 48), + new GymPokemon('Vileplume', 75200, 48), + new GymPokemon('Cacturne', 75200, 49), + new GymPokemon('Tropius', 75200, 49, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.5 }, 'Ston', '(male)'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Lombre', 75200, 48), + new GymPokemon('Lombre', 75200, 48), + new GymPokemon('Lombre', 75200, 49), + new GymPokemon('Nosepass', 75200, 49, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Ludicolo', 75200, 49), + ], { weight: 0.5, requirement: new QuestLineCompletedRequirement('Gale of Darkness') }, 'Miror B.', 'Miror B'), +], { + common: [ + { loot: 'Lucky_incense' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + epic: [{ loot: 'Ultraball' }], + legendary: [ + { loot: 'Macho_Brace' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Realgam Colosseum')) }, + { loot: 'Carbos', requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Realgam Colosseum')) }, + ], +}, 1010000, [ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Dusclops', 1280000, 55), + new GymPokemon('Gardevoir', 1280000, 55), + new GymPokemon('Blaziken', 1280000, 54), + new GymPokemon('Xatu', 1280000, 54), + new GymPokemon('Walrein', 1280000, 56), + new GymPokemon('Metagross', 1280000, 50, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Nascour', '(nascour)'), + new DungeonTrainer('Cipher Head', [ + new GymPokemon('Slowking', 1280000, 61), + new GymPokemon('Scizor', 1280000, 60), + new GymPokemon('Machamp', 1280000, 61), + new GymPokemon('Salamence', 1280000, 60), + new GymPokemon('Slaking', 1280000, 60), + new GymPokemon('Tyranitar', 1280000, 55, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Evice', '(evice)'), +], 75200, 134); +dungeonList['Snagem Hideout'] = new Dungeon('Snagem Hideout', [ + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Lanturn', 80200, 50), + new GymPokemon('Starmie', 80200, 52), + ], { weight: 1, requirement: new ClearDungeonRequirement(25, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Driton'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Shelgon', 80200, 54), + new GymPokemon('Carvanha', 80200, 51), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Colas', '(male)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Weezing', 80200, 52), + new GymPokemon('Swalot', 80200, 51), + ], { weight: 1, requirement: new ClearDungeonRequirement(75, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Crudo'), + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Vigoroth', 80200, 52), + new GymPokemon('Zangoose', 80200, 53), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Niver'), + new DungeonTrainer('Rider', [ + new GymPokemon('Mightyena', 80200, 50), + new GymPokemon('Linoone', 80200, 53), + ], { weight: 1, requirement: new ClearDungeonRequirement(125, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Rions', '(male)'), + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Swellow', 80200, 54), + new GymPokemon('Golbat', 80200, 53), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Fuston'), + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Seadra', 80200, 55), + new GymPokemon('Pelipper', 80200, 53), + ], { weight: 1, requirement: new ClearDungeonRequirement(175, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Driton'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Pupitar', 80200, 54), + new GymPokemon('Spinda', 80200, 51), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Colas', '(male)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Sandslash', 80200, 53), + new GymPokemon('Linoone', 80200, 55), + ], { weight: 1, requirement: new ClearDungeonRequirement(225, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Crudo'), + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Grovyle', 80200, 52), + new GymPokemon('Rhyhorn', 80200, 52), + ], { weight: 1, requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Niver'), + new DungeonTrainer('Rider', [ + new GymPokemon('Poochyena', 80200, 54), + new GymPokemon('Kadabra', 80200, 53), + ], { weight: 1, requirement: new ClearDungeonRequirement(275, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Rions', '(male)'), + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Beautifly', 80200, 53), + new GymPokemon('Delibird', 80200, 54), + ], { weight: 1, requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Fuston'), + new DungeonTrainer('Mystery Troop Green', [ + new GymPokemon('Muk', 80200, 55), + new GymPokemon('Grumpig', 80200, 54), + new GymPokemon('Sharpedo', 80200, 53), + new GymPokemon('Bayleef', 80200, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Verde'), + new DungeonTrainer('Mystery Troop Red', [ + new GymPokemon('Muk', 80200, 55), + new GymPokemon('Grumpig', 80200, 54), + new GymPokemon('Breloom', 80200, 53), + new GymPokemon('Quilava', 80200, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Rosso'), + new DungeonTrainer('Mystery Troop Blue', [ + new GymPokemon('Muk', 80200, 55), + new GymPokemon('Grumpig', 80200, 54), + new GymPokemon('Camerupt', 80200, 53), + new GymPokemon('Croconaw', 80200, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Bluno'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Octillery', 80200, 54), + new GymPokemon('Walrein', 80200, 52), + ], { weight: 1, requirement: new ClearDungeonRequirement(325, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Lonia', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Seviper', 80200, 52), + new GymPokemon('Sharpedo', 80200, 50), + ], { weight: 1, requirement: new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Nelis', '(female)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Mawile', 80200, 53), + new GymPokemon('Donphan', 80200, 51), + ], { weight: 1, requirement: new ClearDungeonRequirement(375, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Frena', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Jumpluff', 80200, 53), + new GymPokemon('Noctowl', 80200, 52), + ], { weight: 1, requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Liaks', '(female)'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Flaaffy', 80200, 55), + new GymPokemon('Dunsparce', 80200, 51), + ], { weight: 1, requirement: new ClearDungeonRequirement(425, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Lonia', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Corsola', 80200, 51), + new GymPokemon('Loudred', 80200, 54), + ], { weight: 1, requirement: new ClearDungeonRequirement(450, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Nelis', '(female)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Jigglypuff', 80200, 52), + new GymPokemon('Shroomish', 80200, 53), + ], { weight: 1, requirement: new ClearDungeonRequirement(475, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Frena', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Gloom', 80200, 53), + new GymPokemon('Golduck', 80200, 53), + ], { weight: 1, requirement: new ClearDungeonRequirement(500, GameConstants.getDungeonIndex('Snagem Hideout'), GameConstants.AchievementOption.less) }, 'Liaks', '(female)'), + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Smeargle', 80200, 52), + new GymPokemon('Smeargle', 80200, 51), + new GymPokemon('Smeargle', 80200, 50), + new GymPokemon('Smeargle', 80200, 45, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Biden'), + new DungeonTrainer('Team Snagem', [ + new GymPokemon('Marshtomp', 80200, 55), + new GymPokemon('Machoke', 80200, 52), + new GymPokemon('Shiftry', 80200, 50), + new GymPokemon('Ursaring', 80200, 45, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Agrev'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Red Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + epic: [{ loot: 'Timerball' }], + legendary: [ + { loot: 'Max Revive' }, + { loot: 'Miracle_Seed' }, + { loot: 'Mystic_Water' }, + { loot: 'Charcoal' }, + ], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Snagem Hideout')) }, + { loot: 'Carbos', requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Snagem Hideout')) }, + { loot: 'Vivid_Scent', ignoreDebuff: true }, + ], +}, 1310000, [ + new DungeonTrainer('Snagem Head', [ + new GymPokemon('Breloom', 1500000, 64), + new GymPokemon('Crawdaunt', 1500000, 64), + new GymPokemon('Granbull', 1500000, 64), + new GymPokemon('Armaldo', 1500000, 64), + new GymPokemon('Machamp', 1500000, 64), + new GymPokemon('Skarmory', 1500000, 64, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Gonzap', '(gonzap)'), +], 80200, 134); +dungeonList['Deep Colosseum'] = new Dungeon('Deep Colosseum', [ + new DungeonTrainer('Hunter', [ + new GymPokemon('Tropius', 88800, 61), + new GymPokemon('Zangoose', 88800, 60), + new GymPokemon('Nuzleaf', 88800, 60), + ], { weight: 1 }, 'Dewig', '(male)'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Typhlosion', 88800, 61), + new GymPokemon('Vigoroth', 88800, 61), + new GymPokemon('Hariyama', 88800, 62), + ], { weight: 1 }, 'Palen', '(female)'), + new DungeonTrainer('Worker', [ + new GymPokemon('Houndour', 88800, 62), + new GymPokemon('Dodrio', 88800, 62), + ], { weight: 1 }, 'Toway', '(male)'), + new DungeonTrainer('Worker', [ + new GymPokemon('Ledian', 88800, 63), + new GymPokemon('Girafarig', 88800, 62), + ], { weight: 1 }, 'Toway', '(male)'), + new DungeonTrainer('Street Performer', [ + new GymPokemon('Jumpluff', 88800, 61), + new GymPokemon('Sneasel', 88800, 60), + new GymPokemon('Electrode', 88800, 60), + ], { weight: 1 }, 'Regol'), + new DungeonTrainer('Old Man', [ + new GymPokemon('Delibird', 88800, 62), + new GymPokemon('Marshtomp', 88800, 61), + new GymPokemon('Walrein', 88800, 61), + ], { weight: 1 }, 'Gorbel'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Linoone', 88800, 63), + new GymPokemon('Xatu', 88800, 62), + ], { weight: 1 }, 'Lobert'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Medicham', 88800, 62), + new GymPokemon('Azumarill', 88800, 62), + ], { weight: 1 }, 'Lobert'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Machop', 88800, 60), + new GymPokemon('Ursaring', 88800, 61), + new GymPokemon('Machoke', 88800, 60), + ], { weight: 1 }, 'Varug', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Spinda', 88800, 62), + new GymPokemon('Granbull', 88800, 62), + new GymPokemon('Delcatty', 88800, 62), + ], { weight: 1 }, 'Zogo', '(male)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Wigglytuff', 88800, 62), + new GymPokemon('Donphan', 88800, 61), + ], { weight: 1 }, 'Shatol', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Volbeat', 88800, 60), + new GymPokemon('Beautifly', 88800, 60), + ], { weight: 1 }, 'Drook', '(male)'), + new DungeonTrainer('Roller Boy', [ + new GymPokemon('Octillery', 88800, 61), + new GymPokemon('Exploud', 88800, 61), + ], { weight: 1 }, 'Dult'), + new DungeonTrainer('Rider', [ + new GymPokemon('Wailmer', 88800, 63), + new GymPokemon('Graveler', 88800, 61), + ], { weight: 1 }, 'Shatol', '(female)'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Nuzleaf', 88800, 60), + new GymPokemon('Jumpluff', 88800, 61), + ], { weight: 1 }, 'Drook', '(male)'), + new DungeonTrainer('Roller Boy', [ + new GymPokemon('Lanturn', 88800, 60), + new GymPokemon('Lairon', 88800, 60), + ], { weight: 1 }, 'Dult'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Marshtomp', 88800, 63), + new GymPokemon('Swellow', 88800, 62), + new GymPokemon('Crawdaunt', 88800, 62), + ], { weight: 1 }, 'Ophel', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Nincada', 88800, 64), + new GymPokemon('Horsea', 88800, 63), + new GymPokemon('Shuppet', 88800, 63), + ], { weight: 1 }, 'Nelon', '(female)'), + new DungeonTrainer('Athlete', [ + new GymPokemon('Misdreavus', 88800, 64), + new GymPokemon('Kadabra', 88800, 64), + new GymPokemon('Seadra', 88800, 65), + new GymPokemon('Kecleon', 88800, 65), + ], { weight: 1 }, 'Lorge', '(male)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Mawile', 88800, 66), + new GymPokemon('Relicanth', 88800, 67), + new GymPokemon('Murkrow', 88800, 66), + ], { weight: 1 }, 'Grons', '(male)'), +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Grey Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Stone Plate' }, + { loot: 'Earth Plate' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [{ loot: 'Max Revive' }], + mythic: [ + { loot: 'Protein', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Deep Colosseum')) }, + { loot: 'Carbos', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Deep Colosseum')) }, + { loot: 'Vivid_Scent', ignoreDebuff: true }, + ], +}, 1403000, [ + new DungeonTrainer('Deep King', [ + new GymPokemon('Skarmory', 1750000, 66), + new GymPokemon('Girafarig', 1750000, 68), + new GymPokemon('Sableye', 1750000, 69), + new GymPokemon('Kingdra', 1750000, 70), + new GymPokemon('Shedinja', 1750000, 68), + new GymPokemon('Shuckle', 1750000, 45, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Agnol', '(angol)'), +], 88800, 134); +dungeonList['Phenac Stadium'] = new Dungeon('Phenac Stadium', [ + new DungeonTrainer('School Kid', [ + new GymPokemon('Azurill', 89500, 40), + new GymPokemon('Sentret', 89500, 40), + ], { weight: 1 }, 'Flitz', '(male)'), + new DungeonTrainer('Roller Boy', [ + new GymPokemon('Tentacool', 89500, 40), + new GymPokemon('Doduo', 89500, 40), + ], { weight: 1 }, 'Greb'), + new DungeonTrainer('Athlete', [ + new GymPokemon('Psyduck', 89500, 41), + new GymPokemon('Pineco', 89500, 41), + ], { weight: 1 }, 'Adel', '(female)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Mudkip', 89500, 42), + new GymPokemon('Zubat', 89500, 41), + new GymPokemon('Cacnea', 89500, 41), + ], { weight: 1 }, 'Rewin', '(male)'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Wingull', 89500, 40), + new GymPokemon('Igglybuff', 89500, 40), + ], { weight: 1 }, 'Lang', '(male)'), + new DungeonTrainer('Athlete', [ + new GymPokemon('Snorunt', 89500, 40), + new GymPokemon('Taillow', 89500, 40), + ], { weight: 1 }, 'Bilal', '(male)'), + new DungeonTrainer('Old Lady', [ + new GymPokemon('Horsea', 89500, 41), + new GymPokemon('Snubbull', 89500, 41), + ], { weight: 1 }, 'Oris'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Luvdisc', 89500, 41), + new GymPokemon('Hoothoot', 89500, 41), + new GymPokemon('Treecko', 89500, 42), + ], { weight: 1 }, 'Buna', '(female)'), + new DungeonTrainer('Lady', [ + new GymPokemon('Remoraid', 89500, 40), + new GymPokemon('Skitty', 89500, 40), + ], { weight: 1 }, 'Rima'), + new DungeonTrainer('Old Man', [ + new GymPokemon('Spheal', 89500, 40), + new GymPokemon('Machop', 89500, 40), + ], { weight: 1 }, 'Varl'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Wooper', 89500, 41), + new GymPokemon('Sandshrew', 89500, 41), + ], { weight: 1 }, 'Emia', '(female)'), + new DungeonTrainer('Teacher', [ + new GymPokemon('Clamperl', 89500, 41), + new GymPokemon('Torchic', 89500, 41), + new GymPokemon('Mareep', 89500, 42), + ], { weight: 1 }, 'Holen'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Goldeen', 89500, 40), + new GymPokemon('Wurmple', 89500, 40), + ], { weight: 1 }, 'Harl', '(male)'), + new DungeonTrainer('Lady', [ + new GymPokemon('Bagon', 89500, 40), + new GymPokemon('Swablu', 89500, 40), + ], { weight: 1 }, 'Brin'), + new DungeonTrainer('Cooltrainer', [ + new GymPokemon('Barboach', 89500, 41), + new GymPokemon('Seedot', 89500, 41), + ], { weight: 1 }, 'Tock', '(male)'), + new DungeonTrainer('Teacher', [ + new GymPokemon('Staryu', 89500, 41), + new GymPokemon('Ledyba', 89500, 41), + new GymPokemon('Pichu', 89500, 42), + ], { weight: 1 }, 'Glais'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Pelipper', 89500, 23), + new GymPokemon('Electrike', 89500, 22), + new GymPokemon('Spearow', 89500, 22, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 13) }, 'Ezin', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Chimecho', 89500, 23), + new GymPokemon('Stantler', 89500, 23), + new GymPokemon('Grimer', 89500, 23, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 13) }, 'Faltly', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Hoothoot', 89500, 25), + new GymPokemon('Graveler', 89500, 26), + new GymPokemon('Gulpin', 89500, 26), + new GymPokemon('Seel', 89500, 23, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 13) }, 'Egrog', '(yellow)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Splash Plate' }, + { loot: 'Diveball' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Silk_Scarf' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Phenac Stadium')) }], +}, 1503000, [ + new DungeonTrainer('Chaser', [ + new GymPokemon('Sableye', 2000000, 40), + new GymPokemon('Grimer', 2000000, 41), + new GymPokemon('Gulpin', 2000000, 40), + new GymPokemon('Togepi', 2000000, 20, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Crelf', '(male)'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Skitty', 2000000, 51), + new GymPokemon('Qwilfish', 2000000, 50), + new GymPokemon('Duskull', 2000000, 50), + new GymPokemon('Mareep', 2000000, 37, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Harle', '(female)'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Murkrow', 2000000, 60), + new GymPokemon('Claydol', 2000000, 60), + new GymPokemon('Steelix', 2000000, 60), + new GymPokemon('Scizor', 2000000, 50, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Bodhi', '(male)'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Lanturn', 15790500, 26), + new GymPokemon('Quagsire', 15790500, 26), + new GymPokemon('Lunatone', 15790500, 25, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Castform', 15790500, 27), + new GymPokemon('Metang', 15790500, 28), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Gale of Darkness', 13) }, 'Snattle', 'Snattle'), +], 89500, 134); +dungeonList['Under Colosseum'] = new Dungeon('Under Colosseum', [ + new DungeonTrainer('School Kid', [ + new GymPokemon('Rhyhorn', 91500, 50), + new GymPokemon('Grovyle', 91500, 50), + new GymPokemon('Masquerain', 91500, 50), + ], { weight: 1 }, 'Sainz', '(male)'), + new DungeonTrainer('Teacher', [ + new GymPokemon('Mawile', 91500, 50), + new GymPokemon('Luvdisc', 91500, 50), + new GymPokemon('Kirlia', 91500, 50), + ], { weight: 1 }, 'Foshe'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Wailord', 91500, 50), + new GymPokemon('Piloswine', 91500, 50), + new GymPokemon('Illumise', 91500, 50), + ], { weight: 1 }, 'Glya', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Azumarill', 91500, 50), + new GymPokemon('Breloom', 91500, 50), + new GymPokemon('Wobbuffet', 91500, 50), + ], { weight: 1 }, 'Fokil', '(male)'), + new DungeonTrainer('Reporter', [ + new GymPokemon('Jumpluff', 91500, 50), + new GymPokemon('Sealeo', 91500, 50), + new GymPokemon('Lanturn', 91500, 50), + ], { weight: 1 }, 'Sclim'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Sandslash', 91500, 50), + new GymPokemon('Camerupt', 91500, 50), + new GymPokemon('Magcargo', 91500, 50), + ], { weight: 1 }, 'Rina', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Zangoose', 91500, 50), + new GymPokemon('Grumpig', 91500, 50), + new GymPokemon('Absol', 91500, 50), + ], { weight: 1 }, 'Kou', '(female)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Rhydon', 91500, 50), + new GymPokemon('Tropius', 91500, 50), + new GymPokemon('Seviper', 91500, 50), + ], { weight: 1 }, 'Roblin'), + new DungeonTrainer('School Kid', [ + new GymPokemon('Dustox', 91500, 50), + new GymPokemon('Yanma', 91500, 50), + new GymPokemon('Ariados', 91500, 50), + ], { weight: 1 }, 'Sainz', '(male)'), + new DungeonTrainer('Teacher', [ + new GymPokemon('Delcatty', 91500, 50), + new GymPokemon('Beautifly', 91500, 50), + new GymPokemon('Roselia', 91500, 50), + ], { weight: 1 }, 'Foshe'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Lunatone', 91500, 50), + new GymPokemon('Metang', 91500, 50), + new GymPokemon('Electrode', 91500, 50), + ], { weight: 1 }, 'Glya', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Shuckle', 91500, 50), + new GymPokemon('Murkrow', 91500, 50), + new GymPokemon('Misdreavus', 91500, 50), + ], { weight: 1 }, 'Fokil', '(male)'), + new DungeonTrainer('Reporter', [ + new GymPokemon('Castform', 91500, 50), + new GymPokemon('Torkoal', 91500, 50), + new GymPokemon('Glalie', 91500, 50), + ], { weight: 1 }, 'Sclim'), + new DungeonTrainer('Hunter', [ + new GymPokemon('Forretress', 91500, 50), + new GymPokemon('Cacturne', 91500, 50), + new GymPokemon('Skarmory', 91500, 50), + ], { weight: 1 }, 'Rina', '(female)'), + new DungeonTrainer('Rider', [ + new GymPokemon('Tentacruel', 91500, 50), + new GymPokemon('Cradily', 91500, 50), + new GymPokemon('Hariyama', 91500, 50), + ], { weight: 1 }, 'Kou', '(female)'), + new DungeonTrainer('Bandana Guy', [ + new GymPokemon('Armaldo', 91500, 50), + new GymPokemon('Exploud', 91500, 50), + new GymPokemon('Aggron', 91500, 50), + ], { weight: 1 }, 'Roblin'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Pokeball' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Persim' }, + { loot: 'Sitrus' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Lum', requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Under Colosseum')) }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [ + { loot: 'Muscle_Band', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Under Colosseum')) }, + { loot: 'Vivid_Scent', ignoreDebuff: true }, + ], +}, 1603000, [ + new DungeonTrainer('Shady Guy', [ + new GymPokemon('Armaldo', 2100000, 68), + new GymPokemon('Milotic', 2100000, 68), + new GymPokemon('Manectric', 2100000, 68), + new GymPokemon('Houndoom', 2100000, 68), + new GymPokemon('Gyarados', 2100000, 68), + new GymPokemon('Togetic', 2100000, 70, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Fein', '(wes)'), +], 91500, 134); +dungeonList['Gateon Port Battles'] = new Dungeon('Gateon Port Battles', [ + new DungeonTrainer('Chaser', [ + new GymPokemon('Swablu', 6002000, 6), + new GymPokemon('Feebas', 6002000, 6), + ], { weight: 1, requirement: new ClearDungeonRequirement(25, GameConstants.getDungeonIndex('Gateon Port Battles'), GameConstants.AchievementOption.less) }, 'Laken', '(female)'), + new DungeonTrainer('Sailor', [ + new GymPokemon('Wingull', 6002000, 6), + new GymPokemon('Lotad', 6002000, 6), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Gateon Port Battles'), GameConstants.AchievementOption.less) }, 'Berk'), + new DungeonTrainer('Sailor', [ + new GymPokemon('Whismur', 6002000, 6), + new GymPokemon('Marill', 6002000, 6), + ], { weight: 1, requirement: new ClearDungeonRequirement(75, GameConstants.getDungeonIndex('Gateon Port Battles'), GameConstants.AchievementOption.less) }, 'Bost'), + new DungeonTrainer('Old Man', [ + new GymPokemon('Taillow', 80200, 6), + new GymPokemon('Ledyba', 80200, 10, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Cyle'), + new DungeonTrainer('Bodybuilder', [ + new GymPokemon('Zubat', 80200, 6), + new GymPokemon('Poochyena', 80200, 10, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Kilen', '(female)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Pokeball' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [ + { loot: 'Splash Plate' }, + { loot: 'Insect Plate' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Mystic_Water' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Heart Scale' }], +}, 6002000, [ + new DungeonTrainer('Thug', [new GymPokemon('Zangoose', 58000000, 28, undefined, undefined, GameConstants.ShadowStatus.Shadow)], { weight: 1 }, 'Zook'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Ludicolo', 14000000, 57), + new GymPokemon('Ludicolo', 14000000, 57), + new GymPokemon('Ludicolo', 14000000, 57), + new GymPokemon('Ludicolo', 14000000, 57), + new GymPokemon('Ludicolo', 14000000, 57), + new GymPokemon('Dragonite', 14000000, 55, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, hide: true, requirement: new QuestLineCompletedRequirement('Gale of Darkness') }, 'Miror B.', 'Miror B'), +], 443500, 134, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.unova }); +dungeonList['Cipher Key Lair'] = new Dungeon('Cipher Key Lair', [ + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Lanturn', 6708000, 31), + new GymPokemon('Relicanth', 6708000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(25, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Kollo', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Ledian', 6708000, 28), + new GymPokemon('Illumise', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Grezle', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Clamperl', 6708000, 31), + new GymPokemon('Octillery', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(75, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Kollo', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Minun', 6708000, 30), + new GymPokemon('Beautifly', 6708000, 30), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Grezle', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Seviper', 6708000, 29), + new GymPokemon('Murkrow', 6708000, 29), + new GymPokemon('Paras', 6708000, 28, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Growlithe', 6708000, 28, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Humah', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Xatu', 6708000, 31), + new GymPokemon('Volbeat', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(125, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Ibsol', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Masquerain', 6708000, 31), + new GymPokemon('Bellossom', 6708000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Jelstin', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Plusle', 6708000, 30), + new GymPokemon('Dustox', 6708000, 30), + ], { weight: 1, requirement: new ClearDungeonRequirement(175, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Ibsol', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Roselia', 6708000, 32), + new GymPokemon('Hoppip', 6708000, 32), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Jelstin', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Shellder', 6708000, 29, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Rhyhorn', 6708000, 29), + new GymPokemon('Swalot', 6708000, 29), + new GymPokemon('Golbat', 6708000, 29), + new GymPokemon('Sharpedo', 6708000, 30), + ], { weight: 0.25 }, 'Gorog', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Beedrill', 6708000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Furret', 6708000, 30), + new GymPokemon('Togetic', 6708000, 31), + new GymPokemon('Pidgeotto', 6708000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Lok', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Donphan', 6708000, 30), + new GymPokemon('Ampharos', 6708000, 31), + new GymPokemon('Tentacruel', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(225, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Kleto', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Noctowl', 6708000, 30), + new GymPokemon('Mightyena', 6708000, 29), + ], { weight: 1, requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Flipis', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Absol', 6708000, 30), + new GymPokemon('Smeargle', 6708000, 31), + new GymPokemon('Tentacruel', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(275, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Kleto', 'XD (female)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Chimecho', 6708000, 31), + new GymPokemon('Kecleon', 6708000, 30), + ], { weight: 1, requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Flipis', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Ninetales', 6708000, 30), + new GymPokemon('Jumpluff', 6708000, 30), + new GymPokemon('Azumarill', 6708000, 32), + new GymPokemon('Tangela', 6708000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Butterfree', 6708000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Targ', 'XD (female)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Vileplume', 6708000, 31), + new GymPokemon('Stantler', 6708000, 31), + new GymPokemon('Granbull', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(325, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Hospel', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Ariados', 6708000, 30), + new GymPokemon('Girafarig', 6708000, 29), + new GymPokemon('Granbull', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Hospel', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Shedinja', 6708000, 31), + new GymPokemon('Wobbuffet', 6708000, 30), + new GymPokemon('Vibrava', 6708000, 35), + new GymPokemon('Magneton', 6708000, 30, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Snidle', 'XD (male)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Forretress', 6708000, 31), + new GymPokemon('Mantine', 6708000, 32), + new GymPokemon('Crobat', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(375, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Peon Fudler', '(commander)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Machoke', 6708000, 31), + new GymPokemon('Golem', 6708000, 31), + new GymPokemon('Forretress', 6708000, 31), + ], { weight: 1, requirement: new ClearDungeonRequirement(400, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Peon Fudler', '(commander)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Golduck', 6708000, 33), + new GymPokemon('Hitmontop', 6708000, 33), + new GymPokemon('Hariyama', 6708000, 34), + new GymPokemon('Venomoth', 6708000, 32, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Weepinbell', 6708000, 32, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Peon Angic', '(commander)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Camerupt', 6708000, 35), + new GymPokemon('Seaking', 6708000, 34), + new GymPokemon('Piloswine', 6708000, 34), + ], { weight: 1, requirement: new ClearDungeonRequirement(425, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Acrod', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Grumpig', 6708000, 34), + new GymPokemon('Seadra', 6708000, 34), + new GymPokemon('Camerupt', 6708000, 35), + ], { weight: 1, requirement: new ClearDungeonRequirement(450, GameConstants.getDungeonIndex('Cipher Key Lair'), GameConstants.AchievementOption.less) }, 'Acrod', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Huntail', 6708000, 33), + new GymPokemon('Cacturne', 6708000, 33), + new GymPokemon('Weezing', 6708000, 34), + new GymPokemon('Ursaring', 6708000, 34), + new GymPokemon('Arbok', 6708000, 32, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Smarton', '(yellow)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Pokeball' }, + ], + rare: [ + { loot: 'Purple Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [ + { loot: 'Earth Plate' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Max Revive' }, + { loot: 'Poison_Barb' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Calcium' }], +}, 6708000, [ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Lairon', 10574965, 36), + new GymPokemon('Sealeo', 10565837, 36), + new GymPokemon('Slowking', 10538602, 36), + new GymPokemon('Ursaring', 10565784, 36), + new GymPokemon('Primeape', 10538602, 34, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Hypno', 10538602, 34, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Gorigan', 'Gorigan'), +], 513600, 134, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.unova }); +dungeonList['Citadark Isle'] = new Dungeon('Citadark Isle', [ + new DungeonTrainer('Sailor', [ + new GymPokemon('Mantine', 7409000, 33), + new GymPokemon('Golduck', 7409000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Sableye', 7409000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Abson'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Dodrio', 7409000, 34, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Whiscash', 7409000, 33), + new GymPokemon('Raticate', 7409000, 34, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Furgy', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Claydol', 7409000, 36), + new GymPokemon('Kangaskhan', 7409000, 35, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Banette', 7409000, 37, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Litnar', 'XD (male)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Vileplume', 7409000, 34), + new GymPokemon('Magmar', 7409000, 36, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Pinsir', 7409000, 35, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Peon Grupel', '(commander)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Muk', 7409000, 38), + new GymPokemon('Rapidash', 7409000, 40, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Magcargo', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Kolest', 'XD (male)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Xatu', 7409000, 38), + new GymPokemon('Hitmonchan', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Peon Karbon', '(commander)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Metang', 7409000, 39), + new GymPokemon('Hariyama', 7409000, 39), + new GymPokemon('Hitmonlee', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Peon Petro', '(commander)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Magneton', 7409000, 41), + new GymPokemon('Lickitung', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Geftal', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Exploud', 7409000, 41), + new GymPokemon('Scyther', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Chansey', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Leden', 'XD (female)'), + new DungeonTrainer('Sailor', [ + new GymPokemon('Crawdaunt', 7409000, 33), + new GymPokemon('Pelipper', 7409000, 33), + new GymPokemon('Golduck', 7409000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Sableye', 7409000, 33, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Abson'), + new DungeonTrainer('Chaser', [ + new GymPokemon('Xatu', 7409000, 34), + new GymPokemon('Dodrio', 7409000, 34, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Raticate', 7409000, 34, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Furgy', '(male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Electrode', 7409000, 34), + new GymPokemon('Misdreavus', 7409000, 34), + new GymPokemon('Kangaskhan', 7409000, 35, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Banette', 7409000, 37, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Litnar', 'XD (male)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Houndoom', 7409000, 37), + new GymPokemon('Ninetales', 7409000, 37), + new GymPokemon('Magmar', 7409000, 36, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Pinsir', 7409000, 35, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Peon Grupel', '(commander)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Camerupt', 7409000, 37), + new GymPokemon('Weezing', 7409000, 37), + new GymPokemon('Rapidash', 7409000, 40, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Magcargo', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Kolest', 'XD (male)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Medicham', 7409000, 38), + new GymPokemon('Golem', 7409000, 38), + new GymPokemon('Hitmonchan', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Peon Karbon', '(commander)'), + new DungeonTrainer('Cipher', [ + new GymPokemon('Grumpig', 7409000, 39), + new GymPokemon('Skarmory', 7409000, 39), + new GymPokemon('Hitmonlee', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Peon Petro', '(commander)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Lanturn', 7409000, 41), + new GymPokemon('Lickitung', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Geftal', 'XD (male)'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Stantler', 7409000, 41), + new GymPokemon('Scyther', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Chansey', 7409000, 38, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Leden', 'XD (female)'), +], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Black Shard' }, + ], + epic: [ + { loot: 'Duskball' }, + { loot: 'Flame Plate' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Timerball' }, + { loot: 'Charcoal' }, + { loot: 'Dragon_Fang' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [ + { loot: 'Calcium' }, + { loot: 'Carbos' }, + ], +}, 7409000, [ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Gardevoir', 13958953, 36), + new GymPokemon('Gorebyss', 13958953, 36), + new GymPokemon('Roselia', 13958953, 37), + new GymPokemon('Farfetch\'d', 13958953, 36, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Altaria', 13958953, 36, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1 }, 'Lovrina', 'Lovrina'), +], 577700, 134, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.unova }); +dungeonList['Citadark Isle Dome'] = new Dungeon('Citadark Isle Dome', // Difficulty comperable to Pokéball Factory +[ + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Scizor', 8173950, 42), + new GymPokemon('Solrock', 8173950, 41, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Castform', 8173950, 42), + new GymPokemon('Starmie', 8173950, 41, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Snattle', 'Snattle'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Swellow', 8173950, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Heracross', 8173950, 44), + new GymPokemon('Electabuzz', 8173950, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Snorlax', 8173950, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Ardos', 'Ardos'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Aggron', 7409000, 43), + new GymPokemon('Walrein', 7409000, 44), + new GymPokemon('Poliwrath', 7409000, 42, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Mr. Mime', 7409000, 42, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Gorigan', 'Gorigan'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Breloom', 7409000, 42), + new GymPokemon('Donphan', 7409000, 44), + new GymPokemon('Dugtrio', 7409000, 40, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Kolax', 'XD (male)'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Manectric', 8173950, 44, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Salamence', 8173950, 50, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Flygon', 8173950, 45), + new GymPokemon('Marowak', 8173950, 44, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Lapras', 8173950, 44, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Eldes', 'Eldes'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Miltank', 8173950, 44), + new GymPokemon('Armaldo', 8173950, 41), + new GymPokemon('Slaking', 8173950, 43), + ], { weight: 1, requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Citadark Isle Dome'), GameConstants.AchievementOption.less) }, 'Loket', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Cradily', 8173950, 44), + new GymPokemon('Milotic', 8173950, 44), + new GymPokemon('Gyarados', 8173950, 42), + ], { weight: 1, requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Citadark Isle Dome'), GameConstants.AchievementOption.less) }, 'Kaller', '(male)'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Metang', 8173950, 42), + new GymPokemon('Quagsire', 8173950, 42), + new GymPokemon('Solrock', 8173950, 41, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Starmie', 8173950, 41, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Snattle', 'Snattle'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Swellow', 8173950, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Alakazam', 8173950, 44), + new GymPokemon('Kingdra', 8173950, 44), + new GymPokemon('Electabuzz', 8173950, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Snorlax', 8173950, 43, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Ardos', 'Ardos'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Slowking', 7409000, 42), + new GymPokemon('Ursaring', 7409000, 43), + new GymPokemon('Poliwrath', 7409000, 42, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Mr. Mime', 7409000, 42, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Gorigan', 'Gorigan'), + new DungeonTrainer('Cipher Peon', [ + new GymPokemon('Glalie', 7409000, 41), + new GymPokemon('Ampharos', 7409000, 44), + new GymPokemon('Dugtrio', 7409000, 40, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Kolax', 'XD (male)'), + new DungeonTrainer('Cipher Admin', [ + new GymPokemon('Ninjask', 8173950, 45), + new GymPokemon('Manectric', 8173950, 44, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Salamence', 8173950, 50, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Marowak', 8173950, 44, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Lapras', 8173950, 44, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 0.25 }, 'Eldes', 'Eldes'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Shiftry', 8173950, 44), + new GymPokemon('Granbull', 8173950, 44), + new GymPokemon('Slaking', 8173950, 43), + ], { weight: 1, requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Citadark Isle Dome'), GameConstants.AchievementOption.less) }, 'Loket', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Corsola', 8173950, 44), + new GymPokemon('Tentacruel', 8173950, 44), + new GymPokemon('Gyarados', 8173950, 42), + ], { weight: 1, requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Citadark Isle Dome'), GameConstants.AchievementOption.less) }, 'Kaller', '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Black Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Revive' }, + { loot: 'Joy_Scent', ignoreDebuff: true }, + ], + legendary: [ + { loot: 'Sharp_Beak' }, + { loot: 'Soft_Sand' }, + { loot: 'Excite_Scent', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Vivid_Scent', ignoreDebuff: true }], +}, 8173950, [ + new DungeonTrainer('Grand Master', [new GymPokemon('XD001', 83753718, 50, undefined, undefined, GameConstants.ShadowStatus.Shadow)], { weight: 1 }, 'Greevil', 'Greevil'), + new DungeonTrainer('Grand Master', [ + new GymPokemon('Rhydon', 13958953, 46, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Moltres', 13958953, 50, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Exeggutor', 13958953, 46, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Tauros', 13958953, 46, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Articuno', 13958953, 50, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Zapdos', 13958953, 50, undefined, undefined, GameConstants.ShadowStatus.Shadow), + ], { weight: 1, requirement: new QuestLineCompletedRequirement('Gale of Darkness') }, 'Greevil', 'Greevil'), +], 615000, 134, () => { }, { dungeonRegionalDifficulty: GameConstants.Region.unova }); +// Sinnoh +// Sinnoh Dungeons +dungeonList['Oreburgh Gate'] = new Dungeon('Oreburgh Gate', [ + { pokemon: 'Zubat', options: { weight: 1.1 } }, + { pokemon: 'Golbat', options: { weight: 1.1 } }, + { pokemon: 'Psyduck', options: { weight: 1.1 } }, + { pokemon: 'Golduck', options: { weight: 1.1 } }, + { pokemon: 'Geodude', options: { weight: 1.1 } }, + { pokemon: 'Magikarp', options: { weight: 1.1 } }, + { pokemon: 'Barboach', options: { weight: 1.1 } }, + new DungeonTrainer('Camper', [ + new GymPokemon('Starly', 720600, 7), + new GymPokemon('Shinx', 720600, 7), + ], { weight: 1 }, 'Curtis'), + new DungeonTrainer('Picnicker', [new GymPokemon('Bidoof', 720600, 9)], { weight: 1 }, 'Diana'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Dowsing_machine' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + ], + epic: [ + { loot: 'Earth Plate' }, + { loot: 'Fist Plate' }, + ], +}, 720600, [ + new DungeonBossPokemon('Gyarados', 3703000, 14), + new DungeonBossPokemon('Whiscash', 3703000, 14), +], 39000, 203); +dungeonList['Valley Windworks'] = new Dungeon('Valley Windworks', [ + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Glameow', 756000, 13)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Zubat', 756000, 13)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Glameow', 756000, 11), + new GymPokemon('Stunky', 756000, 11), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Stunky', 756000, 13)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Zubat', 756000, 11), + new GymPokemon('Zubat', 756000, 11), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'Lucky_incense' }, + { loot: 'Ultraball' }, + ], + rare: [{ loot: 'Yellow Shard' }], + epic: [{ loot: 'Zap Plate' }], + legendary: [{ loot: 'SmallRestore' }], +}, 756000, [ + new DungeonTrainer('Commander', [ + new GymPokemon('Zubat', 1901500, 15), + new GymPokemon('Purugly', 1901500, 17), + ], { weight: 1 }, 'Mars', '(mars)'), + new DungeonBossPokemon('Drifloon', 3803000, 14, { hide: true, requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Valley Windworks')) }), +], 43000, 204); +dungeonList['Eterna Forest'] = new Dungeon('Eterna Forest', [ + { pokemon: 'Gastly', options: { weight: 1.8 } }, + { pokemon: 'Hoothoot', options: { weight: 1.8 } }, + { pokemon: 'Wurmple', options: { weight: 1.8 } }, + { pokemon: 'Silcoon', options: { weight: 1.8 } }, + { pokemon: 'Cascoon', options: { weight: 1.8 } }, + { pokemon: 'Bidoof', options: { weight: 1.8 } }, + { pokemon: 'Kricketot', options: { weight: 1.8 } }, + { pokemon: 'Budew', options: { weight: 1.8 } }, + { pokemon: 'Buneary', options: { weight: 1.8 } }, + new DungeonTrainer('Bookworms', [ + new GymPokemon('Wurmple', 812000, 9), + new GymPokemon('Silcoon', 812000, 11), + new GymPokemon('Beautifly', 812000, 13), + new GymPokemon('Pachirisu', 812000, 14), + ], { weight: 1 }, 'Jack & Briana'), + new DungeonTrainer('Melded Minds', [ + new GymPokemon('Abra', 812000, 15), + new GymPokemon('Abra', 812000, 15), + ], { weight: 1 }, 'Linsey & Elijah', '(both)'), + new DungeonTrainer('Bug Buds', [ + new GymPokemon('Wurmple', 812000, 9), + new GymPokemon('Cascoon', 812000, 11), + new GymPokemon('Dustox', 812000, 13), + new GymPokemon('Burmy (Plant)', 812000, 12), + new GymPokemon('Kricketune', 812000, 12), + ], { weight: 1 }, 'Philip & Donald'), + new DungeonTrainer('Melded Minds', [ + new GymPokemon('Meditite', 812000, 15), + new GymPokemon('Psyduck', 812000, 15), + ], { weight: 1 }, 'Kody & Rachael', '(both)'), +], { + common: [ + { loot: 'Cheri' }, + { loot: 'Oran' }, + { loot: 'Razz' }, + { loot: 'Bluk' }, + { loot: 'Greatball' }, + ], + rare: [{ loot: 'Lime Shard' }], + epic: [ + { loot: 'Insect Plate' }, + { loot: 'Meadow Plate' }, + ], + legendary: [ + { loot: 'SmallRestore' }, + { loot: 'Silver_Powder' }, + ], +}, 812000, [ + new DungeonBossPokemon('Beautifly', 3950000, 30), + new DungeonBossPokemon('Dustox', 3950000, 30), + new DungeonBossPokemon('Parasect', 4500000, 30, { hide: true, requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 8, GameConstants.AchievementOption.less), + new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 7), + ]) }), + new DungeonBossPokemon('Vivillon (River)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 20), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 21, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (River)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 48000, 205); +dungeonList['Old Chateau'] = new Dungeon('Old Chateau', ['Gastly', 'Haunter', 'Gengar'], { + common: [ + { loot: 'xClick' }, + { loot: 'Dowsing_machine' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [ + { loot: 'Dread Plate' }, + { loot: 'Spooky Plate' }, + { loot: 'Zap Plate' }, + ], + legendary: [ + { loot: 'Odd Keystone' }, + { loot: 'Spell_Tag' }, + ], +}, 853000, [new DungeonBossPokemon('Rotom', 4200000, 100)], 52500, 205); +dungeonList['Team Galactic Eterna Building'] = new Dungeon('Team Galactic Eterna Building', [ + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Zubat', 877000, 17), + new GymPokemon('Stunky', 877000, 17), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Zubat', 877000, 16), + new GymPokemon('Glameow', 877000, 18), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Glameow', 877000, 19)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Croagunk', 877000, 19)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Stunky', 877000, 16), + new GymPokemon('Croagunk', 877000, 16), + new GymPokemon('Glameow', 877000, 16), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Scientist', [new GymPokemon('Kadabra', 877000, 20)], { weight: 1 }, 'Travon', '(male)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [{ loot: 'Toxic Plate' }], + legendary: [{ loot: 'Revive' }], +}, 877000, [ + new DungeonTrainer('Commander', [ + new GymPokemon('Zubat', 2150000, 21), + new GymPokemon('Skuntank', 2150000, 23), + ], { weight: 1 }, 'Jupiter', '(jupiter)'), + new DungeonBossPokemon('Rotom (Heat)', 4300000, 100, { hide: true, requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Rotom'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Team Galactic Eterna Building')), + ]) }), + new DungeonBossPokemon('Rotom (Wash)', 4300000, 100, { hide: true, requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Rotom'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Team Galactic Eterna Building')), + ]) }), + new DungeonBossPokemon('Rotom (Frost)', 4300000, 100, { hide: true, requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Rotom'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Team Galactic Eterna Building')), + ]) }), + new DungeonBossPokemon('Rotom (Fan)', 4300000, 100, { hide: true, requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Rotom'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Team Galactic Eterna Building')), + ]) }), + new DungeonBossPokemon('Rotom (Mow)', 4300000, 100, { hide: true, requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Rotom'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Team Galactic Eterna Building')), + ]) }), + new DungeonBossPokemon('Rotom (Discord)', 4300000, 100, { hide: true, requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Rotom'), + new ObtainedPokemonRequirement('Rotom (Discord)'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Team Galactic Eterna Building')), + ]) }), +], 54250, 205); +dungeonList['Wayward Cave'] = new Dungeon('Wayward Cave', [ + { pokemon: 'Zubat', options: { weight: 6.7 } }, + { pokemon: 'Geodude', options: { weight: 6.7 } }, + { pokemon: 'Onix', options: { weight: 6.7 } }, + { pokemon: 'Gible', options: { weight: 6.7, hide: true, requirement: new ObtainedPokemonRequirement('Gible') } }, + new DungeonTrainer('Mountain Men', [ + new GymPokemon('Geodude', 903000, 20), + new GymPokemon('Geodude', 903000, 20), + new GymPokemon('Onix', 903000, 22), + ], { weight: 1 }, 'Reginald & Lorenzo'), + new DungeonTrainer('Siblings', [ + new GymPokemon('Buneary', 903000, 22), + new GymPokemon('Staravia', 903000, 17), + new GymPokemon('Ponyta', 903000, 20), + new GymPokemon('Shellos (West)', 903000, 20), + ], { weight: 1 }, 'Cassidy & Wayne'), + new DungeonTrainer('Nature Friends', [ + new GymPokemon('Psyduck', 903000, 22), + new GymPokemon('Aipom', 903000, 22), + ], { weight: 1 }, 'Tori & Diego'), + new DungeonTrainer('Nature Friends', [ + new GymPokemon('Hoothoot', 903000, 22), + new GymPokemon('Buizel', 903000, 20), + new GymPokemon('Shinx', 903000, 20), + ], { weight: 1 }, 'Ana & Parker'), + new DungeonTrainer('Amateur Archaeologists', [ + new GymPokemon('Gible', 903000, 22), + new GymPokemon('Geodude', 903000, 19), + new GymPokemon('Bronzor', 903000, 21), + ], { weight: 1 }, 'Terry & Gerald'), +], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Razz' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Grey Shard' }, + ], + epic: [ + { loot: 'Earth Plate' }, + { loot: 'Draco Plate' }, + ], + legendary: [ + { loot: 'Revive', weight: 2 }, + { loot: 'MediumRestore' }, + ], +}, 903000, [new DungeonBossPokemon('Bronzor', 4400000, 100)], 56500, 206); +dungeonList['Mt. Coronet South'] = new Dungeon('Mt. Coronet South', ['Clefairy', 'Zubat', 'Machop', 'Geodude', 'Magikarp', 'Cleffa', 'Barboach', 'Chingling'], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [{ loot: 'Stone Plate' }], + legendary: [{ loot: 'Revive', weight: 2 }], +}, 951500, [ + new DungeonBossPokemon('Nosepass', 4000000, 35), + new DungeonBossPokemon('Meditite', 4000000, 50), + new DungeonBossPokemon('Bronzor', 4000000, 50), +], 60500, 207); +// All Unown except "FHP?!" +const SolaceonUnownList = 'ABCDEGIJKLMNOQRSTUVWXYZ'.split(''); +dungeonList['Solaceon Ruins'] = new Dungeon('Solaceon Ruins', [ + { pokemon: 'Zubat', options: { weight: 0.8 } }, + { pokemon: 'Geodude', options: { weight: 0.8 } }, + { pokemon: 'Natu', options: { weight: 0.8 } }, + { pokemon: 'Bronzor', options: { weight: 0.8 } }, + { pokemon: 'Hippopotas', options: { weight: 0.8 } }, + new DungeonTrainer('Ruin Maniac', [ + new GymPokemon('Geodude', 960000, 19), + new GymPokemon('Geodude', 960000, 21), + new GymPokemon('Bronzor', 960000, 23), + ], { weight: 1 }, 'Karl'), +], { + common: [ + { loot: 'Lucky_incense', weight: 2 }, + { loot: 'Persim' }, + ], + rare: [{ loot: 'Crimson Shard' }], + epic: [ + { loot: 'Mind Plate' }, + { loot: 'Sky Plate' }, + ], +}, 960000, [ + ...SolaceonUnownList.map((char, index) => new DungeonBossPokemon(`Unown (${char})`, 4100000, 30, { + hide: true, + requirement: new OneFromManyRequirement([ + new SeededDateSelectNRequirement(index, SolaceonUnownList.length, 1), + new MultiRequirement([new SeededDateSelectNRequirement(index, SolaceonUnownList.length, 2), new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Solaceon Ruins'))]), + new MultiRequirement([new SeededDateSelectNRequirement(index, SolaceonUnownList.length, 3), new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Solaceon Ruins'))]), + ]), + })), +], 62500, 209); +dungeonList['Iron Island'] = new Dungeon('Iron Island', [ + { pokemon: 'Zubat', options: { weight: 3.3 } }, + { pokemon: 'Golbat', options: { weight: 3.3 } }, + { pokemon: 'Tentacool', options: { weight: 3.3 } }, + { pokemon: 'Tentacruel', options: { weight: 3.3 } }, + { pokemon: 'Geodude', options: { weight: 3.3 } }, + { pokemon: 'Graveler', options: { weight: 3.3 } }, + { pokemon: 'Onix', options: { weight: 3.3 } }, + { pokemon: 'Steelix', options: { weight: 3.3 } }, + { pokemon: 'Wingull', options: { weight: 3.3 } }, + { pokemon: 'Pelipper', options: { weight: 3.3 } }, + { pokemon: 'Finneon', options: { weight: 3.3 } }, + new DungeonTrainer('Camper', [ + new GymPokemon('Aipom', 983000, 34), + new GymPokemon('Floatzel', 983000, 36), + ], { weight: 1 }, 'Lawrence'), + new DungeonTrainer('Picnicker', [new GymPokemon('Raichu', 983000, 37)], { weight: 1 }, 'Summer'), + new DungeonTrainer('Worker', [ + new GymPokemon('Magnemite', 983000, 34), + new GymPokemon('Magnemite', 983000, 36), + ], { weight: 1 }, 'Noel', '(male)'), + new DungeonTrainer('Worker', [new GymPokemon('Steelix', 983000, 37)], { weight: 1 }, 'Braden', '(male)'), + new DungeonTrainer('Mountain Men', [ + new GymPokemon('Nosepass', 983000, 35), + new GymPokemon('Onix', 983000, 33), + new GymPokemon('Steelix', 983000, 34), + new GymPokemon('Graveler', 983000, 35), + new GymPokemon('Rhyhorn', 983000, 35), + ], { weight: 1 }, 'Damon & Maurice'), + new DungeonTrainer('Crush Kin', [ + new GymPokemon('Toxicroak', 983000, 38), + new GymPokemon('Medicham', 983000, 38), + ], { weight: 1 }, 'Kendal & Tyler'), + new DungeonTrainer('Co-workers', [ + new GymPokemon('Geodude', 983000, 33), + new GymPokemon('Geodude', 983000, 33), + new GymPokemon('Machoke', 983000, 36), + new GymPokemon('Magnemite', 983000, 34), + new GymPokemon('Graveler', 983000, 34), + new GymPokemon('Machop', 983000, 34), + ], { weight: 1 }, 'Brendon & Quentin'), + new DungeonTrainer('Ace Duo', [ + new GymPokemon('Quagsire', 983000, 35), + new GymPokemon('Staraptor', 983000, 36), + new GymPokemon('Hippopotas', 983000, 38), + new GymPokemon('Lopunny', 983000, 38), + new GymPokemon('Medicham', 983000, 35), + new GymPokemon('Kirlia', 983000, 36), + ], { weight: 1 }, 'Jonah & Brenda'), +], { + common: [ + { loot: 'Dowsing_machine', weight: 2 }, + { loot: 'Ultraball' }, + ], + rare: [{ loot: 'Grey Shard' }], + epic: [ + { loot: 'Iron Plate', weight: 2 }, + { loot: 'Duskball' }, + ], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'Magnet' }, + ], +}, 983000, [ + new DungeonTrainer('Galactic Grunts', [ + new GymPokemon('Zubat', 701667, 34), + new GymPokemon('Houndour', 701667, 34), + new GymPokemon('Golbat', 701667, 34), + new GymPokemon('Glameow', 701667, 34), + new GymPokemon('Croagunk', 701667, 34), + new GymPokemon('Stunky', 701667, 34), + ], { weight: 1 }, undefined, '(male)'), +], 66500, 218, () => { + BagHandler.gainItem({ type: ItemType.item, id: 'Fighting_egg' }, 1); + Notifier.notify({ + message: 'You were awarded a Fighting Egg for defeating the Galactic Grunts.', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); +}); +dungeonList['Lake Valor'] = new Dungeon('Lake Valor', [ + { pokemon: 'Psyduck', options: { weight: 2 } }, + { pokemon: 'Golduck', options: { weight: 2 } }, + { pokemon: 'Goldeen', options: { weight: 2 } }, + { pokemon: 'Magikarp', options: { weight: 2 } }, + { pokemon: 'Staravia', options: { weight: 2 } }, + { pokemon: 'Bibarel', options: { weight: 2 } }, + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Glameow', 1015000, 35), + new GymPokemon('Murkrow', 1015000, 35), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Golbat', 1015000, 37)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Croagunk', 1015000, 33), + new GymPokemon('Houndour', 1015000, 33), + new GymPokemon('Stunky', 1015000, 33), + new GymPokemon('Glameow', 1015000, 33), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'Token_collector', weight: 2 }, + { loot: 'Sitrus' }, + ], + rare: [{ loot: 'Blue Shard' }], + epic: [ + { loot: 'Mind Plate' }, + { loot: 'Lureball' }, + ], +}, 1015000, [ + new DungeonTrainer('Commander', [ + new GymPokemon('Golbat', 1533334, 38), + new GymPokemon('Bronzor', 1533334, 38), + new GymPokemon('Toxicroak', 1533334, 40), + ], { weight: 2 }, 'Saturn', '(saturn)'), + new DungeonBossPokemon('Azelf', 10060000, 50, { requirement: new QuestLineCompletedRequirement('A New World') }), + new DungeonBossPokemon('Vivillon (Marine)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 0), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 1, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Marine)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 69500, 218); +dungeonList['Lake Verity'] = new Dungeon('Lake Verity', [ + { pokemon: 'Psyduck', options: { weight: 2.7 } }, + { pokemon: 'Golduck', options: { weight: 2.7 } }, + { pokemon: 'Goldeen', options: { weight: 2.7 } }, + { pokemon: 'Magikarp', options: { weight: 2.7 } }, + { pokemon: 'Starly', options: { weight: 2.7 } }, + { pokemon: 'Bidoof', options: { weight: 2.7 } }, + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Glameow', 1068735, 33), + new GymPokemon('Golbat', 1068735, 33), + new GymPokemon('Murkrow', 1068735, 36), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Croagunk', 1068735, 37)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Stunky', 1068735, 35), + new GymPokemon('Houndour', 1068735, 35), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Houndour', 1068735, 34), + new GymPokemon('Glameow', 1068735, 36), + ], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Sitrus' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [{ loot: 'Mind Plate' }], +}, 1068735, [ + new DungeonTrainer('Commander', [ + new GymPokemon('Golbat', 1606667, 38), + new GymPokemon('Bronzor', 1606667, 38), + new GymPokemon('Purugly', 1606667, 40), + ], { weight: 1 }, 'Mars', '(mars)'), + new DungeonBossPokemon('Vivillon (Marine)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 0), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 1, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Marine)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 72500, 218); +dungeonList['Mt. Coronet North'] = new Dungeon('Mt. Coronet North', ['Clefairy', 'Zubat', 'Machop', 'Geodude', 'Magikarp', 'Noctowl', 'Meditite', 'Barboach', 'Chingling', 'Bronzor', 'Snover'], { + common: [ + { loot: 'xClick', weight: 2 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [ + { loot: 'Stone Plate' }, + { loot: 'Draco Plate' }, + ], + legendary: [ + { loot: 'LargeRestore', weight: 2 }, + { loot: 'Star Piece' }, + { loot: 'Soft_Sand' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Mt. Coronet North')) }, + ], +}, 1111500, [ + new DungeonBossPokemon('Graveler', 4960000, 35), + new DungeonBossPokemon('Feebas', 4960000, 50), + new DungeonBossPokemon('Medicham', 4960000, 50), +], 74500, 218); +dungeonList['Lake Acuity'] = new Dungeon('Lake Acuity', ['Psyduck', 'Golduck', 'Goldeen', 'Magikarp', 'Gyarados', 'Sneasel', 'Snorunt', 'Bibarel', 'Snover'], { + common: [ + { loot: 'Lucky_egg', weight: 2 }, + { loot: 'Sitrus' }, + ], + rare: [{ loot: 'Yellow Shard' }], + epic: [ + { loot: 'Mind Plate' }, + { loot: 'Icicle Plate' }, + ], +}, 1261800, [ + new DungeonTrainer('Commander', [ + new GymPokemon('Golbat', 1690000, 38), + new GymPokemon('Bronzor', 1690000, 38), + new GymPokemon('Skuntank', 1690000, 40), + ], { weight: 2 }, 'Jupiter', '(jupiter)'), + new DungeonBossPokemon('Uxie', 10070000, 50, { requirement: new QuestLineCompletedRequirement('A New World') }), + new DungeonBossPokemon('Vivillon (Marine)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 0), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 1, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Marine)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 78000, 217); +dungeonList['Team Galactic HQ'] = new Dungeon('Team Galactic HQ', [ + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Glameow', 1295400, 41)], { weight: 2 }, undefined, '(female)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Glameow', 1295400, 37), + new GymPokemon('Murkrow', 1295400, 38), + new GymPokemon('Croagunk', 1295400, 39), + ], { weight: 2 }, undefined, '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Kirlia', 1295400, 40), + new GymPokemon('Kadabra', 1295400, 40), + ], { weight: 2 }, 'Frederick', '(male)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Stunky', 1295400, 41)], { weight: 2 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Murkrow', 1295400, 41), + new GymPokemon('Stunky', 1295400, 41), + ], { weight: 2 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Golbat', 1295400, 40), + new GymPokemon('Golbat', 1295400, 38), + ], { weight: 2 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Golbat', 1295400, 39), + new GymPokemon('Houndour', 1295400, 39), + ], { weight: 2 }, undefined, '(female)'), + new DungeonTrainer('Scientist', [new GymPokemon('Porygon2', 1295400, 42)], { weight: 2 }, 'Darrius', '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Stunky', 1295400, 38), + new GymPokemon('Croagunk', 1295400, 40), + ], { weight: 2 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Croagunk', 1295400, 38), + new GymPokemon('Stunky', 1295400, 38), + new GymPokemon('Glameow', 1295400, 38), + ], { weight: 2 }, undefined, '(female)'), + new DungeonTrainer('Commander', [ + new GymPokemon('Golbat', 1295400, 42), + new GymPokemon('Bronzor', 1295400, 42), + new GymPokemon('Toxicroak', 1295400, 42), + ], { weight: 1 }, 'Saturn', '(saturn)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Dowsing_machine' }, + ], + rare: [ + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [{ loot: 'Sky Plate' }], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Poison_Barb' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Team Galactic HQ')) }, + ], +}, 1295400, [ + new DungeonTrainer('Galactic Boss', [ + new GymPokemon('Sneasel', 1725000, 44), + new GymPokemon('Crobat', 1725000, 44), + new GymPokemon('Honchkrow', 1725000, 46), + ], { weight: 1 }, 'Cyrus', '(cyrus)'), +], 82500, 217); +dungeonList['Spear Pillar'] = new Dungeon('Spear Pillar', [ + { pokemon: 'Clefairy', options: { weight: 3 } }, + { pokemon: 'Golbat', options: { weight: 3 } }, + { pokemon: 'Machoke', options: { weight: 3 } }, + { pokemon: 'Graveler', options: { weight: 3 } }, + { pokemon: 'Nosepass', options: { weight: 3 } }, + { pokemon: 'Noctowl', options: { weight: 3 } }, + { pokemon: 'Medicham', options: { weight: 3 } }, + { pokemon: 'Chimecho', options: { weight: 3 } }, + { pokemon: 'Absol', options: { weight: 3 } }, + { pokemon: 'Chingling', options: { weight: 3 } }, + { pokemon: 'Bronzong', options: { weight: 3 } }, + { pokemon: 'Snover', options: { weight: 3 } }, + { pokemon: 'Abomasnow', options: { weight: 3 } }, + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Stunky', 1322100, 43)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Murkrow', 1322100, 43)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Houndour', 1322100, 40), + new GymPokemon('Golbat', 1322100, 40), + new GymPokemon('Houndour', 1322100, 40), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Stunky', 1322100, 42), + new GymPokemon('Golbat', 1322100, 40), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [new GymPokemon('Golbat', 1322100, 43)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Murkrow', 1322100, 39), + new GymPokemon('Glameow', 1322100, 42), + new GymPokemon('Murkrow', 1322100, 39), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Croagunk', 1322100, 38), + new GymPokemon('Croagunk', 1322100, 42), + new GymPokemon('Stunky', 1322100, 40), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Houndour', 1322100, 40), + new GymPokemon('Glameow', 1322100, 42), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Glameow', 1322100, 41), + new GymPokemon('Golbat', 1322100, 41), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Galactic Grunt', [ + new GymPokemon('Golbat', 1322100, 39), + new GymPokemon('Croagunk', 1322100, 40), + new GymPokemon('Murkrow', 1322100, 41), + ], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Dowsing_machine' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [ + { loot: 'Iron Plate' }, + { loot: 'Draco Plate' }, + { loot: 'Splash Plate' }, + ], +}, 1322100, [ + new DungeonTrainer('Commanders', [ + new GymPokemon('Bronzor', 880000, 44), + new GymPokemon('Golbat', 880000, 44), + new GymPokemon('Purugly', 880000, 46), + new GymPokemon('Bronzor', 880000, 44), + new GymPokemon('Golbat', 880000, 44), + new GymPokemon('Skuntank', 880000, 46), + ], { weight: 1 }, 'Mars & Jupiter', '(marsjupiter)'), + new DungeonBossPokemon('Palkia', 11880000, 100, { requirement: new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion) }), + new DungeonBossPokemon('Dialga', 11880000, 100, { requirement: new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion) }), +], 84500, 217); +dungeonList['Distortion World'] = new Dungeon('Distortion World', ['Golbat', 'Gastly', 'Duskull', 'Dusclops', 'Chimecho', 'Chingling', 'Bronzor', 'Bronzong'], { + common: [ + { loot: 'xClick', weight: 4 }, + { loot: 'Lucky_incense', weight: 2 }, + { loot: 'Banette' }, + ], + rare: [ + { loot: 'Purple Shard' }, + { loot: 'Crimson Shard' }, + ], + legendary: [ + { loot: 'Rare Bone' }, + { loot: 'Odd Keystone' }, + ], +}, 1350400, [ + new DungeonTrainer('Galactic Boss', [ + new GymPokemon('Houndoom', 1128000, 45), + new GymPokemon('Honchkrow', 1128000, 47), + new GymPokemon('Crobat', 1128000, 46), + new GymPokemon('Gyarados', 1128000, 46), + new GymPokemon('Weavile', 1128000, 47), + ], { weight: 2 }, 'Cyrus', '(cyrus)'), + new DungeonBossPokemon('Giratina (Altered)', 11880000, 45, { requirement: new QuestLineStepCompletedRequirement('Zero\'s Ambition', 13) }), +], 86500, 217); +dungeonList['Victory Road Sinnoh'] = new Dungeon('Victory Road Sinnoh', [ + { pokemon: 'Golbat', options: { weight: 9.3 } }, + { pokemon: 'Graveler', options: { weight: 9.3 } }, + { pokemon: 'Onix', options: { weight: 9.3 } }, + { pokemon: 'Rhyhorn', options: { weight: 9.3 } }, + { pokemon: 'Magneton', options: { weight: 9.3 } }, + { pokemon: 'Floatzel', options: { weight: 9.3 } }, + { pokemon: 'Gabite', options: { weight: 9.3, hide: true, requirement: new ObtainedPokemonRequirement('Gabite') } }, + new DungeonTrainer('Psychic', [ + new GymPokemon('Haunter', 1503000, 43), + new GymPokemon('Gengar', 1503000, 46), + new GymPokemon('Gardevoir', 1503000, 46), + ], { weight: 1 }, 'Bryce', '(male)'), + new DungeonTrainer('Bird Keeper', [ + new GymPokemon('Noctowl', 1503000, 45), + new GymPokemon('Togetic', 1503000, 47), + ], { weight: 1 }, 'Hana'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Blissey', 1503000, 45), + new GymPokemon('Glalie', 1503000, 46), + new GymPokemon('Magnezone', 1503000, 48), + ], { weight: 1 }, 'Mariah', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Mamoswine', 1503000, 45), + new GymPokemon('Mothim', 1503000, 46), + new GymPokemon('Rampardos', 1503000, 48), + ], { weight: 1 }, 'Omar', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Clefable', 1503000, 47), + new GymPokemon('Torterra', 1503000, 48), + ], { weight: 1 }, 'Sydney', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Staraptor', 1503000, 47), + new GymPokemon('Lickilicky', 1503000, 47), + ], { weight: 1 }, 'Clayton', '(male)'), + new DungeonTrainer('Double Team', [ + new GymPokemon('Staraptor', 1503000, 50), + new GymPokemon('Ambipom', 1503000, 50), + ], { weight: 1 }, 'Al & Kay'), + new DungeonTrainer('Black Belt', [new GymPokemon('Machamp', 1503000, 48)], { weight: 1 }, 'Miles'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Chimecho', 1503000, 44), + new GymPokemon('Absol', 1503000, 45), + new GymPokemon('Dusknoir', 1503000, 46), + ], { weight: 1 }, 'Valencia', '(female)'), + new DungeonTrainer('Double Team', [ + new GymPokemon('Lumineon', 1503000, 50), + new GymPokemon('Rapidash', 1503000, 50), + ], { weight: 1 }, 'Pat & Jo'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Rhydon', 1503000, 47), + new GymPokemon('Carnivine', 1503000, 48), + ], { weight: 1 }, 'Henry', '(male)'), + new DungeonTrainer('Dragon Tamer', [ + new GymPokemon('Altaria', 1503000, 45), + new GymPokemon('Gabite', 1503000, 47), + ], { weight: 1 }, 'Ondrej'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Porygon-Z', 1503000, 46), + new GymPokemon('Tangrowth', 1503000, 46), + new GymPokemon('Empoleon', 1503000, 46), + ], { weight: 1 }, 'Edgar', '(male)'), + new DungeonTrainer('Dragon Tamer', [ + new GymPokemon('Gible', 1503000, 43), + new GymPokemon('Swablu', 1503000, 45), + new GymPokemon('Gabite', 1503000, 47), + ], { weight: 1 }, 'Clinton'), +], { + common: [ + { loot: 'Lucky_incense', weight: 3 }, + { loot: 'Oran', weight: 3 }, + { loot: 'Graveler' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + ], + legendary: [{ loot: 'Repeatball' }], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Heart Scale' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Victory Road Sinnoh')) }, + ], +}, 1503000, [ + new DungeonBossPokemon('Rhydon', 7000000, 100), + new DungeonBossPokemon('Steelix', 7000000, 100), +], 89500, 223); +dungeonList['Sendoff Spring'] = new Dungeon('Sendoff Spring', ['Golbat', 'Golduck', 'Graveler', 'Goldeen', 'Magikarp', 'Staravia', 'Bibarel', 'Chingling'], { + common: [ + { loot: 'xClick' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'White Shard' }, + { loot: 'Black Shard' }, + ], + epic: [ + { loot: 'Spooky Plate' }, + { loot: 'Draco Plate' }, + ], +}, 2603000, [ + new DungeonBossPokemon('Seaking', 10000000, 100), + new DungeonBossPokemon('Gyarados', 10000000, 100), + new DungeonBossPokemon('Dusclops', 10000000, 100), +], 96500, 230); +dungeonList['Hall of Origin'] = new Dungeon('Hall of Origin', ['Slowpoke', 'Spearow', 'Garchomp', 'Slakoth', 'Eevee', 'Breloom', 'Absol'], { + common: [ + { loot: 'Dowsing_machine', weight: 4 }, + { loot: 'Cheri', weight: 2 }, + { loot: 'Ditto' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'White Shard' }, + { loot: 'Black Shard' }, + ], + epic: [ + { loot: 'Blank Plate' }, + { loot: 'Draco Plate' }, + { loot: 'Dread Plate' }, + { loot: 'Earth Plate' }, + { loot: 'Fist Plate' }, + { loot: 'Flame Plate' }, + { loot: 'Icicle Plate' }, + { loot: 'Insect Plate' }, + { loot: 'Iron Plate' }, + { loot: 'Meadow Plate' }, + { loot: 'Mind Plate' }, + { loot: 'Pixie Plate' }, + { loot: 'Sky Plate' }, + { loot: 'Splash Plate' }, + { loot: 'Spooky Plate' }, + { loot: 'Stone Plate' }, + { loot: 'Toxic Plate' }, + { loot: 'Zap Plate' }, + ], +}, 2653000, [ + new DungeonBossPokemon('Slaking', 10000000, 100), + new DungeonBossPokemon('Snorlax', 10000000, 100), + new DungeonBossPokemon('Blissey', 10000000, 100), + new DungeonBossPokemon('Staraptor', 10000000, 100), + new DungeonBossPokemon('Arceus (Normal)', 13000000, 100), +], 106500, 230); +dungeonList['Fullmoon Island'] = new Dungeon('Fullmoon Island', ['Illumise', 'Minun', 'Hypno', 'Luvdisc'], { + common: [ + { loot: 'xClick', weight: 2 }, + { loot: 'Nanab' }, + ], + rare: [{ loot: 'White Shard' }], + epic: [ + { loot: 'Mind Plate' }, + { loot: 'Moonball' }, + ], +}, 2603000, [ + new DungeonBossPokemon('Lunatone', 11000000, 100), + new DungeonBossPokemon('Clefable', 11000000, 100), + new DungeonBossPokemon('Cresselia', 11000000, 100, { requirement: new MoonCyclePhaseRequirement([MoonCyclePhase.NewMoon, MoonCyclePhase.WaxingCrescent, MoonCyclePhase.WaningCrescent]) }), +], 96500, 230); +dungeonList['Newmoon Island'] = new Dungeon('Newmoon Island', ['Volbeat', 'Plusle', 'Sneasel', 'Luvdisc'], { + common: [ + { loot: 'Lucky_egg', weight: 2 }, + { loot: 'Nanab' }, + ], + rare: [{ loot: 'Black Shard' }], + epic: [ + { loot: 'Dread Plate' }, + { loot: 'Moonball' }, + ], + legendary: [{ loot: 'Black_Glasses' }], +}, 2603000, [ + new DungeonBossPokemon('Lunatone', 9900000, 100), + new DungeonBossPokemon('Absol', 9900000, 100), + new DungeonBossPokemon('Darkrai', 11000000, 100, { requirement: new MoonCyclePhaseRequirement([MoonCyclePhase.FullMoon, MoonCyclePhase.WaxingGibbous, MoonCyclePhase.WaningGibbous, MoonCyclePhase.FirstQuarter, MoonCyclePhase.ThirdQuarter]) }), +], 96500, 230); +dungeonList['Flower Paradise'] = new Dungeon('Flower Paradise', ['Gloom', 'Bellsprout', 'Tangela', 'Skiploom', 'Lombre', 'Seedot', 'Roselia'], { + common: [ + { loot: 'xAttack' }, + { loot: 'Mago' }, + { loot: 'Aguav' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + ], + epic: [ + { loot: 'Meadow Plate' }, + { loot: 'Sky Plate' }, + ], +}, 2603000, [ + new DungeonBossPokemon('Parasect', 9900000, 50), + new DungeonBossPokemon('Breloom', 9900000, 50), + new DungeonBossPokemon('Shaymin (Land)', 11000000, 50), + new DungeonBossPokemon('Shaymin (Sky)', 11000000, 50, { hide: true, requirement: new ObtainedPokemonRequirement('Shaymin (Land)') }), + new DungeonBossPokemon('Bulbasaur (Rose)', 16000000, 100, { + hide: true, + requirement: new MultiRequirement([ + new ClearDungeonRequirement(10, GameConstants.getDungeonIndex('Flower Paradise')), + new SpecialEventRequirement('Golden Week'), + ]) + }), + new DungeonBossPokemon('Vivillon (Garden)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 26), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 27, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Garden)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 96500, 230); +dungeonList['Snowpoint Temple'] = new Dungeon('Snowpoint Temple', ['Golbat', 'Sneasel', 'Smoochum'], { + common: [ + { loot: 'Token_collector', weight: 2 }, + { loot: 'Aspear' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'White Shard' }, + ], + epic: [{ loot: 'Blank Plate' }], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Never_Melt_Ice' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(350, GameConstants.getDungeonIndex('Snowpoint Temple')) }], +}, 2603000, [ + new DungeonBossPokemon('Steelix', 10000000, 100), + new DungeonBossPokemon('Jynx', 10000000, 100), + new DungeonBossPokemon('Regigigas', 11000000, 100), +], 96500, 230); +dungeonList['Stark Mountain'] = new Dungeon('Stark Mountain', [ + { pokemon: 'Fearow', options: { weight: 4.4 } }, + { pokemon: 'Golbat', options: { weight: 4.4 } }, + { pokemon: 'Graveler', options: { weight: 4.4 } }, + { pokemon: 'Weezing', options: { weight: 4.4 } }, + { pokemon: 'Rhyhorn', options: { weight: 4.4 } }, + { pokemon: 'Rhydon', options: { weight: 4.4 } }, + { pokemon: 'Slugma', options: { weight: 4.4 } }, + { pokemon: 'Magcargo', options: { weight: 4.4 } }, + { pokemon: 'Numel', options: { weight: 4.4 } }, + { pokemon: 'Machoke', options: { weight: 4.4 } }, + new DungeonTrainer('Dragon Tamer', [new GymPokemon('Dragonite', 2603000, 60)], { weight: 1 }, 'Darien'), + new DungeonTrainer('Commander', [ + new GymPokemon('Bronzong', 2603000, 58), + new GymPokemon('Golbat', 2603000, 58), + new GymPokemon('Purugly', 2603000, 60), + ], { weight: 1 }, 'Mars', '(mars)'), + new DungeonTrainer('Commander', [ + new GymPokemon('Bronzong', 2603000, 58), + new GymPokemon('Golbat', 2603000, 58), + new GymPokemon('Skuntank', 2603000, 60), + ], { weight: 1 }, 'Jupiter', '(jupiter)'), + new DungeonTrainer('Ace Duo', [ + new GymPokemon('Primeape', 2603000, 58), + new GymPokemon('Banette', 2603000, 59), + new GymPokemon('Electabuzz', 2603000, 58), + new GymPokemon('Jumpluff', 2603000, 58), + new GymPokemon('Ampharos', 2603000, 59), + new GymPokemon('Onix', 2603000, 58), + ], { weight: 1 }, 'Keenan & Kassandra'), + new DungeonTrainer('Ace Duo', [ + new GymPokemon('Pupitar', 2603000, 58), + new GymPokemon('Torterra', 2603000, 61), + new GymPokemon('Drapion', 2603000, 61), + ], { weight: 1 }, 'Stefan & Jasmin'), + new DungeonTrainer('Fight & Flight', [ + new GymPokemon('Staravia', 2603000, 55), + new GymPokemon('Fearow', 2603000, 57), + new GymPokemon('Noctowl', 2603000, 59), + new GymPokemon('Breloom', 2603000, 58), + new GymPokemon('Toxicroak', 2603000, 58), + ], { weight: 1 }, 'Krystal & Ray'), + new DungeonTrainer('Ace Duo', [ + new GymPokemon('Glalie', 2603000, 59), + new GymPokemon('Crobat', 2603000, 60), + new GymPokemon('Luxray', 2603000, 58), + new GymPokemon('Ursaring', 2603000, 59), + new GymPokemon('Gliscor', 2603000, 58), + ], { weight: 1 }, 'Abel & Monique'), + new DungeonTrainer('Melded Minds', [ + new GymPokemon('Lunatone', 2603000, 57), + new GymPokemon('Gardevoir', 2603000, 59), + new GymPokemon('Solrock', 2603000, 57), + new GymPokemon('Gallade', 2603000, 59), + ], { weight: 1 }, 'Chelsey & Sterling', '(both)'), + new DungeonTrainer('Dragon Warriors', [ + new GymPokemon('Raticate', 2603000, 57), + new GymPokemon('Drifblim', 2603000, 58), + new GymPokemon('Shiftry', 2603000, 59), + new GymPokemon('Bagon', 2603000, 57), + new GymPokemon('Shelgon', 2603000, 57), + new GymPokemon('Vibrava', 2603000, 57), + ], { weight: 1 }, 'Harlan & Kenny'), + new DungeonTrainer('Ace Duo', [ + new GymPokemon('Loudred', 2603000, 58), + new GymPokemon('Rampardos', 2603000, 59), + new GymPokemon('Pelipper', 2603000, 58), + new GymPokemon('Wigglytuff', 2603000, 58), + new GymPokemon('Gardevoir', 2603000, 59), + new GymPokemon('Medicham', 2603000, 58), + ], { weight: 1 }, 'Skylar & Narasha'), + new DungeonTrainer('Hidden Dragons', [ + new GymPokemon('Gible', 2603000, 57), + new GymPokemon('Gabite', 2603000, 57), + new GymPokemon('Dragonair', 2603000, 57), + new GymPokemon('Machamp', 2603000, 60), + ], { weight: 1 }, 'Drake & Jarrett'), +], { + common: [ + { loot: 'Token_collector', weight: 2 }, + { loot: 'Rawst' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Grey Shard' }, + ], + epic: [ + { loot: 'Flame Plate' }, + { loot: 'Iron Plate' }, + ], + legendary: [ + { loot: 'Metal_Powder' }, + { loot: 'Star Piece', weight: 2 }, + { loot: 'Charcoal' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 2603000, [ + new DungeonBossPokemon('Skarmory', 10000000, 100), + new DungeonBossPokemon('Camerupt', 10000000, 100), + new DungeonBossPokemon('Heatran', 11000000, 100), +], 96500, 230); +// Unova Dungeons +dungeonList['Floccesy Ranch'] = new Dungeon('Floccesy Ranch', [ + { pokemon: 'Psyduck', options: { weight: 2 } }, + { pokemon: 'Mareep', options: { weight: 2 } }, + { pokemon: 'Azurill', options: { weight: 2 } }, + { pokemon: 'Patrat', options: { weight: 2 } }, + { pokemon: 'Lillipup', options: { weight: 2 } }, + { pokemon: 'Pidove', options: { weight: 2 } }, + new DungeonTrainer('Lass', [ + new GymPokemon('Purrloin', 126500, 6), + new GymPokemon('Sewaddle', 126500, 6), + ], { weight: 1 }, 'Molly'), + new DungeonTrainer('Janitor', [ + new GymPokemon('Lillipup', 126500, 6), + new GymPokemon('Mareep', 126500, 6), + ], { weight: 1 }, 'Orville'), + new DungeonTrainer('Youngster', [ + new GymPokemon('Patrat', 126500, 6), + new GymPokemon('Psyduck', 126500, 6), + ], { weight: 1 }, 'Kenny'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Ultraball' }, + { loot: 'Cheri' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Nanab' }, + { loot: 'Wepear' }, + ], +}, 2503000, [new DungeonBossPokemon('Riolu', 13000000, 100)], 126500, 20); +dungeonList['Liberty Garden'] = new Dungeon('Liberty Garden', ['Vulpix', 'Sunkern', 'Abra', 'Wingull', 'Pidove', 'Sentret'], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Figy', weight: 2 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Green Shard' }, + ], + epic: [ + { loot: 'Flame Plate' }, + { loot: 'Mind Plate' }, + ], +}, 2703000, [ + new DungeonBossPokemon('Chimecho', 14000000, 100), + new DungeonBossPokemon('Kadabra', 14000000, 100), + new DungeonBossPokemon('Victini', 14000000, 100), +], 136500, 20); +dungeonList['Castelia Sewers'] = new Dungeon('Castelia Sewers', [ + { pokemon: 'Rattata', options: { weight: 5.6 } }, + { pokemon: 'Zubat', options: { weight: 5.6 } }, + { pokemon: 'Grimer', options: { weight: 5.6 } }, + { pokemon: 'Muk', options: { weight: 5.6 } }, + { pokemon: 'Trubbish', options: { weight: 5.6 } }, + new DungeonTrainer('Janitor', [ + new GymPokemon('Lillipup', 146500, 16), + new GymPokemon('Trubbish', 146500, 16), + ], { weight: 1 }, 'Felix'), + new DungeonTrainer('Doctor', [new GymPokemon('Sewaddle', 146500, 17)], { weight: 1 }, 'Heath'), + new DungeonTrainer('Worker', [new GymPokemon('Drilbur', 146500, 17)], { weight: 1 }, 'Zack', '(male)'), + new DungeonTrainer('Worker', [new GymPokemon('Timburr', 146500, 17)], { weight: 1 }, 'Scott', '(male)'), + new DungeonTrainer('Scientist', [new GymPokemon('Grimer', 146500, 17)], { weight: 1 }, 'Caroline', '(female)'), + new DungeonTrainer('Scientist', [new GymPokemon('Magnemite', 146500, 17)], { weight: 1 }, 'Clarke', '(male)'), + new DungeonTrainer('Janitor', [ + new GymPokemon('Marill', 146500, 31), + new GymPokemon('Cinccino', 146500, 31), + ], { weight: 1 }, 'Brady'), +], { + common: [ + { loot: 'xClick', weight: 2 }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [ + { loot: 'Toxic Plate' }, + { loot: 'Mind Plate' }, + ], + legendary: [ + { loot: 'Revive' }, + { loot: 'Rare Bone' }, + { loot: 'LargeRestore' }, + ], + mythic: [{ loot: 'Heart Scale' }], +}, 2603000, [ + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Sandile', 15000000, 16)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Scraggy', 15000000, 16)], { weight: 1 }, undefined, '(female)'), +], 146500, 4); +dungeonList['Relic Passage'] = new Dungeon('Relic Passage', [ + { pokemon: 'Rattata', options: { weight: 8 } }, + { pokemon: 'Raticate', options: { weight: 8 } }, + { pokemon: 'Roggenrola', options: { weight: 8 } }, + { pokemon: 'Woobat', options: { weight: 8 } }, + { pokemon: 'Timburr', options: { weight: 8 } }, + new DungeonTrainer('Scientist', [new GymPokemon('Grimer', 176500, 18)], { weight: 1 }, 'Terrance', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Venipede', 176500, 17), + new GymPokemon('Koffing', 176500, 17), + ], { weight: 1 }, 'Lumina', '(female)'), + new DungeonTrainer('Backpacker', [new GymPokemon('Herdier', 176500, 18)], { weight: 1 }, 'Kendall', '(male)'), + new DungeonTrainer('Backpacker', [new GymPokemon('Sandslash', 176500, 32)], { weight: 1 }, 'Eileen', '(female)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Drilbur', 176500, 31), + new GymPokemon('Roggenrola', 176500, 31), + ], { weight: 1 }, 'Keith'), + new DungeonTrainer('Backpacker', [new GymPokemon('Raticate', 176500, 32)], { weight: 1 }, 'Randall', '(male)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Roggenrola', 176500, 31), + new GymPokemon('Timburr', 176500, 31), + ], { weight: 1 }, 'Tobias'), + new DungeonTrainer('Psychic', [new GymPokemon('Swoobat', 176500, 33)], { weight: 1 }, 'Tully', '(male)'), + new DungeonTrainer('Backpacker', [new GymPokemon('Watchog', 176500, 32)], { weight: 1 }, 'Annie', '(female)'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Baltoy', 176500, 32), + new GymPokemon('Yamask', 176500, 32), + ], { weight: 1 }, 'Ena', '(female)'), +], { + common: [ + { loot: 'Lucky_egg', weight: 2 }, + { loot: 'Dowsing_machine' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [{ loot: 'Stone Plate' }], + legendary: [{ loot: 'Rock_Incense' }], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Relic Passage')) }], +}, 3203000, [ + new DungeonBossPokemon('Onix', 21000000, 100), + new DungeonBossPokemon('Drilbur', 21000000, 100), +], 156500, 5); +dungeonList['Relic Castle'] = new Dungeon('Relic Castle', [ + { pokemon: 'Sandshrew', options: { weight: 1.33 } }, + { pokemon: 'Sandslash', options: { weight: 1.33 } }, + { pokemon: 'Sandile', options: { weight: 1.33 } }, + { pokemon: 'Baltoy', options: { weight: 1.33 } }, + { pokemon: 'Krokorok', options: { weight: 1.33 } }, + { pokemon: 'Yamask', options: { weight: 1.33 } }, + new DungeonTrainer('Psychic', [new GymPokemon('Gothita', 156500, 23)], { weight: 1 }, 'Dua', '(female)'), + new DungeonTrainer('Psychic', [new GymPokemon('Solosis', 156500, 23)], { weight: 1 }, 'Low', '(male)'), +], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Mago', weight: 2 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [ + { loot: 'Earth Plate' }, + { loot: 'Insect Plate' }, + { loot: 'Flame Plate' }, + ], + legendary: [ + { loot: 'Revive' }, + { loot: 'Smooth Rock' }, + { loot: 'LargeRestore', weight: 2 }, + ], + mythic: [ + { loot: 'Heart Scale' }, + { loot: 'Darmanitan (Zen)', ignoreDebuff: true }, + ], +}, 2803000, [ + new DungeonTrainer('Psychic', [new GymPokemon('Sigilyph', 16000000, 23)], { weight: 2 }, 'Perry', '(male)'), + new DungeonBossPokemon('Volcarona', 21000000, 100, { requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Relic Passage')) }), + new DungeonBossPokemon('Vivillon (Sandstorm)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 24), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 25, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Sandstorm)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 166500, 25); +dungeonList['Lostlorn Forest'] = new Dungeon('Lostlorn Forest', [ + { pokemon: 'Roselia', options: { weight: 2.29 } }, + { pokemon: 'Combee', options: { weight: 2.29 } }, + { pokemon: 'Sewaddle', options: { weight: 2.29 } }, + { pokemon: 'Venipede', options: { weight: 2.29 } }, + { pokemon: 'Cottonee', options: { weight: 2.29 } }, + { pokemon: 'Petilil', options: { weight: 2.29 } }, + { pokemon: 'Vespiquen', options: { weight: 2.29, hide: true, requirement: new ObtainedPokemonRequirement('Vespiquen') } }, + new DungeonTrainer('Pokémon Breeder', [ + new GymPokemon('Tranquill', 166500, 24), + new GymPokemon('Liepard', 166500, 24), + ], { weight: 1 }, 'Galen', '(male)'), + new DungeonTrainer('Pokémon Ranger', [new GymPokemon('Trubbish', 166500, 26)], { weight: 1 }, 'Serenity', '(female)'), + new DungeonTrainer('Pokémon Ranger', [new GymPokemon('Emolga', 166500, 26)], { weight: 1 }, 'Forrest', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Larvesta', 166500, 51), + new GymPokemon('Pinsir', 166500, 51), + new GymPokemon('Heracross', 166500, 51), + new GymPokemon('Leavanny', 166500, 51), + new GymPokemon('Scolipede', 166500, 51), + ], { weight: 1 }, 'Murphy', '(male)'), +], { + common: [ + { loot: 'Iapapa' }, + { loot: 'xClick', weight: 2 }, + { loot: 'Greatball', weight: 2 }, + { loot: 'Foongus' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Lime Shard' }, + ], + legendary: [{ loot: 'Zoroark', requirement: new ClearDungeonRequirement(50, GameConstants.getDungeonIndex('Lostlorn Forest')) }], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Lostlorn Forest')) }], +}, 3003000, [ + new DungeonBossPokemon('Heracross', 18000000, 100), + new DungeonBossPokemon('Pinsir', 18000000, 100), + new DungeonBossPokemon('Emolga', 19000000, 100), +], 176500, 16); +dungeonList['Chargestone Cave'] = new Dungeon('Chargestone Cave', [ + { pokemon: 'Nosepass', options: { weight: 8.8 } }, + { pokemon: 'Boldore', options: { weight: 8.8 } }, + { pokemon: 'Joltik', options: { weight: 8.8 } }, + { pokemon: 'Ferroseed', options: { weight: 8.8 } }, + { pokemon: 'Klink', options: { weight: 8.8 } }, + new DungeonTrainer('Guitarist', [new GymPokemon('Emolga', 186500, 30)], { weight: 1 }, 'Anna', '(female)'), + new DungeonTrainer('Scientist', [new GymPokemon('Magneton', 186500, 30)], { weight: 1 }, 'Ronald', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Klink', 186500, 33), + new GymPokemon('Unfezant', 186500, 33), + new GymPokemon('Sandslash', 186500, 33), + ], { weight: 1 }, 'Corky', '(male)'), + new DungeonTrainer('Pokémon Ranger', [new GymPokemon('Ampharos', 186500, 34)], { weight: 1 }, 'Louis', '(male)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Aron', 186500, 32), + new GymPokemon('Nosepass', 186500, 32), + ], { weight: 1 }, 'Otto'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Minccino', 186500, 33), + new GymPokemon('Excadrill', 186500, 33), + ], { weight: 1 }, 'Briana', '(female)'), + new DungeonTrainer('Doctor', [ + new GymPokemon('Solosis', 186500, 32), + new GymPokemon('Gothita', 186500, 32), + ], { weight: 1 }, 'Kit'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Joltik', 186500, 32), + new GymPokemon('Golbat', 186500, 32), + ], { weight: 1 }, 'Lumi', '(female)'), + new DungeonTrainer('Guitarist', [new GymPokemon('Zebstrika', 186500, 33)], { weight: 1 }, 'Beverly', '(female)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Onix', 186500, 32), + new GymPokemon('Boldore', 186500, 32), + ], { weight: 1 }, 'Jeremy'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Stoutland', 186500, 33), + new GymPokemon('Krokorok', 186500, 33), + new GymPokemon('Ferroseed', 186500, 33), + ], { weight: 1 }, 'Vicki', '(female)'), +], { + common: [ + { loot: 'Lucky_egg', weight: 2 }, + { loot: 'Dowsing_machine', weight: 2 }, + { loot: 'Aguav' }, + ], + rare: [{ loot: 'Yellow Shard' }], + epic: [ + { loot: 'Zap Plate' }, + { loot: 'Timerball' }, + ], + legendary: [ + { loot: 'Star Piece', weight: 2 }, + { loot: 'Magnet' }, + { loot: 'Revive' }, + { loot: 'LargeRestore' }, + ], +}, 3403000, [ + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Tirtouga', 12000000, 34), + new GymPokemon('Magmar', 12000000, 34), + ], { weight: 1 }, 'Mary', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Archen', 12000000, 34), + new GymPokemon('Electabuzz', 12000000, 34), + ], { weight: 1 }, 'Shaye', '(male)'), + new DungeonBossPokemon('Drilbur', 22000000, 100), + new DungeonBossPokemon('Tynamo', 22000000, 100), +], 186500, 6); +dungeonList['Mistralton Cave'] = new Dungeon('Mistralton Cave', [ + { pokemon: 'Boldore', options: { weight: 4 } }, + { pokemon: 'Woobat', options: { weight: 4 } }, + { pokemon: 'Aron', options: { weight: 4 } }, + { pokemon: 'Lairon', options: { weight: 4 } }, + new DungeonTrainer('Hiker', [new GymPokemon('Boldore', 196500, 32)], { weight: 1 }, 'Shelby'), + new DungeonTrainer('Hiker', [new GymPokemon('Onix', 196500, 32)], { weight: 1 }, 'Jebediah'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Tirtouga', 196500, 33), + new GymPokemon('Axew', 196500, 33), + ], { weight: 1 }, 'Geoff', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Archen', 196500, 33), + new GymPokemon('Axew', 196500, 33), + ], { weight: 1 }, 'Belle', '(female)'), +], { + common: [ + { loot: 'xClick', weight: 2 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Grey Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Draco Plate' }, + { loot: 'Fist Plate' }, + { loot: 'Iron Plate' }, + ], + legendary: [ + { loot: 'Duskball' }, + { loot: 'LargeRestore' }, + ], +}, 3603000, [ + new DungeonBossPokemon('Drilbur', 23000000, 100), + new DungeonBossPokemon('Axew', 24000000, 100), + new DungeonBossPokemon('Cobalion', 25000000, 100, { + requirement: new QuestLineStepCompletedRequirement('Swords of Justice', 21), + }), +], 196500, 6); +dungeonList['Celestial Tower'] = new Dungeon('Celestial Tower', [ + { pokemon: 'Golbat', options: { weight: 8 } }, + { pokemon: 'Haunter', options: { weight: 8 } }, + { pokemon: 'Elgyem', options: { weight: 8 } }, + { pokemon: 'Misdreavus', options: { weight: 8 } }, + new DungeonTrainer('Psychic', [new GymPokemon('Musharna', 206500, 36)], { weight: 1 }, 'Joyce', '(female)'), + new DungeonTrainer('School Kid', [new GymPokemon('Litwick', 206500, 35)], { weight: 1 }, 'Alberta', '(female)'), + new DungeonTrainer('Pokéfan', [new GymPokemon('Clefairy', 206500, 35)], { weight: 1 }, 'Jude', '(male)'), + new DungeonTrainer('Pokéfan', [new GymPokemon('Cubchoo', 206500, 35)], { weight: 1 }, 'Georgia', '(female)'), + new DungeonTrainer('Psychic', [new GymPokemon('Espeon', 206500, 36)], { weight: 1 }, 'Micki', '(male)'), + new DungeonTrainer('Nurse', [new GymPokemon('Leavanny', 206500, 35)], { weight: 1 }, 'Dixie'), + new DungeonTrainer('Socialite', [new GymPokemon('Roselia', 206500, 35)], { weight: 1 }, 'Grace'), + new DungeonTrainer('Gentleman', [new GymPokemon('Umbreon', 206500, 35)], { weight: 1 }, 'Daniel'), +], { + common: [ + { loot: 'Lucky_egg', weight: 2 }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Spooky Plate' }, + { loot: 'Mind Plate' }, + ], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Twisted_Spoon' }, + ], +}, 3803000, [ + new DungeonBossPokemon('Litwick', 25000000, 100), + new DungeonTrainer('Psychic', [ + new GymPokemon('Elgyem', 14000000, 35), + new GymPokemon('Duosion', 14000000, 35), + ], { weight: 1 }, 'Bryce', '(male)'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Yamask', 14000000, 35), + new GymPokemon('Gothorita', 14000000, 35), + ], { weight: 1 }, 'Sarah', '(female)'), +], 206500, 7); +dungeonList['Reversal Mountain'] = new Dungeon('Reversal Mountain', [ + { pokemon: 'Skarmory', options: { weight: 5.2 } }, + { pokemon: 'Numel', options: { weight: 5.2 } }, + { pokemon: 'Camerupt', options: { weight: 5.2 } }, + { pokemon: 'Spoink', options: { weight: 5.2 } }, + { pokemon: 'Grumpig', options: { weight: 5.2 } }, + { pokemon: 'Trapinch', options: { weight: 5.2 } }, + { pokemon: 'Drifblim', options: { weight: 5.2 } }, + { pokemon: 'Skorupi', options: { weight: 5.2 } }, + { pokemon: 'Boldore', options: { weight: 5.2 } }, + { pokemon: 'Woobat', options: { weight: 5.2 } }, + new DungeonTrainer('Cyclist', [new GymPokemon('Zebstrika', 226500, 37)], { weight: 1 }, 'Jeremiah', '(male)'), + new DungeonTrainer('Cyclist', [new GymPokemon('Unfezant', 226500, 37)], { weight: 1 }, 'Adalaide', '(female)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Gurdurr', 226500, 37), + new GymPokemon('Crustle', 226500, 37), + ], { weight: 1 }, 'Markus'), + new DungeonTrainer('Backpacker', [ + new GymPokemon('Golbat', 226500, 37), + new GymPokemon('Swanna', 226500, 37), + ], { weight: 1 }, 'Kiyo', '(male)'), + new DungeonTrainer('Doctor', [new GymPokemon('Swoobat', 226500, 38)], { weight: 1 }, 'Derek'), + new DungeonTrainer('Backpacker', [ + new GymPokemon('Golbat', 226500, 37), + new GymPokemon('Darmanitan', 226500, 37), + ], { weight: 1 }, 'Kumiko', '(female)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Boldore', 226500, 37), + new GymPokemon('Excadrill', 226500, 37), + ], { weight: 1 }, 'Jared'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Vibrava', 226500, 39), + new GymPokemon('Camerupt', 226500, 39), + ], { weight: 1 }, 'Ray', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Grumpig', 226500, 37), + new GymPokemon('Drifblim', 226500, 37), + ], { weight: 1 }, 'Cora', '(female)'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Gurdurr', 226500, 37), + new GymPokemon('Scraggy', 226500, 37), + new GymPokemon('Scraggy', 226500, 37), + ], { weight: 1 }, 'Corey'), + new DungeonTrainer('Battle Girl', [ + new GymPokemon('Riolu', 226500, 37), + new GymPokemon('Gurdurr', 226500, 37), + new GymPokemon('Riolu', 226500, 37), + ], { weight: 1 }, 'Chan'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Banette', 226500, 38), + new GymPokemon('Golduck', 226500, 38), + ], { weight: 1 }, 'Eliza', '(female)'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Watchog', 226500, 38), + new GymPokemon('Camerupt', 226500, 38), + ], { weight: 1 }, 'Lewis', '(male)'), +], { + common: [ + { loot: 'Persim', weight: 4 }, + { loot: 'Dowsing_machine', weight: 2 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Grey Shard' }, + ], + epic: [ + { loot: 'Iron Plate' }, + { loot: 'Flame Plate' }, + ], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Metal_Powder' }, + { loot: 'Star Piece' }, + ], +}, 4003000, [ + new DungeonBossPokemon('Cacturne', 24000000, 100), + new DungeonBossPokemon('Vibrava', 24000000, 100), + new DungeonBossPokemon('Excadrill', 26000000, 100), + new DungeonBossPokemon('Heatran', 30000000, 100, { hide: true, requirement: new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion) }), +], 226500, 14); +dungeonList['Seaside Cave'] = new Dungeon('Seaside Cave', [ + { pokemon: 'Golduck', options: { weight: 3.5 } }, + { pokemon: 'Seel', options: { weight: 3.5 } }, + { pokemon: 'Shellder', options: { weight: 3.5 } }, + { pokemon: 'Luvdisc', options: { weight: 3.5 } }, + { pokemon: 'Boldore', options: { weight: 3.5 } }, + { pokemon: 'Woobat', options: { weight: 3.5 } }, + { pokemon: 'Tynamo', options: { weight: 3.5 } }, + { pokemon: 'Frillish', options: { weight: 3.5 } }, + new DungeonTrainer('Battle Girl', [new GymPokemon('Heracross', 246500, 47)], { weight: 1 }, 'Tia'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Vibrava', 246500, 46), + new GymPokemon('Gligar', 246500, 46), + ], { weight: 1 }, 'Johan', '(male)'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Onix', 246500, 46), + new GymPokemon('Lairon', 246500, 46), + ], { weight: 1 }, 'Mikiko', '(female)'), + new DungeonTrainer('Black Belt', [new GymPokemon('Scrafty', 246500, 47)], { weight: 1 }, 'Drago'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Roggenrola', 246500, 44), + new GymPokemon('Roggenrola', 246500, 44), + new GymPokemon('Roggenrola', 246500, 44), + new GymPokemon('Roggenrola', 246500, 44), + ], { weight: 1 }, 'Rocky'), + new DungeonTrainer('Battle Girl', [new GymPokemon('Mienfoo', 246500, 47)], { weight: 1 }, 'Maki'), + new DungeonTrainer('Black Belt', [new GymPokemon('Gurdurr', 246500, 47)], { weight: 1 }, 'Rich'), +], { + common: [ + { loot: 'Token_collector', weight: 2 }, + { loot: 'Lucky_egg', weight: 2 }, + { loot: 'Persim' }, + ], + rare: [{ loot: 'Blue Shard' }], + epic: [ + { loot: 'Insect Plate' }, + { loot: 'Stone Plate' }, + { loot: 'Diveball' }, + { loot: 'Lureball' }, + ], + legendary: [{ loot: 'LargeRestore' }], + mythic: [ + { loot: 'Heart Scale' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Seaside Cave')) }, + ], +}, 4203000, [ + new DungeonBossPokemon('Eelektrik', 28000000, 100), + new DungeonBossPokemon('Crustle', 28000000, 100), +], 246500, 21); +dungeonList['Plasma Frigate'] = new Dungeon('Plasma Frigate', [ + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Watchog', 257500, 46), + new GymPokemon('Garbodor', 257500, 46), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Golbat', 257500, 46), + new GymPokemon('Drapion', 257500, 46), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Seviper', 257500, 46), + new GymPokemon('Garbodor', 257500, 46), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Krookodile', 257500, 47)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Drapion', 257500, 47)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Garbodor', 257500, 47)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Whirlipede', 257500, 46), + new GymPokemon('Watchog', 257500, 46), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Pawniard', 257500, 45), + new GymPokemon('Pawniard', 257500, 45), + new GymPokemon('Pawniard', 257500, 45), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Scraggy', 257500, 46), + new GymPokemon('Liepard', 257500, 46), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Weezing', 257500, 47)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Krokorok', 257500, 46), + new GymPokemon('Raticate', 257500, 46), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Deino', 257500, 45), + new GymPokemon('Deino', 257500, 45), + new GymPokemon('Sneasel', 257500, 45), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Scraggy', 257500, 45), + new GymPokemon('Krokorok', 257500, 45), + new GymPokemon('Golbat', 257500, 45), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Scrafty', 257500, 47)], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + ], + epic: [ + { loot: 'Iron Plate' }, + { loot: 'Zap Plate' }, + { loot: 'Icicle Plate' }, + ], + legendary: [{ loot: 'Revive' }], + mythic: [{ loot: 'Max Revive' }], +}, 4603000, [ + new DungeonTrainer('Team Plasma', [ + new GymPokemon('Cryogonal', 12000000, 48), + new GymPokemon('Cryogonal', 12000000, 48), + new GymPokemon('Weavile', 13000000, 50), + ], { weight: 1 }, 'Zinzolin', '(zinzolin)'), +], 257500, 20); +dungeonList['Giant Chasm'] = new Dungeon('Giant Chasm', [ + { pokemon: 'Clefairy', options: { weight: 4 } }, + { pokemon: 'Poliwag', options: { weight: 4 } }, + { pokemon: 'Seel', options: { weight: 4 } }, + { pokemon: 'Tangela', options: { weight: 4 } }, + { pokemon: 'Delibird', options: { weight: 4 } }, + { pokemon: 'Sneasel', options: { weight: 4 } }, + { pokemon: 'Piloswine', options: { weight: 4 } }, + { pokemon: 'Pelipper', options: { weight: 4 } }, + { pokemon: 'Lunatone', options: { weight: 4 } }, + { pokemon: 'Solrock', options: { weight: 4 } }, + { pokemon: 'Vanillish', options: { weight: 4 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 4 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 4 } }, + { pokemon: 'Ditto', options: { weight: 4 } }, + { pokemon: 'Metang', options: { weight: 4 } }, + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Weezing', 266500, 46), + new GymPokemon('Muk', 266500, 46), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Scraggy', 266500, 46), + new GymPokemon('Scrafty', 266500, 46), + new GymPokemon('Whirlipede', 266500, 46), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Trubbish', 266500, 46), + new GymPokemon('Golbat', 266500, 46), + new GymPokemon('Garbodor', 266500, 46), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Skorupi', 266500, 45), + new GymPokemon('Foongus', 266500, 45), + new GymPokemon('Golbat', 266500, 45), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Krookodile', 266500, 47)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Doctor', [new GymPokemon('Leavanny', 266500, 49)], { weight: 1 }, 'Julius'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Scrafty', 266500, 47)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Scolipede', 266500, 47)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Trubbish', 266500, 46), + new GymPokemon('Zangoose', 266500, 46), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Grimer', 266500, 46), + new GymPokemon('Seviper', 266500, 46), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Raticate', 266500, 47), + new GymPokemon('Watchog', 266500, 47), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Krokorok', 266500, 47), + new GymPokemon('Krookodile', 266500, 47), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [new GymPokemon('Drapion', 266500, 47)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Deino', 266500, 45), + new GymPokemon('Deino', 266500, 45), + new GymPokemon('Sneasel', 266500, 45), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Plasma Grunt', [ + new GymPokemon('Koffing', 266500, 46), + new GymPokemon('Amoonguss', 266500, 46), + ], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'Aspear', weight: 4 }, + { loot: 'Lucky_incense', weight: 2 }, + { loot: 'Amoonguss' }, + ], + rare: [ + { loot: 'Crimson Shard' }, + { loot: 'White Shard' }, + ], + epic: [ + { loot: 'Icicle Plate' }, + { loot: 'Draco Plate' }, + { loot: 'Dread Plate' }, + ], + legendary: [ + { loot: 'Star Piece', weight: 2 }, + { loot: 'LargeRestore' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 4403000, [ + new DungeonTrainer('Team Plasma', [ + new GymPokemon('Cryogonal', 12000000, 49), + new GymPokemon('Cryogonal', 12000000, 49), + new GymPokemon('Weavile', 12500000, 51), + ], { weight: 1 }, 'Zinzolin', '(zinzolin)'), + new DungeonBossPokemon('Tangrowth', 30000000, 100, { hide: true, requirement: new TemporaryBattleRequirement('Ghetsis 2') }), + new DungeonBossPokemon('Audino', 32000000, 100, { hide: true, requirement: new TemporaryBattleRequirement('Ghetsis 2') }), + new DungeonBossPokemon('Mamoswine', 32000000, 100, { hide: true, requirement: new TemporaryBattleRequirement('Ghetsis 2') }), + new DungeonBossPokemon('Kyurem', 35000000, 100, { requirement: new MultiRequirement([ + new QuestLineCompletedRequirement('Hollow Truth and Ideals'), + new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion), + new OneFromManyRequirement([ + new QuestLineCompletedRequirement('Swords of Justice'), + new QuestLineStartedRequirement('Swords of Justice', GameConstants.AchievementOption.less), + ]), + ]) }), +], 266500, 22); +dungeonList['Cave of Being'] = new Dungeon('Cave of Being', ['Kadabra', 'Golbat', 'Woobat', 'Gurdurr', 'Graveler', 'Onix'], { + common: [ + { loot: 'xClick' }, + { loot: 'xAttack' }, + { loot: 'Lucky_egg' }, + { loot: 'Token_collector' }, + { loot: 'Dowsing_machine' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [{ loot: 'Mind Plate' }], +}, 4603000, [ + new DungeonBossPokemon('Uxie', 35000000, 100), + new DungeonBossPokemon('Mesprit', 35000000, 100), + new DungeonBossPokemon('Azelf', 35000000, 100), +], 286500, 20); +dungeonList['Abundant Shrine'] = new Dungeon('Abundant Shrine', [ + { pokemon: 'Vulpix', options: { weight: 1.45 } }, + { pokemon: 'Golduck', options: { weight: 1.45 } }, + { pokemon: 'Marill', options: { weight: 1.45 } }, + { pokemon: 'Azumarill', options: { weight: 1.45 } }, + { pokemon: 'Swablu', options: { weight: 1.45 } }, + { pokemon: 'Bronzor', options: { weight: 1.45 } }, + { pokemon: 'Cottonee', options: { weight: 1.45 } }, + { pokemon: 'Petilil', options: { weight: 1.45 } }, + { pokemon: 'Goldeen', options: { weight: 1.45 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 1.45 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 1.45 } }, + new DungeonTrainer('Youngster', [ + new GymPokemon('Skorupi', 306500, 39), + new GymPokemon('Seviper', 306500, 39), + ], { weight: 1 }, 'Wes'), + new DungeonTrainer('Twins', [ + new GymPokemon('Swablu', 306500, 38), + new GymPokemon('Swablu', 306500, 38), + ], { weight: 1 }, 'Rae & Ula'), + new DungeonTrainer('Lass', [ + new GymPokemon('Deerling (Spring)', 306500, 39), + new GymPokemon('Zangoose', 306500, 39), + ], { weight: 1 }, 'Lurleen'), + new DungeonTrainer('Youngster', [ + new GymPokemon('Karrablast', 306500, 37), + new GymPokemon('Shelmet', 306500, 37), + new GymPokemon('Joltik', 306500, 37), + new GymPokemon('Scolipede', 306500, 37), + ], { weight: 1 }, 'Jaye'), +], { + common: [ + { loot: 'Mago', weight: 3 }, + { loot: 'xClick', weight: 3 }, + { loot: 'Amoonguss' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Ochre Shard' }, + ], + legendary: [{ loot: 'LargeRestore' }], + mythic: [{ loot: 'Max Revive' }], +}, 4803000, [ + new DungeonBossPokemon('Bronzong', 38000000, 100), + new DungeonBossPokemon('Altaria', 38000000, 100), + new DungeonBossPokemon('Landorus', 42000000, 100), +], 306500, 14); +dungeonList['Victory Road Unova'] = new Dungeon('Victory Road Unova', [ + { pokemon: 'Poliwag', options: { weight: 5.57 } }, + { pokemon: 'Onix', options: { weight: 5.57 } }, + { pokemon: 'Marill', options: { weight: 5.57 } }, + { pokemon: 'Roselia', options: { weight: 5.57 } }, + { pokemon: 'Altaria', options: { weight: 5.57 } }, + { pokemon: 'Banette', options: { weight: 5.57 } }, + { pokemon: 'Buizel', options: { weight: 5.57 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 5.57 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 5.57 } }, + { pokemon: 'Boldore', options: { weight: 5.57 } }, + { pokemon: 'Cottonee', options: { weight: 5.57 } }, + { pokemon: 'Petilil', options: { weight: 5.57 } }, + { pokemon: 'Tranquill', options: { weight: 5.57 } }, + { pokemon: 'Unfezant', options: { weight: 5.57 } }, + { pokemon: 'Gurdurr', options: { weight: 5.57 } }, + { pokemon: 'Druddigon', options: { weight: 5.57 } }, + { pokemon: 'Sawk', options: { weight: 5.57, hide: true, requirement: new ObtainedPokemonRequirement('Sawk') } }, + { pokemon: 'Throh', options: { weight: 5.57, hide: true, requirement: new ObtainedPokemonRequirement('Throh') } }, + { pokemon: 'Deino', options: { weight: 5.57, hide: true, requirement: new ObtainedPokemonRequirement('Deino') } }, + { pokemon: 'Zweilous', options: { weight: 5.57, hide: true, requirement: new ObtainedPokemonRequirement('Zweilous') } }, + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Golurk', 326500, 55), + new GymPokemon('Sigilyph', 326500, 55), + ], { weight: 1 }, 'Billy', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Drifblim', 326500, 55), + new GymPokemon('Claydol', 326500, 55), + ], { weight: 1 }, 'Jamie', '(female)'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Lampent', 326500, 54), + new GymPokemon('Musharna', 326500, 54), + ], { weight: 1 }, 'Alia', '(female)'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Metang', 326500, 54), + new GymPokemon('Cofagrigus', 326500, 54), + ], { weight: 1 }, 'Al', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Braviary', 326500, 55), + new GymPokemon('Carracosta', 326500, 55), + ], { weight: 1 }, 'Claude', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Mandibuzz', 326500, 55), + new GymPokemon('Archeops', 326500, 55), + ], { weight: 1 }, 'Cecile', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Darmanitan', 326500, 55), + new GymPokemon('Tangrowth', 326500, 55), + ], { weight: 1 }, 'Chandra', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Whimsicott', 326500, 55), + new GymPokemon('Unfezant', 326500, 55), + ], { weight: 1 }, 'Beckett', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Swoobat', 326500, 55), + new GymPokemon('Lilligant', 326500, 55), + ], { weight: 1 }, 'Shelly', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Sigilyph', 326500, 55), + new GymPokemon('Crobat', 326500, 55), + ], { weight: 1 }, 'Cathy', '(female)'), + new DungeonTrainer('Doctor', [new GymPokemon('Clefable', 326500, 54)], { weight: 1 }, 'Logan'), + new DungeonTrainer('Backpacker', [new GymPokemon('Sawsbuck (Spring)', 326500, 54)], { weight: 1 }, 'Mae', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Swanna', 326500, 55), + new GymPokemon('Ampharos', 326500, 55), + ], { weight: 1 }, 'Pierce', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Gigalith', 326500, 55), + new GymPokemon('Skarmory', 326500, 55), + ], { weight: 1 }, 'Abraham', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Heatmor', 326500, 55), + new GymPokemon('Galvantula', 326500, 55), + ], { weight: 1 }, 'Shanta', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Durant', 326500, 55), + new GymPokemon('Ferrothorn', 326500, 55), + ], { weight: 1 }, 'Webster', '(male)'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Electabuzz', 326500, 54), + new GymPokemon('Probopass', 326500, 54), + ], { weight: 1 }, 'Eddie', '(male)'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Magmar', 326500, 54), + new GymPokemon('Camerupt', 326500, 54), + ], { weight: 1 }, 'Elle', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Fraxure', 326500, 54), + new GymPokemon('Zweilous', 326500, 54), + new GymPokemon('Flygon', 326500, 54), + ], { weight: 1 }, 'Hugo', '(male)'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Pinsir', 326500, 54), + new GymPokemon('Heracross', 326500, 54), + ], { weight: 1 }, 'Martell'), + new DungeonTrainer('Battle Girl', [ + new GymPokemon('Throh', 326500, 54), + new GymPokemon('Sawk', 326500, 54), + ], { weight: 1 }, 'Chalina'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Zweilous', 326500, 55), + new GymPokemon('Eelektross', 326500, 55), + ], { weight: 1 }, 'Elmer', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Fraxure', 326500, 55), + new GymPokemon('Vanilluxe', 326500, 55), + ], { weight: 1 }, 'Caroll', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Zebstrika', 326500, 54), + new GymPokemon('Sawk', 326500, 54), + new GymPokemon('Starmie', 326500, 54), + ], { weight: 1 }, 'Portia', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Beartic', 326500, 54), + new GymPokemon('Throh', 326500, 54), + new GymPokemon('Golurk', 326500, 54), + ], { weight: 1 }, 'Sterling', '(male)'), +], { + common: [ + { loot: 'xClick', weight: 3 }, + { loot: 'xAttack', weight: 3 }, + { loot: 'Zoroark' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + ], + epic: [ + { loot: 'Quickball' }, + { loot: 'Timerball' }, + { loot: 'Duskball' }, + { loot: 'Nestball' }, + { loot: 'Repeatball' }, + ], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'LargeRestore' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 5003000, [ + new DungeonBossPokemon('Golurk', 44000000, 100), + new DungeonBossPokemon('Audino', 45000000, 100), + new DungeonBossPokemon('Terrakion', 45000000, 100, { + requirement: new QuestLineStepCompletedRequirement('Swords of Justice', 21), + }), +], 326500, 23); +dungeonList['Twist Mountain'] = new Dungeon('Twist Mountain', [ + { pokemon: 'Onix', options: { weight: 10.4 } }, + { pokemon: 'Boldore', options: { weight: 10.4 } }, + { pokemon: 'Woobat', options: { weight: 10.4 } }, + { pokemon: 'Gurdurr', options: { weight: 10.4 } }, + { pokemon: 'Beartic', options: { weight: 10.4 } }, + new DungeonTrainer('Worker', [ + new GymPokemon('Roggenrola', 356500, 60), + new GymPokemon('Graveler', 356500, 60), + new GymPokemon('Excadrill', 356500, 60), + ], { weight: 1 }, 'Cairn', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Tauros', 356500, 64), + new GymPokemon('Crobat', 356500, 64), + new GymPokemon('Carracosta', 356500, 64), + ], { weight: 1 }, 'Carter', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Glaceon', 356500, 63), + new GymPokemon('Bastiodon', 356500, 63), + new GymPokemon('Rhyperior', 356500, 63), + new GymPokemon('Drapion', 356500, 63), + ], { weight: 1 }, 'Julia', '(female)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Golett', 356500, 61), + new GymPokemon('Mamoswine', 356500, 61), + ], { weight: 1 }, 'Wade'), + new DungeonTrainer('Worker', [ + new GymPokemon('Geodude', 356500, 60), + new GymPokemon('Steelix', 356500, 60), + new GymPokemon('Boldore', 356500, 60), + ], { weight: 1 }, 'Gus', '(male)'), + new DungeonTrainer('Worker', [ + new GymPokemon('Machoke', 356500, 61), + new GymPokemon('Abomasnow', 356500, 61), + ], { weight: 1 }, 'Patton', '(ice)'), + new DungeonTrainer('Nurse', [new GymPokemon('Blissey', 356500, 62)], { weight: 1 }, 'Carol'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Gyarados', 356500, 64), + new GymPokemon('Kangaskhan', 356500, 64), + new GymPokemon('Archeops', 356500, 64), + ], { weight: 1 }, 'Chloris', '(female)'), + new DungeonTrainer('Worker', [new GymPokemon('Sigilyph', 356500, 62)], { weight: 1 }, 'Cliff', '(male)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Larvitar', 356500, 61), + new GymPokemon('Probopass', 356500, 61), + ], { weight: 1 }, 'Hunter'), + new DungeonTrainer('Worker', [ + new GymPokemon('Glalie', 356500, 61), + new GymPokemon('Beartic', 356500, 61), + ], { weight: 1 }, 'Victor', '(ice)'), + new DungeonTrainer('Worker', [ + new GymPokemon('Smoochum', 356500, 60), + new GymPokemon('Claydol', 356500, 60), + new GymPokemon('Kadabra', 356500, 60), + ], { weight: 1 }, 'Ryan', '(ice)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Weavile', 356500, 63), + new GymPokemon('Rampardos', 356500, 63), + new GymPokemon('Toxicroak', 356500, 63), + new GymPokemon('Aggron', 356500, 63), + ], { weight: 1 }, 'Zach', '(male)'), +], { + common: [ + { loot: 'Token_collector', weight: 3 }, + { loot: 'Lucky_incense', weight: 3 }, + { loot: 'Ultraball' }, + ], + rare: [{ loot: 'White Shard' }], + legendary: [ + { loot: 'Rare Bone', weight: 2 }, + { loot: 'Duskball' }, + { loot: 'LargeRestore' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Twist Mountain')) }], +}, 5203000, [ + new DungeonBossPokemon('Durant', 48000000, 100), + new DungeonBossPokemon('Cryogonal', 48000000, 100), + new DungeonBossPokemon('Heatmor', 48000000, 100), + new DungeonBossPokemon('Regigigas', 50000000, 100), +], 356500, 7); +dungeonList['Dragonspiral Tower'] = new Dungeon('Dragonspiral Tower', ['Dratini', 'Dragonair', 'Tranquill', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Vanillish', 'Sawsbuck (Spring)', 'Sawsbuck (Summer)', 'Sawsbuck (Autumn)', 'Sawsbuck (Winter)', 'Beartic', 'Mienfoo', 'Mienshao', 'Golett', 'Golurk'], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Razz' }, + { loot: 'Pinap' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [ + { loot: 'Draco Plate' }, + { loot: 'Zap Plate' }, + { loot: 'Flame Plate' }, + { loot: 'Icicle Plate' }, + { loot: 'Spooky Plate' }, + { loot: 'Splash Plate' }, + { loot: 'Iron Plate' }, + ], + legendary: [ + { loot: 'Star Piece', weight: 2 }, + { loot: 'Dragon_Fang' }, + { loot: 'LargeRestore' }, + ], + mythic: [ + { loot: 'Heart Scale' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Dragonspiral Tower')) }, + ], +}, 5203000, [ + new DungeonBossPokemon('Druddigon', 48000000, 100), + new DungeonBossPokemon('Dragonite', 48000000, 100), + new DungeonBossPokemon('Reshiram', 50000000, 100), + new DungeonBossPokemon('Zekrom', 50000000, 100), + new DungeonBossPokemon('Vivillon (Savanna)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 30), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 31, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Savanna)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 356500, 7); +dungeonList['Moor of Icirrus'] = new Dungeon('Moor of Icirrus', [ + { pokemon: 'Croagunk', options: { weight: 2.67 } }, + { pokemon: 'Palpitoad', options: { weight: 2.67 } }, + { pokemon: 'Karrablast', options: { weight: 2.67 } }, + { pokemon: 'Shelmet', options: { weight: 2.67 } }, + { pokemon: 'Stunfisk', options: { weight: 2.67 } }, + { pokemon: 'Barboach', options: { weight: 2.67 } }, + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Accelgor', 356500, 62), + new GymPokemon('Swalot', 356500, 62), + new GymPokemon('Kecleon', 356500, 62), + ], { weight: 1 }, 'Elaine', '(female)'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Escavalier', 356500, 62), + new GymPokemon('Skuntank', 356500, 62), + new GymPokemon('Carnivine', 356500, 62), + ], { weight: 1 }, 'Parker', '(male)'), + new DungeonTrainer('Fisherman', [ + new GymPokemon('Corphish', 356500, 60), + new GymPokemon('Poliwag', 356500, 60), + new GymPokemon('Stunfisk', 356500, 60), + ], { weight: 1 }, 'Eustace'), + new DungeonTrainer('Fisherman', [ + new GymPokemon('Poliwhirl', 356500, 60), + new GymPokemon('Whiscash', 356500, 60), + new GymPokemon('Politoed', 356500, 60), + ], { weight: 1 }, 'Arnold'), +], { + common: [ + { loot: 'xAttack', weight: 3 }, + { loot: 'Lucky_egg', weight: 3 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Ochre Shard' }, + ], + legendary: [ + { loot: 'Revive', weight: 2 }, + { loot: 'LargeRestore' }, + ], + mythic: [ + { loot: 'Heart Scale' }, + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Moor of Icirrus')) }, + ], +}, 5203000, [ + new DungeonBossPokemon('Seismitoad', 48000000, 100), + new DungeonBossPokemon('Whiscash', 48000000, 100), + new DungeonBossPokemon('Keldeo', 50000000, 100, { + hide: false, + requirement: new QuestLineCompletedRequirement('Swords of Justice'), + }), + new DungeonBossPokemon('Vivillon (Jungle)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 4), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 5, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Jungle)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 356500, 8); +dungeonList['Pledge Grove'] = new Dungeon('Pledge Grove', ['Fearow', 'Furret', 'Ledian', 'Sudowoodo', 'Stantler', 'Breloom', 'Sawsbuck (Spring)', 'Sawsbuck (Summer)', 'Sawsbuck (Autumn)', 'Sawsbuck (Winter)'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Splash Plate' }, + { loot: 'Fist Plate' }, + ], + legendary: [{ loot: 'Sharp_Beak' }], +}, 5203000, [ + new DungeonBossPokemon('Unfezant', 50000000, 100), + new DungeonBossPokemon('Politoed', 50000000, 100), + new DungeonBossPokemon('Keldeo (Resolute)', 52000000, 100), +], 356500, 8); +dungeonList['Pinwheel Forest'] = new Dungeon('Pinwheel Forest', [ + { pokemon: 'Goldeen', options: { weight: 5.42 } }, + { pokemon: 'Marill', options: { weight: 5.42 } }, + { pokemon: 'Yanma', options: { weight: 5.42 } }, + { pokemon: 'Vigoroth', options: { weight: 5.42 } }, + { pokemon: 'Toxicroak', options: { weight: 5.42 } }, + { pokemon: 'Gurdurr', options: { weight: 5.42 } }, + { pokemon: 'Tympole', options: { weight: 5.42 } }, + { pokemon: 'Palpitoad', options: { weight: 5.42 } }, + { pokemon: 'Swadloon', options: { weight: 5.42 } }, + { pokemon: 'Whirlipede', options: { weight: 5.42 } }, + { pokemon: 'Cottonee', options: { weight: 5.42 } }, + { pokemon: 'Petilil', options: { weight: 5.42 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 5.42 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 5.42 } }, + { pokemon: 'Sawk', options: { weight: 5.42, hide: true, requirement: new ObtainedPokemonRequirement('Sawk') } }, + { pokemon: 'Throh', options: { weight: 5.42, hide: true, requirement: new ObtainedPokemonRequirement('Throh') } }, + { pokemon: 'Yanmega', options: { weight: 5.42, hide: true, requirement: new ObtainedPokemonRequirement('Yanmega') } }, + new DungeonTrainer('Preschooler', [ + new GymPokemon('Wooper', 356500, 60), + new GymPokemon('Tympole', 356500, 60), + ], { weight: 1 }, 'Jojo', '(male)'), + new DungeonTrainer('Nursery Aide', [ + new GymPokemon('Exeggcute', 356500, 61), + new GymPokemon('Miltank', 356500, 61), + ], { weight: 1 }, 'Ethel'), + new DungeonTrainer('Preschooler', [ + new GymPokemon('Dratini', 356500, 59), + new GymPokemon('Gible', 356500, 59), + new GymPokemon('Bagon', 356500, 59), + ], { weight: 1 }, 'Samantha', '(female)'), + new DungeonTrainer('Preschooler', [ + new GymPokemon('Burmy (Plant)', 356500, 59), + new GymPokemon('Scyther', 356500, 59), + new GymPokemon('Paras', 356500, 59), + ], { weight: 1 }, 'José', '(male)'), + new DungeonTrainer('Twins', [ + new GymPokemon('Plusle', 356500, 60), + new GymPokemon('Minun', 356500, 60), + ], { weight: 1 }, 'Ally & Amy'), + new DungeonTrainer('Nursery Aide', [ + new GymPokemon('Chansey', 356500, 61), + new GymPokemon('Leavanny', 356500, 61), + ], { weight: 1 }, 'Rosalyn'), + new DungeonTrainer('Preschooler', [ + new GymPokemon('Pineco', 356500, 60), + new GymPokemon('Ferrothorn', 356500, 60), + ], { weight: 1 }, 'Ike', '(male)'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Sudowoodo', 356500, 62), + new GymPokemon('Gloom', 356500, 62), + new GymPokemon('Beartic', 356500, 62), + ], { weight: 1 }, 'Hillary', '(female)'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Weepinbell', 356500, 62), + new GymPokemon('Luxray', 356500, 62), + new GymPokemon('Ursaring', 356500, 62), + ], { weight: 1 }, 'Dwayne', '(male)'), + new DungeonTrainer('Youngster', [ + new GymPokemon('Mankey', 356500, 60), + new GymPokemon('Snubbull', 356500, 60), + new GymPokemon('Crawdaunt', 356500, 60), + ], { weight: 1 }, 'Keita'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Electrike', 356500, 62), + new GymPokemon('Rapidash', 356500, 62), + new GymPokemon('Farfetch\'d', 356500, 62), + ], { weight: 1 }, 'Ralph', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Crobat', 356500, 64), + new GymPokemon('Magmortar', 356500, 64), + new GymPokemon('Leafeon', 356500, 64), + ], { weight: 1 }, 'Rosaline', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Ludicolo', 356500, 64), + new GymPokemon('Electivire', 356500, 64), + new GymPokemon('Forretress', 356500, 64), + ], { weight: 1 }, 'Sinan', '(male)'), + new DungeonTrainer('Lass', [ + new GymPokemon('Nidoran(F)', 356500, 60), + new GymPokemon('Nidoran(M)', 356500, 60), + new GymPokemon('Nidoqueen', 356500, 60), + ], { weight: 1 }, 'Helia'), + new DungeonTrainer('Youngster', [ + new GymPokemon('Cascoon', 356500, 60), + new GymPokemon('Silcoon', 356500, 60), + new GymPokemon('Scolipede', 356500, 60), + ], { weight: 1 }, 'Henley'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Munchlax', 356500, 62), + new GymPokemon('Zebstrika', 356500, 62), + new GymPokemon('Kricketune', 356500, 62), + ], { weight: 1 }, 'Melita', '(female)'), + new DungeonTrainer('Youngster', [ + new GymPokemon('Phanpy', 356500, 60), + new GymPokemon('Doduo', 356500, 60), + new GymPokemon('Fearow', 356500, 60), + ], { weight: 1 }, 'Nicholas'), + new DungeonTrainer('School Kid', [ + new GymPokemon('Oddish', 356500, 60), + new GymPokemon('Tangela', 356500, 60), + new GymPokemon('Bellossom', 356500, 60), + ], { weight: 1 }, 'Millie', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Furret', 356500, 63), + new GymPokemon('Braviary', 356500, 63), + new GymPokemon('Seismitoad', 356500, 63), + ], { weight: 1 }, 'Kelsey', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Linoone', 356500, 63), + new GymPokemon('Mandibuzz', 356500, 63), + new GymPokemon('Toxicroak', 356500, 63), + ], { weight: 1 }, 'Kathrine', '(female)'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Tyrogue', 356500, 61), + new GymPokemon('Scrafty', 356500, 61), + new GymPokemon('Makuhita', 356500, 61), + ], { weight: 1 }, 'Kentaro'), + new DungeonTrainer('Battle Girl', [ + new GymPokemon('Tyrogue', 356500, 61), + new GymPokemon('Machop', 356500, 61), + new GymPokemon('Poliwrath', 356500, 61), + ], { weight: 1 }, 'Lee'), + new DungeonTrainer('School Kid', [ + new GymPokemon('Venonat', 356500, 60), + new GymPokemon('Yanma', 356500, 60), + new GymPokemon('Venomoth', 356500, 60), + ], { weight: 1 }, 'Keston', '(male)'), +], { + common: [ + { loot: 'Chesto', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Amoonguss' }, + { loot: 'Greatball' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [ + { loot: 'Meadow Plate' }, + { loot: 'Fist Plate' }, + ], + legendary: [ + { loot: 'Star Piece', weight: 2 }, + { loot: 'LargeRestore' }, + { loot: 'Nestball' }, + { loot: 'Miracle_Seed' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Pinwheel Forest')) }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(300, GameConstants.getDungeonIndex('Pinwheel Forest')) }, + ], +}, 5203000, [ + new DungeonBossPokemon('Scolipede', 48000000, 100), + new DungeonBossPokemon('Seismitoad', 48000000, 100), + new DungeonBossPokemon('Virizion', 48000000, 100, { + requirement: new QuestLineStepCompletedRequirement('Swords of Justice', 21), + }), +], 356500, 3); +dungeonList.Dreamyard = new Dungeon('Dreamyard', [ + { pokemon: 'Raticate', options: { weight: 4.67 } }, + { pokemon: 'Jigglypuff', options: { weight: 4.67 } }, + { pokemon: 'Golbat', options: { weight: 4.67 } }, + { pokemon: 'Watchog', options: { weight: 4.67 } }, + { pokemon: 'Liepard', options: { weight: 4.67 } }, + { pokemon: 'Munna', options: { weight: 4.67 } }, + new DungeonTrainer('Psychic', [ + new GymPokemon('Hypno', 356500, 62), + new GymPokemon('Dusclops', 356500, 62), + ], { weight: 1 }, 'Nandor', '(male)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Gastly', 356500, 63), + new GymPokemon('Skuntank', 356500, 63), + ], { weight: 1 }, 'Athena', '(female)'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Chingling', 356500, 62), + new GymPokemon('Mr. Mime', 356500, 62), + ], { weight: 1 }, 'Olesia', '(female)'), + new DungeonTrainer('Scientist', [ + new GymPokemon('Klang', 356500, 63), + new GymPokemon('Porygon', 356500, 63), + ], { weight: 1 }, 'Franklin', '(male)'), + new DungeonTrainer('School Kid', [ + new GymPokemon('Shroomish', 356500, 63), + new GymPokemon('Tangrowth', 356500, 63), + ], { weight: 1 }, 'William', '(male)'), + new DungeonTrainer('Youngster', [ + new GymPokemon('Slakoth', 356500, 63), + new GymPokemon('Slaking', 356500, 63), + ], { weight: 1 }, 'Keita'), + new DungeonTrainer('School Kid', [ + new GymPokemon('Igglybuff', 356500, 63), + new GymPokemon('Lickilicky', 356500, 63), + ], { weight: 1 }, 'Rita', '(female)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [ + { loot: 'Mind Plate', weight: 2 }, + { loot: 'Draco Plate' }, + { loot: 'Moonball' }, + ], + legendary: [ + { loot: 'Revive', weight: 2 }, + { loot: 'LargeRestore' }, + ], +}, 5203000, [ + new DungeonBossPokemon('Audino', 48000000, 100), + new DungeonBossPokemon('Dunsparce', 48000000, 100), + new DungeonBossPokemon('Latias', 48000000, 100), + new DungeonBossPokemon('Latios', 48000000, 100), + new DungeonBossPokemon('Vivillon (Ocean)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 16), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 17, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Ocean)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 356500, 3); +dungeonList['P2 Laboratory'] = new Dungeon('P2 Laboratory', ['Frillish', 'Finneon', 'Horsea', 'Herdier', 'Magneton', 'Klang', 'Weezing', 'Watchog', 'Scrafty', 'Audino'], { + common: [ + { loot: 'xClick' }, + { loot: 'xAttack', weight: 2 }, + { loot: 'Token_collector', weight: 2 }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + ], + epic: [ + { loot: 'Iron Plate', weight: 2 }, + { loot: 'Insect Plate', weight: 2 }, + { loot: 'Zap Plate' }, + ], + legendary: [ + { loot: 'Burn_Drive', ignoreDebuff: true }, + { loot: 'Chill_Drive', ignoreDebuff: true }, + { loot: 'Douse_Drive', ignoreDebuff: true }, + { loot: 'Shock_Drive', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Great_Twisted_Spoon', ignoreDebuff: true, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('An Unrivaled Power', 14), new ItemOwnedRequirement('Great_Twisted_Spoon', 1, GameConstants.AchievementOption.less)]) }], +}, 5403000, [ + new DungeonBossPokemon('Stoutland', 58000000, 100, { hide: true, requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('P2 Laboratory')) }), + new DungeonBossPokemon('Magnezone', 58000000, 100, { hide: true, requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('P2 Laboratory')) }), + new DungeonBossPokemon('Klinklang', 58000000, 100, { hide: true, requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('P2 Laboratory')) }), + new DungeonTrainer('Team Plasma', [ + new GymPokemon('Magneton', 10000000, 72), + new GymPokemon('Rotom (Wash)', 10000000, 72), + new GymPokemon('Metagross', 10000000, 72), + new GymPokemon('Beheeyem', 10000000, 72), + new GymPokemon('Magnezone', 10000000, 72), + new GymPokemon('Klinklang', 11000000, 74), + ], { weight: 1 }, 'Colress', '(colress)'), + new DungeonBossPokemon('Genesect', 62000000, 100, { requirement: new QuestLineStepCompletedRequirement('The Legend Awakened', 7) }), +], 396500, 18); +// Kalos Dungeons +dungeonList['Santalune Forest'] = new Dungeon('Santalune Forest', [ + { pokemon: 'Caterpie', options: { weight: 0.88 } }, + { pokemon: 'Metapod', options: { weight: 0.88 } }, + { pokemon: 'Weedle', options: { weight: 0.88 } }, + { pokemon: 'Kakuna', options: { weight: 0.88 } }, + { pokemon: 'Pansage', options: { weight: 0.88 } }, + { pokemon: 'Pansear', options: { weight: 0.88 } }, + { pokemon: 'Panpour', options: { weight: 0.88 } }, + { pokemon: 'Fletchling', options: { weight: 0.88 } }, + { pokemon: 'Scatterbug', options: { weight: 0.88 } }, + new DungeonTrainer('Youngster', [ + new GymPokemon('Scatterbug', 5803000, 3), + new GymPokemon('Fletchling', 5803000, 3), + ], { weight: 1 }, 'Joey'), + new DungeonTrainer('Lass', [new GymPokemon('Pikachu', 5803000, 5)], { weight: 1 }, 'Anna'), +], { + common: [ + { loot: 'Pokeball', weight: 2 }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [ + { loot: 'Insect Plate' }, + { loot: 'Fist Plate' }, + ], + legendary: [ + { loot: 'SmallRestore' }, + { loot: 'Silver_Powder' }, + { loot: 'Heracronite', ignoreDebuff: true }, + ], +}, 5803020, [ + new DungeonTrainer('Lass', [ + new GymPokemon('Weedle', 24303000, 2), + new GymPokemon('Bunnelby', 27303000, 4), + ], { weight: 1 }, 'Lise'), + new DungeonBossPokemon('Pikachu', 51738600, 4), +], 400000, 2); +dungeonList['Connecting Cave'] = new Dungeon('Connecting Cave', [ + { pokemon: 'Zubat', options: { weight: 1.33 } }, + { pokemon: 'Whismur', options: { weight: 1.33 } }, + { pokemon: 'Meditite', options: { weight: 1.33 } }, +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Wepear' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Toxic Plate' }, + { loot: 'Sky Plate' }, + ], + legendary: [ + { loot: 'Damp Rock' }, + { loot: 'Silk_Scarf' }, + ], +}, 6503370, [ + new DungeonTrainer('Pokémon Breeder', [ + new GymPokemon('Ducklett', 13374965, 12), + new GymPokemon('Pikachu', 14465837, 12), + new GymPokemon('Litleo', 17438602, 12), + new GymPokemon('Oddish', 19365784, 12), + ], { weight: 1 }, 'Mercy', '(female)'), + new DungeonBossPokemon('Axew', 59867590, 20), +], 475000, 7); +dungeonList['Glittering Cave'] = new Dungeon('Glittering Cave', [ + { pokemon: 'Machop', options: { weight: .88 } }, + { pokemon: 'Cubone', options: { weight: .88 } }, + { pokemon: 'Rhyhorn', options: { weight: .88 } }, + { pokemon: 'Lunatone', options: { weight: .88 } }, + { pokemon: 'Solrock', options: { weight: .88 } }, + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Houndour', 7037592, 18), + new GymPokemon('Zubat', 7037592, 18), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Gulpin', 7037592, 18), + new GymPokemon('Electrike', 7037592, 18), + ], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'White Shard' }, + ], + epic: [ + { loot: 'Moonball' }, + { loot: 'Blank Plate' }, + ], + legendary: [ + { loot: 'Hard Stone' }, + { loot: 'Revive' }, + { loot: 'Kangaskhanite', ignoreDebuff: true }, + ], +}, 7037500, [ + new DungeonTrainer('Team Flare Grunt Duo', [ + new GymPokemon('Scraggy', 33084827, 20), + new GymPokemon('Croagunk', 31937395, 20), + ], { weight: 1 }, undefined), + new DungeonBossPokemon('Kangaskhan', 63749659, 20, { requirement: new QuestLineStepCompletedRequirement('A Beautiful World', 3) }), + new DungeonBossPokemon('Mawile', 61285398, 20, { requirement: new QuestLineStepCompletedRequirement('A Beautiful World', 3) }), +], 505000, 9); +dungeonList['Reflection Cave'] = new Dungeon('Reflection Cave', [ + { pokemon: 'Mr. Mime', options: { weight: 4 } }, + { pokemon: 'Wobbuffet', options: { weight: 4 } }, + { pokemon: 'Sableye', options: { weight: 4 } }, + { pokemon: 'Chingling', options: { weight: 4 } }, + { pokemon: 'Roggenrola', options: { weight: 4 } }, + { pokemon: 'Solosis', options: { weight: 4 } }, + { pokemon: 'Carbink', options: { weight: 4 } }, + { pokemon: 'Mime Jr.', options: { weight: 4 } }, + new DungeonTrainer('Backpacker', [new GymPokemon('Linoone', 7353000, 26)], { weight: 1 }, 'Lane', '(male)'), + new DungeonTrainer('Battle Girl', [ + new GymPokemon('Throh', 7353000, 25), + new GymPokemon('Hawlucha', 7353000, 26), + ], { weight: 1 }, 'Hedvig'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Sandile', 7353000, 23), + new GymPokemon('Dwebble', 7353000, 23), + new GymPokemon('Diggersby', 7353000, 24), + ], { weight: 1 }, 'Dunstan'), + new DungeonTrainer('Tourist', [new GymPokemon('Nidorina', 7353000, 26)], { weight: 1 }, 'Monami', '(female)'), + new DungeonTrainer('Black Belt', [new GymPokemon('Sawk', 7353000, 28)], { weight: 1 }, 'Igor'), + new DungeonTrainer('Psychic', [ + new GymPokemon('Chimecho', 7353000, 24), + new GymPokemon('Golett', 7353000, 24), + ], { weight: 1 }, 'Franz', '(male)'), + new DungeonTrainer('Tourist', [new GymPokemon('Nidorino', 7353000, 26)], { weight: 1 }, 'Haruto', '(male)'), + new DungeonTrainer('Honeymooners', [ + new GymPokemon('Combee', 7353000, 26), + new GymPokemon('Vespiquen', 7353000, 26), + ], { weight: 1 }, 'Yuu & Ami'), +], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [ + { loot: 'Fist Plate' }, + { loot: 'Earth Plate' }, + { loot: 'Mind Plate' }, + { loot: 'Nestball' }, + ], + legendary: [ + { loot: 'Revive', weight: 2 }, + { loot: 'LargeRestore' }, + { loot: 'Black_Belt' }, + ], +}, 7353000, [ + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Absol', 33468400, 26), + new GymPokemon('Pinsir', 37474200, 25), + ], { weight: 1.5 }, 'Emil', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Doduo', 20365400, 24), + new GymPokemon('Granbull', 23366400, 24), + new GymPokemon('Helioptile', 25476400, 25), + ], { weight: 1.5 }, 'Monique', '(female)'), + new DungeonBossPokemon('Diancie', 69694200, 100, { requirement: new QuestLineStepCompletedRequirement('Princess Diancie', 7) }), +], 555000, 11); +//Tower of Mastery? +dungeonList['Kalos Power Plant'] = new Dungeon('Kalos Power Plant', [ + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Croagunk', 7903570, 32), + new GymPokemon('Scraggy', 7903570, 32), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Golbat', 7903570, 32), + new GymPokemon('Scraggy', 7903570, 32), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [new GymPokemon('Mightyena', 7903570, 34)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Golbat', 7903570, 32), + new GymPokemon('Mightyena', 7903570, 32), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Golbat', 7903570, 33), + new GymPokemon('Croagunk', 7903570, 31), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Liepard', 7903570, 31), + new GymPokemon('Scraggy', 7903570, 31), + new GymPokemon('Croagunk', 7903570, 31), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Grunt', [new GymPokemon('Swalot', 7903570, 34)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Liepard', 7903570, 31), + new GymPokemon('Swalot', 7903570, 33), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Admin', [new GymPokemon('Houndoom', 7903570, 36)], { weight: 8 }, undefined, '(male)'), +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Zap Plate' }, + { loot: 'Dread Plate' }, + ], + legendary: [ + { loot: 'Repeatball', weight: 2 }, + { loot: 'LargeRestore' }, + { loot: 'Magnet' }, + ], +}, 7903570, [ + new DungeonTrainer('Team Flare Aliana', [new GymPokemon('Mightyena', 75384400, 38)], { weight: 3 }), + new DungeonBossPokemon('Volcanion', 83945700, 100, { + requirement: new MultiRequirement([ + new ClearDungeonRequirement(5, GameConstants.getDungeonIndex('Kalos Power Plant')), + new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion), + ]) + }), +], 575000, 13); +dungeonList['Sea Spirit\'s Den'] = new Dungeon('Sea Spirit\'s Den', ['Lapras', 'Dwebble', 'Lanturn', 'Binacle', 'Woobat', 'Onix'], { + common: [ + { loot: 'xClick', weight: 2 }, + { loot: 'Bluk' }, + ], + rare: [{ loot: 'Blue Shard' }], + epic: [ + { loot: 'Flame Plate' }, + { loot: 'Sky Plate' }, + { loot: 'Icicle Plate' }, + { loot: 'Zap Plate' }, + { loot: 'Mind Plate' }, + { loot: 'Lureball' }, + ], + legendary: [ + { loot: 'Damp Rock' }, + { loot: 'Mystic_Water' }, + ], +}, 7543000, [new DungeonBossPokemon('Lugia', 92375000, 100)], 600000, 23); +dungeonList['Poké Ball Factory'] = new Dungeon('Poké Ball Factory', [ + new DungeonTrainer('Team Flare Grunt', [new GymPokemon('Toxicroak', 8173950, 37)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Mightyena', 8173950, 36), + new GymPokemon('Golbat', 8173950, 36), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Scraggy', 8173950, 36), + new GymPokemon('Mightyena', 8173950, 36), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Grunt', [new GymPokemon('Swalot', 8173950, 37)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Admin', [ + new GymPokemon('Scraggy', 8173950, 37), + new GymPokemon('Houndoom', 8173950, 38), + ], { weight: 4 }, undefined, '(female)'), +], { + common: [ + { loot: 'Pokeball', weight: 4 }, + { loot: 'Greatball', weight: 2 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [ + { loot: 'Duskball' }, + { loot: 'Quickball' }, + { loot: 'Timerball' }, + { loot: 'Luxuryball' }, + { loot: 'Lureball' }, + { loot: 'Diveball' }, + { loot: 'Repeatball' }, + ], +}, 8173950, [ + new DungeonTrainer('Team Flare Celosia', [new GymPokemon('Manectric', 79385030, 41)], { weight: 1 }), + new DungeonTrainer('Team Flare Bryony', [new GymPokemon('Liepard', 79284730, 41)], { weight: 1 }), + new DungeonBossPokemon('Vivillon (Tundra)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 8), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 9, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Tundra)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 615000, 14); +dungeonList['Lost Hotel'] = new Dungeon('Lost Hotel', [ + { pokemon: 'Magneton', options: { weight: 2.6 } }, + { pokemon: 'Electrode', options: { weight: 2.6 } }, + { pokemon: 'Litwick', options: { weight: 2.6 } }, + { pokemon: 'Pawniard', options: { weight: 2.6 } }, + { pokemon: 'Klefki', options: { weight: 2.6 } }, + new DungeonTrainer('Punk Guy', [ + new GymPokemon('Scrafty', 8375300, 39), + new GymPokemon('Sharpedo', 8375300, 39), + new GymPokemon('Pawniard', 8375300, 39), + ], { weight: 1 }, 'Sid'), + new DungeonTrainer('Punk Guy', [ + new GymPokemon('Skuntank', 8375300, 40), + new GymPokemon('Crawdaunt', 8375300, 40), + ], { weight: 1 }, 'Jacques'), + new DungeonTrainer('Punk Guy', [new GymPokemon('Dunsparce', 8375300, 42)], { weight: 1 }, 'Slater'), + new DungeonTrainer('Punk Girl', [ + new GymPokemon('Seviper', 8375300, 40), + new GymPokemon('Arbok', 8375300, 40), + ], { weight: 1 }, 'Jeanne'), + new DungeonTrainer('Punk Girl', [ + new GymPokemon('Liepard', 8375300, 40), + new GymPokemon('Liepard', 8375300, 40), + ], { weight: 1 }, 'Cecile'), +], { + common: [ + { loot: 'xClick', weight: 8 }, + { loot: 'Lucky_incense', weight: 6 }, + { loot: 'Trubbish', weight: 2 }, + { loot: 'Garbodor' }, + ], + rare: [ + { loot: 'Pink Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [ + { loot: 'Dread Plate' }, + { loot: 'Duskball' }, + ], + legendary: [ + { loot: 'Rotom (Heat)' }, + { loot: 'Rotom (Wash)' }, + { loot: 'Rotom (Fan)' }, + { loot: 'Rotom (Frost)' }, + { loot: 'Rotom (Mow)' }, + { loot: 'Rotom (Discord)', requirement: new ObtainedPokemonRequirement('Rotom (Discord)') }, + { loot: 'Spell_Tag' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Lost Hotel')) }], +}, 8375300, [ + new DungeonTrainer('Punk Couple', [ + new GymPokemon('Garbodor', 42664500, 42), + new GymPokemon('Pangoro', 42765500, 42), + ], { weight: 2 }, 'Zoya & Asa'), + new DungeonBossPokemon('Rotom', 82376500, 38), + new DungeonBossPokemon('Vivillon (Elegant)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 14), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 15, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Elegant)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 635000, 15); +dungeonList['Frost Cavern'] = new Dungeon('Frost Cavern', [ + { pokemon: 'Haunter', options: { weight: 4.61 } }, + { pokemon: 'Jynx', options: { weight: 4.61 } }, + { pokemon: 'Piloswine', options: { weight: 4.61 } }, + { pokemon: 'Beartic', options: { weight: 4.61 } }, + { pokemon: 'Cryogonal', options: { weight: 4.61 } }, + { pokemon: 'Bergmite', options: { weight: 4.61 } }, + { pokemon: 'Smoochum', options: { weight: 4.61 } }, + { pokemon: 'Vanillite', options: { weight: 4.61 } }, + { pokemon: 'Cubchoo', options: { weight: 4.61 } }, + { pokemon: 'Poliwhirl', options: { weight: 4.61 } }, + { pokemon: 'Floatzel', options: { weight: 4.61 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 4.61 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 4.61 } }, + new DungeonTrainer('Hiker', [new GymPokemon('Vibrava', 8537490, 44)], { weight: 1 }, 'Ross'), + new DungeonTrainer('Sky Trainer', [ + new GymPokemon('Carnivine', 8537490, 41), + new GymPokemon('Swanna', 8537490, 44), + ], { weight: 1 }, 'Celso', '(male)'), + new DungeonTrainer('Sky Trainer', [new GymPokemon('Cryogonal', 8537490, 45)], { weight: 1 }, 'Era', '(female)'), + new DungeonTrainer('Artist', [new GymPokemon('Smeargle', 8537490, 44)], { weight: 1 }, 'Salvador', '(male)'), + new DungeonTrainer('Ace Trainer', [new GymPokemon('Doublade', 8537490, 46)], { weight: 1 }, 'Cordelia', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Raichu', 8537490, 42), + new GymPokemon('Golduck', 8537490, 42), + new GymPokemon('Marowak', 8537490, 43), + ], { weight: 1 }, 'Neil', '(male)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Graveler', 8537490, 40), + new GymPokemon('Graveler', 8537490, 41), + new GymPokemon('Carbink', 8537490, 42), + ], { weight: 1 }, 'Alain'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Relicanth', 8537490, 42), + new GymPokemon('Rhydon', 8537490, 42), + ], { weight: 1 }, 'Delmon'), + new DungeonTrainer('Brains & Brawn', [ + new GymPokemon('Grumpig', 8537490, 44), + new GymPokemon('Hariyama', 8537490, 46), + ], { weight: 1 }, 'Eoin & Wolf'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Scrafty', 8537490, 43), + new GymPokemon('Throh', 8537490, 44), + ], { weight: 1 }, 'Alonzo'), + new DungeonTrainer('Battle Girl', [ + new GymPokemon('Sawk', 8537490, 43), + new GymPokemon('Mienshao', 8537490, 44), + ], { weight: 1 }, 'Kinsey'), + new DungeonTrainer('Black Belt', [new GymPokemon('Gurdurr', 8537490, 46)], { weight: 1 }, 'Kenji'), + new DungeonTrainer('Hiker', [new GymPokemon('Probopass', 8537490, 44)], { weight: 1 }, 'Brent'), + new DungeonTrainer('Battle Girl', [new GymPokemon('Medicham', 8537490, 46)], { weight: 1 }, 'Gabrielle'), + new DungeonTrainer('Team Flare Grunt', [ + new GymPokemon('Golbat', 8537490, 42), + new GymPokemon('Manectric', 8537490, 42), + ], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + { loot: 'Oran' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'White Shard' }, + ], + epic: [ + { loot: 'Icicle Plate' }, + { loot: 'Meadow Plate' }, + { loot: 'Insect Plate' }, + { loot: 'Iron Plate' }, + { loot: 'Duskball' }, + ], + legendary: [ + { loot: 'LargeRestore', weight: 2 }, + { loot: 'Star Piece' }, + { loot: 'Never_Melt_Ice' }, + { loot: 'Abomasite', ignoreDebuff: true }, + ], + mythic: [{ loot: 'Heart Scale' }], +}, 8537490, [ + new DungeonTrainer('Team Flare Mable', [new GymPokemon('Houndoom', 87365830, 48)], { weight: 1 }), + new DungeonBossPokemon('Abomasnow', 85376500, 50, { hide: true, requirement: new QuestLineStepCompletedRequirement('A Beautiful World', 17) }), + new DungeonBossPokemon('Vivillon (Icy Snow)', 96662023, 60, { + hide: true, + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 32), + new QuestLineStepCompletedRequirement('The Great Vivillon Hunt!', 33, GameConstants.AchievementOption.less), + ]), + new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Icy Snow)'), + new SpecialEventRequirement('Lunar New Year'), + ]), + ]) + }), +], 665500, 15); +dungeonList['Team Flare Secret HQ'] = new Dungeon('Team Flare Secret HQ', [ + new DungeonTrainer('Team Flare Admin', [new GymPokemon('Toxicroak', 8739480, 50)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [new GymPokemon('Liepard', 8739480, 48)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Admin', [new GymPokemon('Manectric', 8739480, 50)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Grunt', [new GymPokemon('Mightyena', 8739480, 48)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Admin', [new GymPokemon('Houndoom', 8739480, 50)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Grunt', [new GymPokemon('Scrafty', 8739480, 48)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Admin', [ + new GymPokemon('Liepard', 8739480, 47), + new GymPokemon('Manectric', 8739480, 48), + ], { weight: 2 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Admin', [ + new GymPokemon('Mightyena', 8739480, 47), + new GymPokemon('Houndoom', 8739480, 48), + ], { weight: 2 }, undefined, '(male)'), + new DungeonTrainer('Team Flare Admin', [new GymPokemon('Swalot', 8739480, 50)], { weight: 2 }, undefined, '(female)'), + new DungeonTrainer('Team Flare Admin', [new GymPokemon('Golbat', 8739480, 50)], { weight: 2 }, undefined, '(male)'), +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Black Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [ + { loot: 'Pixie Plate' }, + { loot: 'Dread Plate' }, + { loot: 'Sky Plate' }, + ], + legendary: [{ loot: 'Black_Glasses' }], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Team Flare Secret HQ')) }], +}, 8739480, [ + new DungeonTrainer('Team Flare Aliana', [ + new GymPokemon('Houndoom', 47416644, 48), + new GymPokemon('Druddigon', 48374556, 49), + ], { weight: 2, hide: true, requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('A Beautiful World', 24), + new QuestLineStepCompletedRequirement('A Beautiful World', 25, GameConstants.AchievementOption.less), + ]) }), + new DungeonTrainer('Team Flare Celosia', [ + new GymPokemon('Manectric', 47416644, 48), + new GymPokemon('Drapion', 48374556, 49), + ], { weight: 2, hide: true, requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('A Beautiful World', 25), + new QuestLineStepCompletedRequirement('A Beautiful World', 26, GameConstants.AchievementOption.less), + ]) }), + new DungeonTrainer('Team Flare Bryony', [ + new GymPokemon('Liepard', 47416644, 48), + new GymPokemon('Bisharp', 48374556, 49), + ], { weight: 2, hide: true, requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('A Beautiful World', 26), + new QuestLineStepCompletedRequirement('A Beautiful World', 27, GameConstants.AchievementOption.less), + ]) }), + new DungeonTrainer('Team Flare Mable', [ + new GymPokemon('Houndoom', 47416644, 48), + new GymPokemon('Weavile', 48374556, 49), + ], { weight: 2, hide: true, requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('A Beautiful World', 27), + new QuestLineStepCompletedRequirement('A Beautiful World', 28, GameConstants.AchievementOption.less), + ]) }), + new DungeonTrainer('Team Flare Lysandre', [ + new GymPokemon('Mienshao', 22464940, 47), + new GymPokemon('Honchkrow', 22564950, 47), + new GymPokemon('Pyroar', 23375580, 49), + new GymPokemon('Gyarados', 27385730, 51), + ], { weight: 2, hide: true, requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('A Beautiful World', 28), + new QuestLineStepCompletedRequirement('A Beautiful World', 33, GameConstants.AchievementOption.less), + ]) }), + new DungeonTrainer('Team Flare Boss Lysandre', [ + new GymPokemon('Mienshao', 22464940, 47), + new GymPokemon('Honchkrow', 22564950, 47), + new GymPokemon('Pyroar', 23375580, 49), + new GymPokemon('Mega Gyarados', 27385730, 51), + ], { weight: 3, hide: true, requirement: new QuestLineStepCompletedRequirement('A Beautiful World', 33) }), + new DungeonBossPokemon('Xerneas', 93659460, 100, { requirement: new QuestLineStepCompletedRequirement('A Beautiful World', 31) }), + new DungeonBossPokemon('Yveltal', 93659450, 100, { requirement: new QuestLineStepCompletedRequirement('A Beautiful World', 31) }), +], 675000, 16); +dungeonList['Terminus Cave'] = new Dungeon('Terminus Cave', [ + { pokemon: 'Sandslash', options: { weight: 3.27 } }, + { pokemon: 'Graveler', options: { weight: 3.27 } }, + { pokemon: 'Pupitar', options: { weight: 3.27 } }, + { pokemon: 'Lairon', options: { weight: 3.27 } }, + { pokemon: 'Durant', options: { weight: 3.27 } }, + { pokemon: 'Geodude', options: { weight: 3.27 } }, + { pokemon: 'Larvitar', options: { weight: 3.27 } }, + { pokemon: 'Aron', options: { weight: 3.27 } }, + new DungeonTrainer('Worker', [ + new GymPokemon('Graveler', 8924330, 46), + new GymPokemon('Graveler', 8924330, 47), + new GymPokemon('Golem', 8924330, 48), + ], { weight: 1 }, 'Narek', '(male)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Steelix', 8924330, 48), + new GymPokemon('Boldore', 8924330, 48), + ], { weight: 1 }, 'Bergin'), + new DungeonTrainer('Hiker', [new GymPokemon('Rhydon', 8924330, 50)], { weight: 1 }, 'Aaron'), + new DungeonTrainer('Worker', [new GymPokemon('Octillery', 8924330, 50)], { weight: 1 }, 'Dimitri', '(male)'), + new DungeonTrainer('Worker', [new GymPokemon('Probopass', 8924330, 50)], { weight: 1 }, 'Yusif', '(male)'), + new DungeonTrainer('Battle Girl', [ + new GymPokemon('Throh', 8924330, 49), + new GymPokemon('Conkeldurr', 8924330, 50), + ], { weight: 1 }, 'Andrea'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Toxicroak', 8924330, 49), + new GymPokemon('Sawk', 8924330, 50), + ], { weight: 1 }, 'Gunnar'), + new DungeonTrainer('Battle Girl', [ + new GymPokemon('Medicham', 8924330, 48), + new GymPokemon('Hawlucha', 8924330, 51), + ], { weight: 1 }, 'Hailey'), + new DungeonTrainer('Black Belt', [new GymPokemon('Hariyama', 8924330, 52)], { weight: 1 }, 'Ricardo'), +], { + common: [ + { loot: 'xAttack', weight: 2 }, + { loot: 'Pokeball' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [ + { loot: 'Iron Plate' }, + { loot: 'Earth Plate' }, + { loot: 'Draco Plate' }, + { loot: 'Duskball' }, + ], + legendary: [ + { loot: 'Star Piece', weight: 2 }, + { loot: 'Heat Rock' }, + { loot: 'LargeRestore' }, + ], +}, 8924330, [ + new DungeonTrainer('Pokémon Rangers', [ + new GymPokemon('Nidoqueen', 46659450, 51), + new GymPokemon('Nidoking', 46654990, 51), + ], { weight: 3 }, 'Fern & Lee'), + new DungeonBossPokemon('Zygarde', 92485360, 70, { requirement: new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion) }), +], 700000, 18); +dungeonList['Pokémon Village'] = new Dungeon('Pokémon Village', ['Jigglypuff', 'Poliwhirl', 'Noctowl', 'Lombre', 'Gothorita', 'Amoonguss'], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Rawst' }, + { loot: 'Chesto' }, + { loot: 'Aguav' }, + { loot: 'Wiki' }, + { loot: 'Garbodor' }, + { loot: 'Banette' }, + ], + rare: [{ loot: 'Pink Shard' }], + epic: [ + { loot: 'Pixie Plate' }, + { loot: 'Repeatball' }, + ], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Fairy_Feather' }, + ], + mythic: [{ loot: 'Quick_Powder' }], +}, 9003000, [ + new DungeonBossPokemon('Ditto', 94836530, 50), + new DungeonBossPokemon('Zoroark', 95743340, 50), + new DungeonTrainer('Anomaly Mewtwo', [new GymPokemon('Mega Mewtwo X', 120000000, 70)], { hide: true, requirement: new QuestLineCompletedRequirement('An Unrivaled Power'), hideTrainer: true }, undefined, 'X'), + new DungeonTrainer('Anomaly Mewtwo', [new GymPokemon('Mega Mewtwo Y', 120000000, 70)], { hide: true, requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('An Unrivaled Power', 16), + new QuestLineCompletedRequirement('An Unrivaled Power', GameConstants.AchievementOption.less), + ]), hideTrainer: true }, undefined, 'Y'), +], 725000, 20); +dungeonList['Victory Road Kalos'] = new Dungeon('Victory Road Kalos', [ + { pokemon: 'Haunter', options: { weight: 3.27 } }, + { pokemon: 'Graveler', options: { weight: 3.27 } }, + { pokemon: 'Lickitung', options: { weight: 3.27 } }, + { pokemon: 'Gurdurr', options: { weight: 3.27 } }, + { pokemon: 'Druddigon', options: { weight: 3.27 } }, + { pokemon: 'Zweilous', options: { weight: 3.27 } }, + { pokemon: 'Geodude', options: { weight: 3.27 } }, + { pokemon: 'Lombre', options: { weight: 3.27 } }, + { pokemon: 'Floatzel', options: { weight: 3.27 } }, + { pokemon: 'Poliwhirl', options: { weight: 3.27 } }, + { pokemon: 'Poliwag', options: { weight: 3.27 } }, + { pokemon: 'Noibat', options: { weight: 3.27 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 3.27 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 3.27 } }, + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Carbink', 3500000, 56), + new GymPokemon('Raichu', 3500000, 56), + new GymPokemon('Kingdra', 3500000, 57), + ], { weight: 1 }, 'Robbie', '(male)'), + new DungeonTrainer('Ace Trainer', [new GymPokemon('Weavile', 3500000, 60)], { weight: 1 }, 'Alanza', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Steelix', 3500000, 56), + new GymPokemon('Electrode', 3500000, 56), + new GymPokemon('Kangaskhan', 3500000, 57), + ], { weight: 1 }, 'Bence', '(male)'), + new DungeonTrainer('Black Belt', [new GymPokemon('Machamp', 3500000, 60)], { weight: 1 }, 'Markus'), + new DungeonTrainer('Battle Girl', [ + new GymPokemon('Hawlucha', 3500000, 57), + new GymPokemon('Mienshao', 3500000, 58), + ], { weight: 1 }, 'Veronique'), + new DungeonTrainer('Backpacker', [new GymPokemon('Haxorus', 3500000, 58)], { weight: 1 }, 'Farid', '(male)'), + new DungeonTrainer('Battle Girl', [new GymPokemon('Medicham', 3500000, 60)], { weight: 1 }, 'Sigrid'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Pangoro', 3500000, 57), + new GymPokemon('Heracross', 3500000, 58), + ], { weight: 1 }, 'Ander'), + new DungeonTrainer('Psychic', [new GymPokemon('Espeon', 3500000, 58)], { weight: 1 }, 'William', '(male)'), + new DungeonTrainer('Brains & Brawn', [ + new GymPokemon('Medicham', 3500000, 58), + new GymPokemon('Gallade', 3500000, 60), + ], { weight: 1 }, 'Arman & Hugo'), + new DungeonTrainer('Fairy Tale Girl', [ + new GymPokemon('Azumarill', 3500000, 56), + new GymPokemon('Florges (Red)', 3500000, 56), + ], { weight: 1 }, 'Corinne'), + new DungeonTrainer('Hex Maniac', [new GymPokemon('Gourgeist (Average)', 3500000, 58)], { weight: 1 }, 'Raziah'), + new DungeonTrainer('Pokémon Ranger', [ + new GymPokemon('Slowbro', 3500000, 57), + new GymPokemon('Altaria', 3500000, 57), + ], { weight: 1 }, 'Petra', '(female)'), + new DungeonTrainer('Veteran', [new GymPokemon('Talonflame', 3500000, 61)], { weight: 1 }, 'Inga', '(female)'), + new DungeonTrainer('Pokémon Ranger', [new GymPokemon('Crobat', 3500000, 59)], { weight: 1 }, 'Ralf', '(male)'), + new DungeonTrainer('Black Belt', [ + new GymPokemon('Banette', 3500000, 57), + new GymPokemon('Leafeon', 3500000, 59), + ], { weight: 1 }, 'Gerard'), + new DungeonTrainer('Artist', [new GymPokemon('Smeargle', 3500000, 58)], { weight: 1 }, 'Vincent', '(male)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Torkoal', 3500000, 56), + new GymPokemon('Golem', 3500000, 56), + ], { weight: 1 }, 'Corwin'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + { loot: 'Pink Shard' }, + { loot: 'Duskball' }, + ], + legendary: [ + { loot: 'Star Piece', weight: 2 }, + { loot: 'Smooth Rock' }, + { loot: 'Revive' }, + { loot: 'Odd Keystone' }, + { loot: 'Rock_Incense' }, + { loot: 'Damp Rock' }, + { loot: 'LargeRestore' }, + { loot: 'Garchompite', ignoreDebuff: true }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Heart Scale' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Victory Road Kalos')) }, + ], +}, 9003000, [ + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Magcargo', 48593850, 57), + new GymPokemon('Scizor', 49355840, 58), + ], { weight: 1 }, 'Michele', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Trevenant', 48329640, 57), + new GymPokemon('Gigalith', 49355820, 59), + ], { weight: 1 }, 'Timeo', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Glaceon', 48395740, 57), + new GymPokemon('Snorlax', 49265840, 59), + ], { weight: 1 }, 'Catrina', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Skarmory', 32395730, 55), + new GymPokemon('Umbreon', 33254840, 55), + new GymPokemon('Alakazam', 35385940, 57), + ], { weight: 1 }, 'Gilles', '(male)'), +], 750500, 21); +//Unknown Dungeon? Contains Mewtwo. +// Alola Dungeons +dungeonList['Trainers\' School'] = new Dungeon('Trainers\' School', [ + { pokemon: 'Alolan Meowth', options: { weight: 2 } }, + { pokemon: 'Abra', options: { weight: 2 } }, + { pokemon: 'Magnemite', options: { weight: 2 } }, + { pokemon: 'Alolan Grimer', options: { weight: 2 } }, + { pokemon: 'Wingull', options: { weight: 2 } }, + { pokemon: 'Mime Jr.', options: { weight: 2 } }, + { pokemon: 'Zorua', options: { weight: 2 } }, + { pokemon: 'Furfrou', options: { weight: 2 } }, + new DungeonTrainer('Youth Athlete', [new GymPokemon('Bonsly', 11407338, 7)], { weight: 1 }, 'Hiromi', '(female)'), + new DungeonTrainer('Preschooler', [new GymPokemon('Metapod', 11407338, 7)], { weight: 1 }, 'Mia', '(female)'), + new DungeonTrainer('Youngster', [new GymPokemon('Alolan Grimer', 11407338, 7)], { weight: 1 }, 'Joey'), + new DungeonTrainer('Rising Star', [new GymPokemon('Ekans', 11407338, 8)], { weight: 1 }, 'Joseph', '(male)'), +], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Pokeball' }, + { loot: 'Oran' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [{ loot: 'Flame Plate' }], + legendary: [{ loot: 'SmallRestore' }], +}, 11407338, [ + new DungeonTrainer('Teacher', [ + new GymPokemon('Litten', 19012230, 10), + new GymPokemon('Popplio', 19012230, 10), + new GymPokemon('Rowlet', 19012230, 10), + ], { weight: 1 }, 'Emily', '(gen7)'), +], 757500, 18); +dungeonList['Hau\'oli Cemetery'] = new Dungeon('Hau\'oli Cemetery', [ + { pokemon: 'Zubat', options: { weight: 4 } }, + { pokemon: 'Gastly', options: { weight: 4 } }, + { pokemon: 'Misdreavus', options: { weight: 4 } }, + new DungeonTrainer('Pokémon Breeder', [new GymPokemon('Pikachu', 11587450, 9)], { weight: 1 }, 'Ikue', '(female)'), + new DungeonTrainer('Office Worker', [new GymPokemon('Pikipek', 11587450, 9)], { weight: 1 }, 'Jeremy', '(male)'), + new DungeonTrainer('Preschooler', [new GymPokemon('Happiny', 11587450, 8)], { weight: 1 }, 'Malia', '(female)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Dowsing_machine' }, + ], + rare: [{ loot: 'Purple Shard' }], + epic: [{ loot: 'Spooky Plate' }], + legendary: [{ loot: 'MediumRestore' }], +}, 11587450, [ + new DungeonBossPokemon('Drifloon', 28968625, 9), + new DungeonBossPokemon('Litwick', 28968625, 9, { hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Saturday) }), +], 800000, 2); +dungeonList['Verdant Cavern'] = new Dungeon('Verdant Cavern', [ + { pokemon: 'Alolan Rattata', options: { weight: 0.75 } }, + { pokemon: 'Zubat', options: { weight: 0.75 } }, + { pokemon: 'Alolan Diglett', options: { weight: 0.75 } }, + { pokemon: 'Noibat', options: { weight: 0.75 } }, + { pokemon: 'Yungoos', options: { weight: 0.75 } }, + { pokemon: 'Pheromosa', options: { weight: 0.75, hide: true, requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 5) } }, + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Drowzee', 11595673, 11)], { weight: 0.5 }, 'A', '(male)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Drowzee', 11595673, 11)], { weight: 0.5 }, 'B', '(male)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + ], + rare: [ + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + ], + epic: [{ loot: 'Meadow Plate' }], + legendary: [ + { loot: 'MediumRestore' }, + { loot: 'Revive' }, + ], +}, 11595673, [ + new DungeonBossPokemon('Alolan Raticate', 57978365, 12), + new DungeonBossPokemon('Gumshoos', 57978365, 12), + new DungeonBossPokemon('Totem Raticate', 82543791, 70, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Welcome to Paradise, Cousin!')]) }), + new DungeonBossPokemon('Totem Gumshoos', 82543791, 70, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Welcome to Paradise, Cousin!')]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Yungoos', 23191346, 10, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Totem Gumshoos', 34787019, 12, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Alolan Rattata', 23191346, 10, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + ])), + new GymPokemon('Totem Raticate', 34787019, 12, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + ])), + ], { hide: true, weight: 10, requirement: new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 5, GameConstants.AchievementOption.less) }, 'of Verdant Cavern'), +], 805000, 2); +dungeonList['Melemele Meadow'] = new Dungeon('Melemele Meadow', [ + { pokemon: 'Caterpie', options: { weight: 0.55 } }, + { pokemon: 'Metapod', options: { weight: 0.55 } }, + { pokemon: 'Butterfree', options: { weight: 0.55 } }, + { pokemon: 'Cottonee', options: { weight: 0.55 } }, + { pokemon: 'Petilil', options: { weight: 0.55 } }, + { pokemon: 'Cutiefly', options: { weight: 0.55 } }, + { pokemon: 'Buzzwole', options: { weight: 0.55, hide: true, requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 5) } }, + new DungeonTrainer('Actor', [new GymPokemon('Oricorio (Pom-Pom)', 11769270, 12)], { weight: 1 }, 'Meredith'), +], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Cyan Shard' }, + ], + epic: [{ loot: 'Meadow Plate' }], +}, 11769270, [ + new DungeonBossPokemon('Flabébé (Red)', 58846350, 12), + new DungeonBossPokemon('Oricorio (Pom-Pom)', 58846350, 12), +], 825000, 3); +dungeonList['Seaward Cave'] = new Dungeon('Seaward Cave', ['Zubat', 'Psyduck', 'Seel', 'Magikarp', 'Smoochum'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Lureball' }, + { loot: 'Diveball' }, + ], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'Never_Melt_Ice' }, + ], + mythic: [{ loot: 'Max Revive' }], +}, 11845338, [ + new DungeonBossPokemon('Delibird', 59226690, 12), + new DungeonBossPokemon('Barboach', 59226690, 17), + new DungeonBossPokemon('Squirtle', 59226690, 12, { hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Monday) }), + new DungeonBossPokemon('Totodile', 59226690, 12, { hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Monday) }), +], 830000, 3); +dungeonList['Ten Carat Hill'] = new Dungeon('Ten Carat Hill', [ + { pokemon: 'Zubat', options: { weight: 1 } }, + { pokemon: 'Machop', options: { weight: 1 } }, + { pokemon: 'Psyduck', options: { weight: 1 } }, + { pokemon: 'Mawile', options: { weight: 1 } }, + { pokemon: 'Roggenrola', options: { weight: 1 } }, + { pokemon: 'Necrozma', options: { weight: 0.25, hide: true, requirement: new MultiRequirement([ + new QuestLineCompletedRequirement('Ultra Beast Hunt'), + new StatisticRequirement(['pokemonEncountered', PokemonHelper.getPokemonByName('Necrozma').id], 1, 'Must have encountered Necrozma before.'), + ]) } }, +], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + ], + rare: [{ loot: 'Cyan Shard' }], + epic: [{ loot: 'MediumRestore' }], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'Sharp_Beak' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Ten Carat Hill')) }], +}, 11897821, [ + new DungeonBossPokemon('Spinda', 59489105, 14), + new DungeonBossPokemon('Carbink', 59489105, 14), + new DungeonBossPokemon('Rockruff', 59489105, 14), + new DungeonBossPokemon('Onix', 59489105, 14, { hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Tuesday) }), + new DungeonBossPokemon('Deino', 59489105, 13, { hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Tuesday) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Rockruff', 59489105, 30, new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Vast Poni Canyon'), GameConstants.AchievementOption.less)), + new GymPokemon('Rockruff', 23795642, 30, new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Vast Poni Canyon'))), + new GymPokemon('Hakamo-o', 35693463, 36, new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Vast Poni Canyon'))), + ], { hide: true, weight: 10, requirement: new QuestLineCompletedRequirement('Welcome to Paradise, Cousin!', GameConstants.AchievementOption.less) }, 'of Ten Carat Hill'), +], 835000, 3); +dungeonList['Pikachu Valley'] = new Dungeon('Pikachu Valley', ['Pikachu', 'Pichu', 'Plusle', 'Minun', 'Pachirisu', 'Emolga', 'Dedenne'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Cheri' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Zap Plate', weight: 2 }, + { loot: 'Pikachu (Partner Cap)', ignoreDebuff: true, requirement: new TemporaryBattleRequirement('Ash Ketchum Alola') }, + ], + legendary: [{ loot: 'Magnet' }], +}, 11952804, [ + new DungeonBossPokemon('Pikachu (Original Cap)', 59764020, 15), + new DungeonBossPokemon('Pikachu (Hoenn Cap)', 59764020, 15), + new DungeonBossPokemon('Pikachu (Sinnoh Cap)', 59764020, 15), + new DungeonBossPokemon('Pikachu (Unova Cap)', 59764020, 15), + new DungeonBossPokemon('Pikachu (Kalos Cap)', 59764020, 15), + new DungeonBossPokemon('Pikachu (Alola Cap)', 59764020, 15, { hide: true, requirement: new GymBadgeRequirement(BadgeEnums.Champion_Stamp) }), + new DungeonBossPokemon('Pikachu (World Cap)', 59764020, 15, { hide: true, requirement: new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion) }), +], 850000, 4); +dungeonList['Paniola Ranch'] = new Dungeon('Paniola Ranch', [ + { pokemon: 'Mareep', options: { weight: 6.66 } }, + { pokemon: 'Lillipup', options: { weight: 6.66 } }, + { pokemon: 'Mudbray', options: { weight: 6.66 } }, + new DungeonTrainer('Madame', [new GymPokemon('Carbink', 12161328, 15)], { weight: 1 }, 'Elizabeth'), + new DungeonTrainer('Pokémon Breeder', [new GymPokemon('Tauros', 12161328, 15)], { weight: 1 }, 'Wesley', '(male)'), + new DungeonTrainer('Pokémon Breeder', [new GymPokemon('Mudbray', 12161328, 15)], { weight: 1 }, 'Glenn', '(male)'), + new DungeonTrainer('Gentleman', [new GymPokemon('Sableye', 12161328, 15)], { weight: 1 }, 'Gerald'), + new DungeonTrainer('Rising Star', [ + new GymPokemon('Lillipup', 12161328, 15), + new GymPokemon('Magnemite', 12161328, 16), + ], { weight: 1 }, 'Micah', '(male)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'White Shard' }, + ], + epic: [{ loot: 'Splash Plate' }], + legendary: [ + { loot: 'LargeRestore' }, + { loot: 'Oval Stone' }, + ], +}, 12111328, [ + new DungeonBossPokemon('Tauros', 30278320, 15), + new DungeonBossPokemon('Miltank', 30278320, 15), +], 855000, 4); +dungeonList['Brooklet Hill'] = new Dungeon('Brooklet Hill', [ + { pokemon: 'Paras', options: { weight: 1.43 } }, + { pokemon: 'Psyduck', options: { weight: 1.43 } }, + { pokemon: 'Poliwag', options: { weight: 1.43 } }, + { pokemon: 'Tentacool', options: { weight: 1.43 } }, + { pokemon: 'Goldeen', options: { weight: 1.43 } }, + { pokemon: 'Magikarp', options: { weight: 1.43 } }, + { pokemon: 'Wingull', options: { weight: 1.43 } }, + { pokemon: 'Surskit', options: { weight: 1.43 } }, + { pokemon: 'Feebas', options: { weight: 1.43 } }, + { pokemon: 'Finneon', options: { weight: 1.43 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 1.43 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 1.43 } }, + { pokemon: 'Alomomola', options: { weight: 1.43 } }, + { pokemon: 'Dewpider', options: { weight: 1.43 } }, + { pokemon: 'Morelull', options: { weight: 1.43, hide: true, requirement: new ObtainedPokemonRequirement('Morelull') } }, + { pokemon: 'Marill', options: { weight: 1.43, hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Saturday) } }, + { pokemon: 'Marshtomp', options: { weight: 1.43, hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Saturday) } }, + new DungeonTrainer('Fisherman', [new GymPokemon('Tentacool', 12138060, 16)], { weight: 1 }, 'Hal'), + new DungeonTrainer('Fisherman', [ + new GymPokemon('Barboach', 12138060, 16), + new GymPokemon('Goldeen', 12138060, 16), + ], { weight: 1 }, 'Ernest'), + new DungeonTrainer('Backpacker', [new GymPokemon('Fletchling', 12138060, 16)], { weight: 1 }, 'Mikiko', '(female)'), + new DungeonTrainer('Fisherman', [new GymPokemon('Poliwag', 12138060, 16)], { weight: 1 }, 'Herbert'), + new DungeonTrainer('Fisherman', [ + new GymPokemon('Magikarp', 12138060, 16), + new GymPokemon('Magikarp', 12138060, 16), + new GymPokemon('Magikarp', 12138060, 16), + ], { weight: 1 }, 'Carl'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [ + { loot: 'Splash Plate' }, + { loot: 'Diveball' }, + ], + legendary: [{ loot: 'Mystic_Water' }], + mythic: [{ loot: 'Heart Scale' }], +}, 12138060, [ + new DungeonBossPokemon('Wishiwashi (School)', 60690300, 20), + new DungeonBossPokemon('Araquanid', 60690300, 20), + new DungeonBossPokemon('Totem Wishiwashi', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Symbiotic Relations')]) }), + new DungeonBossPokemon('Totem Araquanid', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Symbiotic Relations')]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Masquerain', 15172575, 18, new MultiRequirement([ + new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ]), + new WeatherRequirement([WeatherType.Clear, WeatherType.Overcast, WeatherType.Snow, WeatherType.Hail, WeatherType.Blizzard, WeatherType.Harsh_Sunlight, WeatherType.Sandstorm, WeatherType.Fog, WeatherType.Windy]), + ])), + new GymPokemon('Dewpider', 15172575, 18, new MultiRequirement([ + new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ]), + new WeatherRequirement([WeatherType.Clear, WeatherType.Overcast, WeatherType.Snow, WeatherType.Hail, WeatherType.Blizzard, WeatherType.Harsh_Sunlight, WeatherType.Sandstorm, WeatherType.Fog, WeatherType.Windy]), + ])), + new GymPokemon('Totem Araquanid', 30345150, 20, new MultiRequirement([ + new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ]), + new WeatherRequirement([WeatherType.Clear, WeatherType.Overcast, WeatherType.Snow, WeatherType.Hail, WeatherType.Blizzard, WeatherType.Harsh_Sunlight, WeatherType.Sandstorm, WeatherType.Fog, WeatherType.Windy]), + ])), + new GymPokemon('Alomomola', 18207090, 18, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + new WeatherRequirement([WeatherType.Rain, WeatherType.Thunderstorm]), + ])), + new GymPokemon('Wishiwashi (Solo)', 12138060, 18, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + new WeatherRequirement([WeatherType.Rain, WeatherType.Thunderstorm]), + ])), + new GymPokemon('Totem Wishiwashi', 30345150, 20, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + new WeatherRequirement([WeatherType.Rain, WeatherType.Thunderstorm]), + ])), + ], { hide: true, weight: 10, requirement: new QuestLineStepCompletedRequirement('Symbiotic Relations', 1, GameConstants.AchievementOption.less) }, 'of Brooklet Hill'), +], 875000, 5); +dungeonList['Wela Volcano Park'] = new Dungeon('Wela Volcano Park', [ + { pokemon: 'Cubone', options: { weight: 1.7 } }, + { pokemon: 'Kangaskhan', options: { weight: 1.7 } }, + { pokemon: 'Magmar', options: { weight: 1.7 } }, + { pokemon: 'Magby', options: { weight: 1.7 } }, + { pokemon: 'Fletchling', options: { weight: 1.7 } }, + { pokemon: 'Salandit', options: { weight: 1.7 } }, + { pokemon: 'Nihilego', options: { weight: 1.7, hide: true, requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 3) } }, + new DungeonTrainer('Sightseer', [new GymPokemon('Meowth', 12896392, 19)], { weight: 1 }, 'Mariah', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Noibat', 12896392, 20), + new GymPokemon('Kadabra', 12896392, 21), + ], { weight: 1 }, 'Jim', '(male)'), + new DungeonTrainer('Hiker', [new GymPokemon('Roggenrola', 12896392, 19)], { weight: 1 }, 'Calhoun'), +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Rawst' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [ + { loot: 'Flame Plate' }, + { loot: 'Quickball' }, + ], + legendary: [{ loot: 'Charcoal' }], +}, 12896392, [ + new DungeonBossPokemon('Alolan Marowak', 64481960, 22), + new DungeonBossPokemon('Salazzle', 64481960, 22), + new DungeonBossPokemon('Totem Marowak', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Symbiotic Relations')]) }), + new DungeonBossPokemon('Totem Salazzle', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Symbiotic Relations')]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Salandit', 16120490, 20), + new GymPokemon('Salandit', 16120490, 20), + new GymPokemon('Totem Salazzle', 32240980, 22, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Totem Marowak', 32240980, 22, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + ])), + ], { hide: true, weight: 10, requirement: new QuestLineStepCompletedRequirement('Symbiotic Relations', 4, GameConstants.AchievementOption.less) }, 'of Wela Volcano Park'), +], 900000, 7); +dungeonList['Lush Jungle'] = new Dungeon('Lush Jungle', [ + { pokemon: 'Metapod', options: { weight: 1 } }, + { pokemon: 'Paras', options: { weight: 1 } }, + { pokemon: 'Pinsir', options: { weight: 1 } }, + { pokemon: 'Hoothoot', options: { weight: 1 } }, + { pokemon: 'Bonsly', options: { weight: 1 } }, + { pokemon: 'Trumbeak', options: { weight: 1 } }, + { pokemon: 'Fomantis', options: { weight: 1 } }, + { pokemon: 'Morelull', options: { weight: 1, hide: true, requirement: new ObtainedPokemonRequirement('Morelull') } }, + { pokemon: 'Bounsweet', options: { weight: 1 } }, + { pokemon: 'Steenee', options: { weight: 1 } }, + { pokemon: 'Comfey', options: { weight: 1 } }, + { pokemon: 'Oranguru', options: { weight: 1 } }, + { pokemon: 'Passimian', options: { weight: 1 } }, + { pokemon: 'Xurkitree', options: { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 9) } }, // hide UBs because they show up in too many dungeons and will distract the players +], { + common: [ + { loot: 'xClick' }, + { loot: 'xAttack' }, + { loot: 'Mago' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [ + { loot: 'Meadow Plate' }, + { loot: 'Nestball' }, + ], + legendary: [{ loot: 'Miracle_Seed' }], +}, 13090332, [ + new DungeonBossPokemon('Lurantis', 65451660, 24), + new DungeonBossPokemon('Totem Lurantis', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Symbiotic Relations')]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Castform (Sunny)', 8181457, 22), + new GymPokemon('Trumbeak', 8181457, 22), + new GymPokemon('Comfey', 8181457, 22), + new GymPokemon('Kecleon', 8181457, 22), + new GymPokemon('Totem Lurantis', 32725830, 24), + ], { hide: true, weight: 10, requirement: new QuestLineStepCompletedRequirement('Symbiotic Relations', 5, GameConstants.AchievementOption.less) }, 'of Lush Jungle'), +], 925000, 8); +dungeonList['Diglett\'s Tunnel'] = new Dungeon('Diglett\'s Tunnel', [ + { pokemon: 'Zubat', options: { weight: 6.5 } }, + { pokemon: 'Alolan Diglett', options: { weight: 6.5 } }, + { pokemon: 'Nihilego', options: { weight: 6.5, hide: true, requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 3) } }, + new DungeonTrainer('Worker', [new GymPokemon('Shieldon', 13215839, 22)], { weight: 1 }, 'Frank', '(male)'), + new DungeonTrainer('Worker', [ + new GymPokemon('Alolan Diglett', 13215839, 22), + new GymPokemon('Alolan Diglett', 13215839, 22), + ], { weight: 1 }, 'Jeff', '(male)'), + new DungeonTrainer('Worker', [new GymPokemon('Archen', 13215839, 22)], { weight: 1 }, 'Vaclav', '(male)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Ekans', 13215839, 23)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Salandit', 13215839, 23)], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Earth Plate' }, + { loot: 'Duskball' }, + ], + legendary: [{ loot: 'Soft_Sand' }], +}, 13215839, [new DungeonBossPokemon('Larvitar', 66079195, 23)], 930000, 8); +dungeonList['Memorial Hill'] = new Dungeon('Memorial Hill', [ + { pokemon: 'Zubat', options: { weight: 7.5 } }, + { pokemon: 'Gastly', options: { weight: 7.5 } }, + { pokemon: 'Phantump', options: { weight: 7.5 } }, + { pokemon: 'Xurkitree', options: { weight: 7.5, hide: true, requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 9) } }, + new DungeonTrainer('Preschooler', [ + new GymPokemon('Magby', 13286024, 23), + new GymPokemon('Ledian', 13286024, 23), + ], { weight: 1 }, 'Liam', '(male)'), + new DungeonTrainer('Gentleman', [new GymPokemon('Jolteon', 13286024, 24)], { weight: 1 }, 'Smith'), + new DungeonTrainer('Madame', [ + new GymPokemon('Furfrou', 13286024, 24), + new GymPokemon('Comfey', 13286024, 24), + ], { weight: 1 }, 'Sayuri'), + new DungeonTrainer('Punk Girl', [new GymPokemon('Ariados', 13286024, 24)], { weight: 1 }, 'Melissa'), +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [ + { loot: 'Spooky Plate' }, + { loot: 'Duskball' }, + ], + legendary: [{ loot: 'Spell_Tag' }], +}, 13286024, [ + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Alolan Raticate', 66430120, 24)], { weight: 1 }, undefined, '(male)'), +], 950000, 9); +dungeonList['Malie Garden'] = new Dungeon('Malie Garden', [ + { pokemon: 'Alolan Meowth', options: { weight: 1 } }, + { pokemon: 'Psyduck', options: { weight: 1 } }, + { pokemon: 'Poliwhirl', options: { weight: 1 } }, + { pokemon: 'Goldeen', options: { weight: 1 } }, + { pokemon: 'Magikarp', options: { weight: 1 } }, + { pokemon: 'Gyarados', options: { weight: 1 } }, + { pokemon: 'Ledian', options: { weight: 1 } }, + { pokemon: 'Ariados', options: { weight: 1 } }, + { pokemon: 'Masquerain', options: { weight: 1 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 1 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 1 } }, + { pokemon: 'Cottonee', options: { weight: 1 } }, + { pokemon: 'Petilil', options: { weight: 1 } }, + { pokemon: 'Araquanid', options: { weight: 1 } }, + { pokemon: 'Kartana', options: { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 11) } }, + { pokemon: 'Celesteela', options: { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 11) } }, + new DungeonTrainer('Sightseer', [new GymPokemon('Raticate', 13483476, 28)], { weight: 1 }, 'Mitch', '(male)'), + new DungeonTrainer('Preschooler', [new GymPokemon('Cleffa', 13483476, 27)], { weight: 1 }, 'Nancy', '(female)'), + new DungeonTrainer('Sightseer', [new GymPokemon('Raichu', 13483476, 28)], { weight: 1 }, 'Akali', '(female)'), + new DungeonTrainer('Tourist Couple', [ + new GymPokemon('Alolan Vulpix', 13483476, 28), + new GymPokemon('Vulpix', 13483476, 28), + ], { weight: 1, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 2) }, 'Landon and Yuriko'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Black Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [ + { loot: 'Spooky Plate' }, + { loot: 'Luxuryball' }, + ], + legendary: [{ loot: 'Rare Bone' }], +}, 13483476, [ + new DungeonBossPokemon('Alolan Persian', 76702881, 23), + new DungeonTrainer('Tourist Couple', [ + new GymPokemon('Alolan Vulpix', 33708690, 28), + new GymPokemon('Vulpix', 33708690, 28), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 2, GameConstants.AchievementOption.less) }, 'Landon and Yuriko'), + new DungeonTrainer('Team Skull Boss', [ + new GymPokemon('Golisopod', 33708690, 34), + new GymPokemon('Masquerain', 33708690, 34), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 2) }, 'Guzma', '(guzma)'), +], 975000, 21); +dungeonList['Hokulani Observatory'] = new Dungeon('Hokulani Observatory', ['Grubbin', 'Charjabug', 'Elekid', 'Electabuzz', 'Skarmory', 'Dedenne'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + ], + epic: [ + { loot: 'Zap Plate' }, + { loot: 'Iron Plate' }, + ], + legendary: [{ loot: 'Quickball' }], +}, 13883676, [ + new DungeonBossPokemon('Vikavolt', 69418380, 29), + new DungeonBossPokemon('Togedemaru', 69418380, 33), + new DungeonBossPokemon('Totem Vikavolt', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Child of the Stars')]) }), + new DungeonBossPokemon('Totem Togedemaru', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Child of the Stars')]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Charjabug', 13883676, 28, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Charjabug', 20825514, 28, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Totem Vikavolt', 45121947, 29, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Dedenne', 17354595, 31, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + ])), + new GymPokemon('Skarmory', 13883676, 32, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + ])), + new GymPokemon('Totem Togedemaru', 27767352, 33, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + ])), + ], { hide: true, weight: 10, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 2, GameConstants.AchievementOption.less) }, 'of Hokulani Observatory'), +], 1000000, 22); +dungeonList['Thrifty Megamart'] = new Dungeon('Thrifty Megamart', ['Golbat', 'Gastly', 'Haunter', 'Gengar', 'Shuppet', 'Banette', 'Jellicent', 'Klefki'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Purple Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [{ loot: 'Spooky Plate' }], + mythic: [{ loot: 'Lum', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Thrifty Megamart')) }], +}, 14705422, [ + new DungeonBossPokemon('Mimikyu', 73527110, 35), + new DungeonBossPokemon('Totem Mimikyu', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Child of the Stars')]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Gengar', 29410844, 27, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + new DayCyclePartRequirement([3]), + ])), + new GymPokemon('Haunter', 29410844, 27, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Jellicent', 29410844, 33, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([3]), + ])), + new GymPokemon('Banette', 29410844, 32, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([2]), + new DayCyclePartRequirement([3]), + ])), + new GymPokemon('Totem Mimikyu', 36763555, 35), + ], { hide: true, weight: 10, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 5, GameConstants.AchievementOption.less) }, 'of Thrifty Megamart'), + new DungeonBossPokemon('Vivillon (Poké Ball)', 96662023, 60, { + hide: true, + requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Vivillon (Poké Ball)'), + new SpecialEventRequirement('Lunar New Year'), + new QuestLineCompletedRequirement('Child of the Stars'), + ]) + }), +], 1025000, 14); +dungeonList['Ula\'ula Meadow'] = new Dungeon('Ula\'ula Meadow', [ + { pokemon: 'Ledian', options: { weight: 4 } }, + { pokemon: 'Ariados', options: { weight: 4 } }, + { pokemon: 'Cottonee', options: { weight: 4 } }, + { pokemon: 'Petilil', options: { weight: 4 } }, + { pokemon: 'Ribombee', options: { weight: 4 } }, + new DungeonTrainer('Dancer', [new GymPokemon('Floette (Red)', 15127052, 36)], { weight: 1 }, 'Mireille', '(female)'), + new DungeonTrainer('Office Worker', [ + new GymPokemon('Torkoal', 15127052, 36), + new GymPokemon('Whimsicott', 15127052, 36), + ], { weight: 1 }, 'Michelle', '(female)'), + new DungeonTrainer('Lass', [ + new GymPokemon('Sneasel', 15127052, 35), + new GymPokemon('Komala', 15127052, 35), + ], { weight: 1 }, 'Rylee'), + new DungeonTrainer('Golfer', [ + new GymPokemon('Hariyama', 15127052, 39), + new GymPokemon('Alakazam', 15127052, 39), + ], { weight: 1 }, 'Dean', '(male)'), + new DungeonTrainer('Actor', [new GymPokemon('Oricorio (Baile)', 15127052, 36)], { weight: 1 }, 'Meredith'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Cyan Shard' }, + ], + epic: [{ loot: 'Flame Plate' }], + legendary: [{ loot: 'Repeatball' }], +}, 15127052, [ + new DungeonBossPokemon('Floette (Red)', 75635260, 36), + new DungeonBossPokemon('Oricorio (Baile)', 75635260, 36), + new DungeonBossPokemon('Roselia', 75635260, 34, { hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Wednesday) }), + new DungeonBossPokemon('Grotle', 75635260, 36, { hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Wednesday) }), +], 1050000, 16); +dungeonList['Po Town'] = new Dungeon('Po Town', [ + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Spinarak', 15340576, 36)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Trubbish', 15340576, 36)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Drowzee', 15340576, 37)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [ + new GymPokemon('Alolan Raticate', 15340576, 37), + new GymPokemon('Golbat', 15340576, 37), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Skull Grunt', [ + new GymPokemon('Ekans', 15340576, 37), + new GymPokemon('Salandit', 15340576, 37), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [ + new GymPokemon('Fomantis', 15340576, 37), + new GymPokemon('Mareanie', 15340576, 37), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Scraggy', 15340576, 40)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Drowzee', 15340576, 38)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [ + new GymPokemon('Salandit', 15340576, 38), + new GymPokemon('Fomantis', 15340576, 38), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Skull Grunt', [ + new GymPokemon('Trubbish', 15340576, 38), + new GymPokemon('Houndour', 15340576, 38), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Scraggy', 15340576, 38)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Alolan Rattata', 15340576, 38)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Alolan Raticate', 15340576, 38)], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Team Skull Grunt', [ + new GymPokemon('Haunter', 15340576, 38), + new GymPokemon('Alolan Grimer', 15340576, 38), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [ + new GymPokemon('Spinarak', 15340576, 38), + new GymPokemon('Pawniard', 15340576, 38), + new GymPokemon('Golbat', 15340576, 38), + ], { weight: 1 }, undefined, '(female)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [ + { loot: 'Insect Plate' }, + { loot: 'Toxic Plate' }, + { loot: 'Dread Plate' }, + ], + legendary: [ + { loot: 'Max Revive' }, + { loot: 'Poison_Barb' }, + ], +}, 15340576, [ + new DungeonTrainer('Team Skull Boss', [ + new GymPokemon('Golisopod', 25567627, 41), + new GymPokemon('Masquerain', 25567627, 41), + new GymPokemon('Pinsir', 25567627, 41), + ], { weight: 1 }, 'Guzma', '(guzma)'), + new DungeonTrainer('Office Worker', [ + new GymPokemon('Elgyem', 38351440, 40), + new GymPokemon('Metang', 38351440, 40), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 6) }, 'Royce', '(male)'), +], 1075000, 17); +dungeonList['Aether Foundation'] = new Dungeon('Aether Foundation', [ + new DungeonTrainer('Aether Foundation Employee', [ + new GymPokemon('Alolan Dugtrio', 15619682, 40), + new GymPokemon('Toucannon', 15619682, 40), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Aether Foundation Employee', [ + new GymPokemon('Kecleon', 15619682, 40), + new GymPokemon('Stoutland', 15619682, 40), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Aether Foundation Employee', [ + new GymPokemon('Arbok', 15619682, 40), + new GymPokemon('Lurantis', 15619682, 40), + ], { weight: 1 }, undefined, '(female)'), + new DungeonTrainer('Aether Foundation Employee', [ + new GymPokemon('Parasect', 15619682, 40), + new GymPokemon('Drifblim', 15619682, 40), + new GymPokemon('Sudowoodo', 15619682, 40), + ], { weight: 0.75 }, undefined, '(male)'), + new DungeonTrainer('Aether Foundation Employee', [new GymPokemon('Primeape', 15619682, 40)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Aether Foundation Employee', [new GymPokemon('Arcanine', 15619682, 41)], { weight: 1 }, undefined, '(masked)'), + new DungeonTrainer('Aether Foundation Employees', [ + new GymPokemon('Anorith', 15619682, 41), + new GymPokemon('Lileep', 15619682, 41), + ], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Aether Foundation Employees', [ + new GymPokemon('Magmar', 15619682, 42), + new GymPokemon('Houndoom', 15619682, 42), + new GymPokemon('Electabuzz', 15619682, 42), + new GymPokemon('Manectric', 15619682, 42), + ], { weight: 0.25 }, undefined, '(male)'), + new DungeonTrainer('Aether Foundation Employee', [new GymPokemon('Alolan Muk', 15619682, 41)], { weight: 1 }, undefined, '(masked)'), + new DungeonTrainer('Aether Foundation Employee', [new GymPokemon('Magneton', 15619682, 41)], { weight: 1 }, undefined, '(masked)'), + new DungeonTrainer('Aether Foundation Employee', [new GymPokemon('Porygon2', 15619682, 41)], { weight: 1 }, undefined, '(masked)'), + new DungeonTrainer('Aether Foundation Employees', [ + new GymPokemon('Huntail', 15619682, 41), + new GymPokemon('Gorebyss', 15619682, 41), + ], { weight: 1 }, undefined, '(both)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Golbat', 15619682, 42)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Alolan Raticate', 15619682, 42)], { weight: 1 }, undefined, '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Chesto' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + { loot: 'Pink Shard' }, + { loot: 'Cyan Shard' }, + ], + epic: [ + { loot: 'Iron Ball' }, + { loot: 'Mind Plate' }, + ], + legendary: [ + { loot: 'Max Revive' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Aether Foundation')) }, + ], +}, 15619682, [ + new DungeonTrainer('Dulse', [new GymPokemon('Poipole', 78098410, 47)], { weight: 0.25, hide: true, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 12, GameConstants.AchievementOption.less) }), + new DungeonTrainer('Soliera', [new GymPokemon('Poipole', 78098410, 47)], { weight: 0.25, hide: true, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 12, GameConstants.AchievementOption.less) }), + new DungeonTrainer('Aether Branch Chief', [ + new GymPokemon('Claydol', 26032803, 44), + new GymPokemon('Bruxish', 26032803, 44), + new GymPokemon('Hypno', 26032803, 44), + new GymPokemon('You hateful little Trainer!', 26032803, 47, new MultiRequirement([new QuestLineCompletedRequirement('Eater of Light'), new SpecialEventRequirement('Hoopa Day')]), true), + ], { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 9) }, 'Faba', '(faba)'), + new DungeonTrainer('Team Skull Boss', [ + new GymPokemon('Golisopod', 19524602, 45), + new GymPokemon('Vikavolt', 19524602, 45), + new GymPokemon('Masquerain', 19524602, 45), + new GymPokemon('Pinsir', 19524602, 45), + new GymPokemon('You hateful little Trainer!', 19524602, 47, new MultiRequirement([new QuestLineCompletedRequirement('Eater of Light'), new SpecialEventRequirement('Hoopa Day')]), false), + ], { weight: 2.5, hide: true, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 10) }, 'Guzma', '(guzma)'), + new DungeonTrainer('Aether President', [ + new GymPokemon('Clefable', 15619682, 47), + new GymPokemon('Lilligant', 15619682, 47), + new GymPokemon('Lopunny', 15619682, 47), + new GymPokemon('Milotic', 15619682, 47), + new GymPokemon('Bewear', 15619682, 47), + ], { weight: 5, hide: true, requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 11) }, 'Lusamine', '(lusamine)'), +], 1080000, 17); +dungeonList['Exeggutor Island Hill'] = new Dungeon('Exeggutor Island Hill', [ + { pokemon: 'Alolan Exeggutor', options: { weight: 1, hide: true, requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 2, GameConstants.AchievementOption.less), new SpecialEventRequirement('Hoopa Day')]) } }, + { pokemon: 'Alolan Exeggutor', options: { weight: 1, hide: true, requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 2, GameConstants.AchievementOption.less), new SpecialEventRequirement('Hoopa Day')]) } }, + { pokemon: 'Exeggcute', options: { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Emissary of Light', 2) } }, + { pokemon: 'Alolan Exeggutor', options: { weight: 1, hide: true, requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 2, GameConstants.AchievementOption.less), new SpecialEventRequirement('Hoopa Day')]) } }, + { pokemon: 'Pelipper', options: { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Emissary of Light', 2) } }, + { pokemon: 'Alolan Exeggutor', options: { weight: 1, hide: true, requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 2, GameConstants.AchievementOption.less), new SpecialEventRequirement('Hoopa Day')]) } }, + { pokemon: 'Gastrodon (East)', options: { weight: 1, hide: true, requirement: new QuestLineStepCompletedRequirement('Emissary of Light', 2) } }, + { pokemon: 'Alolan Exeggutor', options: { weight: 1, hide: true, requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 2, GameConstants.AchievementOption.less), new SpecialEventRequirement('Hoopa Day')]) } }, + { pokemon: 'Alolan Exeggutor', options: { weight: 1, hide: true, requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 2, GameConstants.AchievementOption.less), new SpecialEventRequirement('Hoopa Day')]) } }, +], { + common: [ + { loot: 'xClick' }, + { loot: 'Dowsing_machine' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [ + { loot: 'Earth Plate' }, + { loot: 'Draco Plate' }, + { loot: 'Meadow Plate' }, + ], + legendary: [{ loot: 'Revive' }], + mythic: [{ loot: 'Heart Scale' }], +}, 15773066, [ + new DungeonBossPokemon('Pinsir', 78865330, 45, { hide: true, requirement: new QuestLineStepCompletedRequirement('Emissary of Light', 2) }), + new DungeonBossPokemon('Alolan Exeggutor', 78865330, 45, { hide: true, requirement: new SpecialEventRequirement('Hoopa Day') }), + new DungeonBossPokemon('Tropius', 78865330, 45, { hide: true, requirement: new QuestLineStepCompletedRequirement('Emissary of Light', 2) }), + new DungeonBossPokemon('Alolan Exeggutor', 78865330, 45), + new DungeonBossPokemon('Serperior', 78865330, 43, { hide: true, requirement: new MultiRequirement([new DayOfWeekRequirement(GameConstants.DayOfWeek.Thursday), new QuestLineStepCompletedRequirement('Emissary of Light', 2)]) }), + new DungeonBossPokemon('Chesnaught', 78865330, 45, { hide: true, requirement: new MultiRequirement([new DayOfWeekRequirement(GameConstants.DayOfWeek.Thursday), new QuestLineStepCompletedRequirement('Emissary of Light', 2)]) }), +], 1100000, 24); +dungeonList['Vast Poni Canyon'] = new Dungeon('Vast Poni Canyon', [ + { pokemon: 'Golbat', options: { weight: 4 } }, + { pokemon: 'Alolan Dugtrio', options: { weight: 4 } }, + { pokemon: 'Machoke', options: { weight: 4 } }, + { pokemon: 'Magikarp', options: { weight: 4 } }, + { pokemon: 'Skarmory', options: { weight: 4 } }, + { pokemon: 'Barboach', options: { weight: 4 } }, + { pokemon: 'Corphish', options: { weight: 4 } }, + { pokemon: 'Basculin (Red-Striped)', options: { weight: 4 } }, + { pokemon: 'Basculin (Blue-Striped)', options: { weight: 4 } }, + { pokemon: 'Boldore', options: { weight: 4 } }, + { pokemon: 'Mienfoo', options: { weight: 4 } }, + { pokemon: 'Carbink', options: { weight: 4 } }, + { pokemon: 'Lycanroc (Midday)', options: { weight: 4 } }, + { pokemon: 'Lycanroc (Midnight)', options: { weight: 4 } }, + { pokemon: 'Jangmo-o', options: { weight: 4 } }, + { pokemon: 'Hakamo-o', options: { weight: 4 } }, + new DungeonTrainer('Veteran', [ + new GymPokemon('Beheeyem', 15992044, 47), + new GymPokemon('Banette', 15992044, 47), + ], { weight: 1 }, 'Harry', '(male)'), + new DungeonTrainer('Backpacker', [new GymPokemon('Spinda', 15992044, 45)], { weight: 1 }, 'Perdy', '(female)'), + new DungeonTrainer('Ace Duo', [ + new GymPokemon('Alolan Sandslash', 15992044, 47), + new GymPokemon('Alolan Ninetales', 15992044, 47), + ], { weight: 1 }, 'Kent and Aimee'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Kabutops', 15992044, 46), + new GymPokemon('Tyrantrum', 15992044, 46), + ], { weight: 1 }, 'Zachary'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Xatu', 15992044, 48), + new GymPokemon('Kangaskhan', 15992044, 48), + new GymPokemon('Dewgong', 15992044, 48), + ], { weight: 1 }, 'Lynn', '(female)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Mawile', 15992044, 47), + new GymPokemon('Weavile', 15992044, 47), + ], { weight: 1 }, 'Junko', '(female)'), + new DungeonTrainer('Scientist', [new GymPokemon('Magnezone', 15992044, 46)], { weight: 1 }, 'Ikaika', '(male)'), + new DungeonTrainer('Punk Girl', [new GymPokemon('Scrafty', 15992044, 46)], { weight: 1 }, 'Anna'), + new DungeonTrainer('Punk Guy', [ + new GymPokemon('Pangoro', 15992044, 46), + new GymPokemon('Crawdaunt', 15992044, 46), + ], { weight: 1 }, 'Adam'), + new DungeonTrainer('Black Belt', [new GymPokemon('Poliwrath', 15992044, 47)], { weight: 1 }, 'Curtis'), + new DungeonTrainer('Team Skull Grunt', [new GymPokemon('Pawniard', 15992044, 46)], { weight: 1 }, undefined, '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Alolan Graveler', 15992044, 47), + new GymPokemon('Lapras', 15992044, 48), + ], { weight: 1 }, 'Hiroshi', '(male)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Talonflame', 15992044, 48), + new GymPokemon('Wailord', 15992044, 48), + new GymPokemon('Glaceon', 15992044, 48), + ], { weight: 1 }, 'Heather', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Noctowl', 15992044, 48), + new GymPokemon('Flygon', 15992044, 48), + new GymPokemon('Slowking', 15992044, 48), + new GymPokemon('Gengar', 15992044, 48), + ], { weight: 1 }, 'Eric', '(male)'), + new DungeonTrainer('Black Belt', [new GymPokemon('Crabominable', 15992044, 47)], { weight: 1 }, 'Terry'), + new DungeonTrainer('Surfer', [new GymPokemon('Golduck', 15992044, 47)], { weight: 1 }, 'Joshah'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + ], + epic: [ + { loot: 'Draco Plate' }, + { loot: 'Pixie Plate' }, + { loot: 'Duskball' }, + { loot: 'Repeatball' }, + ], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'Max Revive' }, + ], + mythic: [ + { loot: 'Heart Scale' }, + { loot: 'Protein', requirement: new ClearDungeonRequirement(200, GameConstants.getDungeonIndex('Vast Poni Canyon')) }, + ], +}, 15992044, [ + new DungeonBossPokemon('Kommo-o', 79960220, 49), + new DungeonBossPokemon('Totem Kommo-o', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Emissary of Light')]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Hakamo-o', 23988066, 32), + new GymPokemon('Scizor', 19190452, 46), + new GymPokemon('Noivern', 23988066, 48), + new GymPokemon('Totem Kommo-o', 55972154, 49), + ], { hide: true, weight: 10, requirement: new QuestLineStepCompletedRequirement('Emissary of Light', 5, GameConstants.AchievementOption.less) }, 'of Vast Poni Canyon'), +], 1125000, 25, undefined, { requirement: new QuestLineStepCompletedRequirement('Emissary of Light', 4) }); +dungeonList['Mina\'s Houseboat'] = new Dungeon('Mina\'s Houseboat', ['Chansey', 'Wingull', 'Pelipper', 'Spritzee', 'Swirlix', 'Cutiefly', 'Comfey', 'Dhelmise'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Lime Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [{ loot: 'Pixie Plate' }], + legendary: [{ loot: 'Fairy_Feather' }], + mythic: [{ loot: 'Heart Scale' }], +}, 16217412, [ + new DungeonBossPokemon('Ribombee', 81087060, 55), + new DungeonBossPokemon('Totem Ribombee', 82543791, 60, { hide: true, requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Champion_Stamp), new QuestLineCompletedRequirement('Eater of Light')]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Blissey', 24326118, 53), + new GymPokemon('Pelipper', 24326118, 52), + new GymPokemon('Totem Ribombee', 32434824, 55), + ], { hide: true, weight: 10, requirement: new QuestLineStepCompletedRequirement('Eater of Light', 3, GameConstants.AchievementOption.less) }, 'of Mina\'s Houseboat'), +], 1150000, 25); +dungeonList['Mount Lanakila'] = new Dungeon('Mount Lanakila', [ + { pokemon: 'Alolan Raticate', options: { weight: 8.67 } }, + { pokemon: 'Alolan Sandshrew', options: { weight: 8.67 } }, + { pokemon: 'Alolan Vulpix', options: { weight: 8.67 } }, + { pokemon: 'Sneasel', options: { weight: 8.67 } }, + { pokemon: 'Snorunt', options: { weight: 8.67 } }, + { pokemon: 'Gumshoos', options: { weight: 8.67 } }, + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Scyther', 16212850, 51), + new GymPokemon('Malamar', 16212850, 52), + ], { weight: 1 }, 'Seth', '(male)'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Shiinotic', 16212850, 51), + new GymPokemon('Clefable', 16212850, 52), + ], { weight: 1 }, 'Kailee', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Lickitung', 16212850, 52), + new GymPokemon('Goodra', 16212850, 52), + ], { weight: 1 }, 'Alonsa', '(female)'), + new DungeonTrainer('Worker', [new GymPokemon('Relicanth', 16212850, 50)], { weight: 1 }, 'Ovid', '(male)'), + new DungeonTrainer('Sparring Partners', [ + new GymPokemon('Bewear', 16212850, 51), + new GymPokemon('Mienfoo', 16212850, 51), + new GymPokemon('Machamp', 16212850, 51), + ], { weight: 1 }, 'Alon and Eimar'), + new DungeonTrainer('Sparring Partners', [ + new GymPokemon('Hawlucha', 16212850, 51), + new GymPokemon('Crabominable', 16212850, 51), + new GymPokemon('Pangoro', 16212850, 51), + ], { weight: 1 }, 'Craig and Jason'), + new DungeonTrainer('Backpacker', [new GymPokemon('Emolga', 16212850, 51)], { weight: 1 }, 'Peren', '(female)'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Pyroar', 16212850, 53), + new GymPokemon('Claydol', 16212850, 53), + new GymPokemon('Milotic', 16212850, 53), + ], { weight: 1 }, 'Ella', '(female)'), + new DungeonTrainer('Collector', [new GymPokemon('Florges (White)', 16212850, 51)], { weight: 1 }, 'Minty'), + new DungeonTrainer('Ace Trainer', [ + new GymPokemon('Vanilluxe', 16212850, 52), + new GymPokemon('Mismagius', 16212850, 53), + ], { weight: 1 }, 'Jada', '(female)'), + new DungeonTrainer('Master & Apprentice', [ + new GymPokemon('Vikavolt', 16212850, 52), + new GymPokemon('Forretress', 16212850, 53), + new GymPokemon('Glalie', 16212850, 53), + new GymPokemon('Tyranitar', 16212850, 53), + new GymPokemon('Bisharp', 16212850, 53), + ], { weight: 1 }, 'Breon and Kaimana'), + new DungeonTrainer('Hiker', [new GymPokemon('Gigalith', 16212850, 51)], { weight: 1 }, 'Anuhea'), + new DungeonTrainer('Veteran', [ + new GymPokemon('Carbink', 16212850, 65), + new GymPokemon('Torkoal', 16212850, 65), + new GymPokemon('Pelipper', 16212850, 65), + new GymPokemon('Alolan Ninetales', 16212850, 65), + new GymPokemon('Gigalith', 16212850, 65), + ], { weight: 1 }, 'Aristo', '(male)'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'Dowsing_machine' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + { loot: 'Pink Shard' }, + { loot: 'Cyan Shard' }, + ], + epic: [ + { loot: 'Icicle Plate' }, + { loot: 'Moonball' }, + ], + legendary: [{ loot: 'Max Revive' }], +}, 16312850, [ + new DungeonBossPokemon('Golbat', 81064250, 50), + new DungeonBossPokemon('Absol', 81064250, 50), + new DungeonBossPokemon('Glalie', 81064250, 50), + new DungeonBossPokemon('Vanilluxe', 81064250, 50), + new DungeonBossPokemon('Necrozma', 83527125, 65, { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eater of Light', 5), new GymBadgeRequirement(BadgeEnums.Champion_Stamp)]) }), + new DungeonTrainer('Trial Site', [ + new GymPokemon('Sneasel', 20266062, 47), + new GymPokemon('Alolan Vulpix', 24319275, 47, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Alolan Ninetales', 40532125, 50, new OneFromManyRequirement([ + new DayCyclePartRequirement([1]), + new DayCyclePartRequirement([2]), + ])), + new GymPokemon('Alolan Sandshrew', 24319275, 47, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + ])), + new GymPokemon('Alolan Sandslash', 40532125, 50, new OneFromManyRequirement([ + new DayCyclePartRequirement([0]), + new DayCyclePartRequirement([3]), + ])), + ], { hide: true, weight: 10, requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('Eater of Light', 5), + new QuestLineCompletedRequirement('Eater of Light', GameConstants.AchievementOption.less), + ]) }, 'of Mount Lanakila'), +], 1175000, 26); +dungeonList['Lake of the Sunne and Moone'] = new Dungeon('Lake of the Sunne and Moone', ['Clefairy', 'Sunkern', 'Skitty', 'Lunatone', 'Solrock', 'Helioptile'], { + common: [ + { loot: 'Lucky_incense' }, + { loot: 'Chesto' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [ + { loot: 'Mind Plate', weight: 2 }, + { loot: 'Iron Plate' }, + { loot: 'Spooky Plate' }, + { loot: 'Moonball' }, + ], +}, 16435490, [ + new DungeonBossPokemon('Cosmog', 82177450, 70), + new DungeonBossPokemon('Minior (Meteor)', 82177450, 60, { hide: true, requirement: new ObtainedPokemonRequirement('Cosmoem', true) }), + new DungeonBossPokemon('Cosmoem', 82177450, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Cosmoem') }), + new DungeonBossPokemon('Minior (Yellow Core)', 82177450, 60, { hide: true, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Solgaleo', true), new ObtainedPokemonRequirement('Necrozma', true)]) }), + new DungeonBossPokemon('Solgaleo', 90673816, 100, { hide: true, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Solgaleo'), new ObtainedPokemonRequirement('Necrozma')]) }), + new DungeonBossPokemon('Minior (Violet Core)', 82177450, 60, { hide: true, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Lunala', true), new ObtainedPokemonRequirement('Necrozma', true)]) }), + new DungeonBossPokemon('Lunala', 90673816, 100, { hide: true, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Lunala'), new ObtainedPokemonRequirement('Necrozma')]) }), +], 1200000, 27); +dungeonList['Ruins of Conflict'] = new Dungeon('Ruins of Conflict', ['Floette (Yellow)', 'Comfey', 'Ampharos', 'Electabuzz'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Cheri' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [ + { loot: 'Zap Plate' }, + { loot: 'Pixie Plate' }, + ], +}, 16435490, [ + new DungeonBossPokemon('Luxray', 82177450, 55), + new DungeonBossPokemon('Granbull', 82177450, 55), + new DungeonBossPokemon('Dedenne', 82177450, 55), + new DungeonBossPokemon('Tapu Koko', 82543791, 60), +], 1200000, 27, undefined, { requirement: new GymBadgeRequirement(BadgeEnums.Champion_Stamp) }); +dungeonList['Ruins of Life'] = new Dungeon('Ruins of Life', ['Floette (White)', 'Comfey', 'Chimecho', 'Munna'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Cheri' }, + ], + rare: [{ loot: 'Pink Shard' }], + epic: [ + { loot: 'Stone Plate' }, + { loot: 'Mind Plate' }, + { loot: 'Pixie Plate' }, + ], + legendary: [{ loot: 'Twisted_Spoon' }], +}, 16435490, [ + new DungeonBossPokemon('Wobbuffet', 82177450, 55), + new DungeonBossPokemon('Granbull', 82177450, 55), + new DungeonBossPokemon('Gardevoir', 82177450, 55), + new DungeonBossPokemon('Tapu Lele', 82543791, 60), +], 1200000, 27, undefined, { requirement: new GymBadgeRequirement(BadgeEnums.Champion_Stamp) }); +dungeonList['Ruins of Abundance'] = new Dungeon('Ruins of Abundance', ['Floette (Orange)', 'Comfey', 'Cottonee', 'Petilil'], { + common: [ + { loot: 'xAttack' }, + { loot: 'Rawst' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [ + { loot: 'Insect Plate' }, + { loot: 'Fist Plate' }, + ], +}, 16435490, [ + new DungeonBossPokemon('Maractus', 82177450, 55), + new DungeonBossPokemon('Granbull', 82177450, 55), + new DungeonBossPokemon('Shiinotic', 82177450, 55), + new DungeonBossPokemon('Tapu Bulu', 82543791, 60), +], 1200000, 27, undefined, { requirement: new GymBadgeRequirement(BadgeEnums.Champion_Stamp) }); +dungeonList['Ruins of Hope'] = new Dungeon('Ruins of Hope', ['Floette (Blue)', 'Comfey', 'Poliwhirl', 'Clamperl'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Aspear' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [ + { loot: 'Splash Plate' }, + { loot: 'Pixie Plate' }, + ], +}, 16435490, [ + new DungeonBossPokemon('Lumineon', 82177450, 55), + new DungeonBossPokemon('Granbull', 82177450, 55), + new DungeonBossPokemon('Azumarill', 82177450, 55), + new DungeonBossPokemon('Tapu Fini', 82543791, 60), +], 1200000, 27, undefined, { requirement: new GymBadgeRequirement(BadgeEnums.Champion_Stamp) }); +dungeonList['Poni Meadow'] = new Dungeon('Poni Meadow', [ + { pokemon: 'Magikarp', options: { weight: 0.5 } }, + { pokemon: 'Dratini', options: { weight: 0.5 } }, + { pokemon: 'Dragonair', options: { weight: 0.5, hide: true, requirement: new ObtainedPokemonRequirement('Dragonair') } }, + { pokemon: 'Cottonee', options: { weight: 0.5 } }, + { pokemon: 'Petilil', options: { weight: 0.5 } }, + { pokemon: 'Ribombee', options: { weight: 0.5 } }, + { pokemon: 'Misdreavus', options: { weight: 0.5 } }, + { pokemon: 'Barboach', options: { weight: 0.5 } }, + new DungeonTrainer('Actor', [new GymPokemon('Oricorio (Sensu)', 16659968, 57)], { weight: 1 }, 'Meredith'), +], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Aspear' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Cyan Shard' }, + ], + epic: [ + { loot: 'Splash Plate' }, + { loot: 'Pixie Plate' }, + { loot: 'Power_Herb' }, + ], +}, 16659968, [ + new DungeonBossPokemon('Oricorio (Sensu)', 83299840, 70), + new DungeonBossPokemon('Floette (Blue)', 83299840, 70), + new DungeonBossPokemon('Leavanny', 83299840, 57, { hide: true, requirement: new DayOfWeekRequirement(GameConstants.DayOfWeek.Wednesday) }), +], 1225000, 28); +dungeonList['Resolution Cave'] = new Dungeon('Resolution Cave', [ + { pokemon: 'Zubat', options: { weight: 4 } }, + { pokemon: 'Alolan Dugtrio', options: { weight: 4 } }, + { pokemon: 'Druddigon', options: { weight: 4 } }, + new DungeonTrainer('Veteran', [ + new GymPokemon('Ribombee', 17114462, 61), + new GymPokemon('Bewear', 17114462, 61), + ], { weight: 1 }, 'Leticia', '(female)'), + new DungeonTrainer('Backpacker', [new GymPokemon('Manectric', 17114462, 59)], { weight: 1 }, 'Maria', '(female)'), + new DungeonTrainer('Hiker', [ + new GymPokemon('Alolan Dugtrio', 17114462, 59), + new GymPokemon('Mudsdale', 17114462, 59), + ], { weight: 1 }, 'Travis'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Pecha' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + { loot: 'Pink Shard' }, + { loot: 'Cyan Shard' }, + ], + epic: [ + { loot: 'Dread Plate' }, + { loot: 'Draco Plate' }, + ], + legendary: [{ loot: 'Dragon_Fang' }], +}, 17114462, [ + new DungeonBossPokemon('Golbat', 85572310, 59), + new DungeonBossPokemon('Noivern', 85572310, 59), + new DungeonBossPokemon('Zygarde', 88406970, 60), + new DungeonBossPokemon('Guzzlord', 90673816, 70), +], 1250000, 30); +//Galar Dungeons +dungeonList['Slumbering Weald Shrine'] = new Dungeon('Slumbering Weald Shrine', ['Galarian Stunfisk', 'Munna', 'Butterfree', 'Orbeetle', 'Whiscash', 'Barboach', 'Magikarp'], { + common: [ + { loot: 'Chesto' }, + { loot: 'Dowsing_machine' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [ + { loot: 'Pixie Plate' }, + { loot: 'Fist Plate' }, + { loot: 'Iron Plate' }, + ], + legendary: [{ loot: 'Silver_Powder' }], +}, 27009504, [ + new DungeonBossPokemon('Corviknight', 135047520, 60), + new DungeonBossPokemon('Galarian Weezing', 135047520, 60), +], 2000000, 32); +dungeonList['Galar Mine'] = new Dungeon('Galar Mine', [ + { pokemon: 'Rolycoly', options: { weight: 2.7 } }, + { pokemon: 'Timburr', options: { weight: 2.7 } }, + { pokemon: 'Roggenrola', options: { weight: 2.7 } }, + { pokemon: 'Woobat', options: { weight: 2.7 } }, + { pokemon: 'Diglett', options: { weight: 2.7 } }, + { pokemon: 'Drilbur', options: { weight: 2.7 } }, + new DungeonTrainer('Worker', [new GymPokemon('Roggenrola', 20767840, 14)], { weight: 1 }, 'Keith', '(male)'), + new DungeonTrainer('Worker', [ + new GymPokemon('Timburr', 20767840, 14), + new GymPokemon('Timburr', 20767840, 14), + new GymPokemon('Timburr', 20767840, 14), + ], { weight: 1 }, 'Georgia', '(female)'), + new DungeonTrainer('Worker', [ + new GymPokemon('Diglett', 20767840, 14), + new GymPokemon('Drilbur', 20767840, 15), + ], { weight: 1 }, 'Sandra', '(female)'), + new DungeonTrainer('Worker', [new GymPokemon('Rolycoly', 20767840, 14)], { weight: 1 }, 'Russell', '(male)'), +], { + common: [ + { loot: 'Ultraball', weight: 5 }, + { loot: 'MediumRestore', weight: 1 }, + { loot: 'Carkol', weight: 0.5 }, + { loot: 'Woobat', weight: 0.5 }, + ], + rare: [ + { loot: 'Crimson Shard' }, + { loot: 'Brown Shard' }, + ], + legendary: [{ loot: 'Rock_Incense' }], +}, 20767840, [new DungeonBossPokemon('Carkol', 103839200, 18)], 1320000, 12); +dungeonList['Galar Mine No. 2'] = new Dungeon('Galar Mine No. 2', [ + { pokemon: 'Shellos (East)', options: { weight: 1.6 } }, + { pokemon: 'Wimpod', options: { weight: 1.6 } }, + { pokemon: 'Binacle', options: { weight: 1.6 } }, + { pokemon: 'Chewtle', options: { weight: 1.6 } }, + { pokemon: 'Scraggy', options: { weight: 1.6 } }, + { pokemon: 'Croagunk', options: { weight: 1.6 } }, + { pokemon: 'Shuckle', options: { weight: 1.6 } }, + { pokemon: 'Noibat', options: { weight: 1.6 } }, + { pokemon: 'Barboach', options: { weight: 1.6 } }, + { pokemon: 'Corphish', options: { weight: 1.6 } }, + new DungeonTrainer('Worker', [new GymPokemon('Carkol', 21294640, 21)], { weight: 1 }, 'Francis', '(male)'), + new DungeonTrainer('Worker', [ + new GymPokemon('Roggenrola', 21294640, 20), + new GymPokemon('Timburr', 21294640, 21), + ], { weight: 1 }, 'Yvonne', '(female)'), + new DungeonTrainer('Team Yell Grunts', [ + new GymPokemon('Thievul', 21294640, 21), + new GymPokemon('Galarian Linoone', 21294640, 22), + new GymPokemon('Liepard', 21294640, 22), + new GymPokemon('Pancham', 21294640, 21), + ], { weight: 1 }, undefined), + new DungeonTrainer('Rail Staff', [ + new GymPokemon('Drilbur', 21294640, 22), + new GymPokemon('Onix', 21294640, 23), + ], { weight: 1 }, 'Vincent'), +], { + common: [ + { loot: 'Dowsing_machine', weight: 4 }, + { loot: 'xClick', weight: 2.5 }, + { loot: 'Galarian Stunfisk', weight: 0.5 }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [ + { loot: 'Earth Plate' }, + { loot: 'Duskball' }, + ], + legendary: [{ loot: 'Star Piece' }], +}, 21294640, [ + new DungeonBossPokemon('Galarian Stunfisk', 106473200, 25), + new DungeonBossPokemon('Gastrodon (East)', 106473200, 50), + new DungeonBossPokemon('Drednaw', 106473200, 24), +], 1430000, 14); +dungeonList['Rose Tower'] = new Dungeon('Rose Tower', [ + new DungeonTrainer('Macro Cosmos', [new GymPokemon('Durant', 26400842, 48)], { weight: 1 }, 'Elijah', '(male)'), + new DungeonTrainer('Macro Cosmos', [new GymPokemon('Cufant', 26400842, 48)], { weight: 1 }, 'Jane', '(female)'), + new DungeonTrainer('Macro Cosmos', [new GymPokemon('Bronzong', 26400842, 48)], { weight: 1 }, 'Mateo', '(male)'), + new DungeonTrainer('Macro Cosmos', [new GymPokemon('Klang', 26400842, 48)], { weight: 1 }, 'Kevin', '(male)'), + new DungeonTrainer('Macro Cosmos', [new GymPokemon('Mawile', 26400842, 48)], { weight: 1 }, 'Carla', '(female)'), + new DungeonTrainer('Macro Cosmos', [new GymPokemon('Steelix', 26400842, 49)], { weight: 1 }, 'Adalyn', '(female)'), + new DungeonTrainer('Macro Cosmos', [new GymPokemon('Galarian Stunfisk', 26400842, 49)], { weight: 1 }, 'Justin', '(male)'), +], { + common: [ + { loot: 'xAttack' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Green Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + { loot: 'Pink Shard' }, + { loot: 'Cyan Shard' }, + { loot: 'Brown Shard' }, + { loot: 'Rose Shard' }, + ], + epic: [{ loot: 'Iron Plate' }], +}, 26400842, [ + new DungeonTrainer('Macro Cosmos', [ + new GymPokemon('Froslass', 26400842, 50), + new GymPokemon('Tsareena', 26400842, 50), + new GymPokemon('Salazzle', 26400842, 50), + new GymPokemon('Milotic', 26400842, 51), + new GymPokemon('Gigantamax Garbodor', 26400842, 52), + ], { weight: 1 }, 'Oleana', '(oleana)'), +], 1800000, 32); +dungeonList['Energy Plant'] = new Dungeon('Energy Plant', ['Steelix', 'Mawile', 'Bronzong', 'Durant', 'Bisharp', 'Doublade', 'Golisopod', 'Galarian Stunfisk'], { + common: [ + { loot: 'Token_collector' }, + { loot: 'Lucky_egg' }, + { loot: 'Pokeball' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + { loot: 'Grey Shard' }, + ], + legendary: [{ loot: 'Metal_Powder' }], +}, 26704124, [ + new DungeonTrainer('Macro Cosmos', [ + new GymPokemon('Escavalier', 26704124, 50), + new GymPokemon('Ferrothorn', 26704124, 50), + new GymPokemon('Perrserker', 26704124, 50), + new GymPokemon('Klinklang', 26704124, 51), + new GymPokemon('Gigantamax Copperajah', 26704124, 52), + ], { hide: true, weight: 3, requirement: new QuestLineStepCompletedRequirement('The Lair of Giants', 36, GameConstants.AchievementOption.less) }, 'Rose', '(rose)'), + new DungeonTrainer('Macro Cosmos', [ + new GymPokemon('Escavalier', 26704124, 50), + new GymPokemon('Ferrothorn', 26704124, 50), + new GymPokemon('Perrserker', 26704124, 50), + new GymPokemon('Klinklang', 26704124, 51), + new GymPokemon('Gigantamax Copperajah', 26704124, 52), + ], { hide: true, weight: 2, requirement: new QuestLineStepCompletedRequirement('The Lair of Giants', 36) }, 'Rose', '(rose)'), + new DungeonBossPokemon('Zacian (Battle Hero)', 169578810, 70, { requirement: new QuestLineStepCompletedRequirement('Sword and Shield', 18) }), + new DungeonBossPokemon('Zamazenta (Battle Hero)', 169578810, 70, { requirement: new QuestLineStepCompletedRequirement('Sword and Shield', 18) }), + new DungeonBossPokemon('Eternatus', 169578810, 70, { hide: true, requirement: new QuestLineStepCompletedRequirement('The Lair of Giants', 36) }), +], 1850000, 32); +dungeonList['Glimwood Tangle'] = new Dungeon('Glimwood Tangle', [ + { pokemon: 'Shiinotic', options: { weight: 1.8 } }, + { pokemon: 'Galarian Ponyta', options: { weight: 1.8 } }, + { pokemon: 'Sinistea', options: { weight: 1.8 } }, + { pokemon: 'Phantump', options: { weight: 1.8 } }, + { pokemon: 'Swirlix', options: { weight: 1.8 } }, + { pokemon: 'Spritzee', options: { weight: 1.8 } }, + { pokemon: 'Passimian', options: { weight: 1.8 } }, + { pokemon: 'Oranguru', options: { weight: 1.8 } }, + { pokemon: 'Impidimp', options: { weight: 1.8 } }, + new DungeonTrainer('Rail Staff', [new GymPokemon('Ninetales', 23764848, 34)], { weight: 1 }, 'Robert'), + new DungeonTrainer('Cook', [ + new GymPokemon('Milcery', 23764848, 33), + new GymPokemon('Sinistea', 23764848, 33), + new GymPokemon('Shiinotic', 23764848, 34), + ], { weight: 1 }, 'Derek'), + new DungeonTrainer('Madame', [ + new GymPokemon('Indeedee (Male)', 23764848, 33), + new GymPokemon('Indeedee (Female)', 23764848, 33), + ], { weight: 1 }, 'Judy'), + new DungeonTrainer('Beauty', [new GymPokemon('Kirlia', 23764848, 34)], { weight: 1 }, 'Jacqueline'), +], { + common: [ + { loot: 'Cheri', weight: 3 }, + { loot: 'Pecha', weight: 3 }, + { loot: 'Impidimp' }, + ], + rare: [ + { loot: 'White Shard' }, + { loot: 'Pink Shard' }, + ], + epic: [ + { loot: 'LargeRestore' }, + { loot: 'Moonball' }, + ], + legendary: [ + { loot: 'Fairy_Feather' }, + { loot: 'Flowering Celebi', ignoreDebuff: true, requirement: new QuestLineStepCompletedRequirement('Secrets of the Jungle', 13) }, + ], +}, 23764848, [ + new DungeonBossPokemon('Hattrem', 118824240, 36), + new DungeonBossPokemon('Morgrem', 118824240, 36), + new DungeonBossPokemon('Indeedee (Male)', 118824240, 36), + new DungeonBossPokemon('Indeedee (Female)', 118824240, 36), +], 1680000, 23); +dungeonList['Dusty Bowl'] = new Dungeon('Dusty Bowl', ['Gurdurr', 'Ferrothorn', 'Klang', 'Meowstic', 'Barbaracle', 'Applin', 'Hattrem', 'Qwilfish', 'Hitmonlee', 'Hitmonchan', 'Koffing'], { + common: [ + { loot: 'Pokeball' }, + { loot: 'Greatball' }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Ochre Shard' }, + { loot: 'Grey Shard' }, + ], + epic: [ + { loot: 'Revive' }, + { loot: 'Rare Bone' }, + ], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'Soft_Sand' }, + ], +}, 22923210, [ + new DungeonBossPokemon('Gigalith', 114616050, 60), + new DungeonBossPokemon('Flygon', 114616050, 60), + new DungeonBossPokemon('Sigilyph', 114616050, 60), + new DungeonBossPokemon('Tyranitar', 114616050, 60), +], 1570000, 20); +//Isle of Armor +dungeonList['Warm-Up Tunnel'] = new Dungeon('Warm-Up Tunnel', ['Sandshrew', 'Cubone', 'Torkoal'], { + common: [ + { loot: 'xClick' }, + { loot: 'Lucky_egg' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Brown Shard' }, + ], + epic: [{ loot: 'Quickball' }], + legendary: [ + { loot: 'Max Revive' }, + { loot: 'Black_Belt' }, + ], +}, 28252100, [new DungeonBossPokemon('Kangaskhan', 141260500, 60)], 1730000, 38); +dungeonList['Courageous Cavern'] = new Dungeon('Courageous Cavern', [ + 'Pincurchin', 'Dwebble', 'Crustle', 'Swoobat', 'Magikarp', 'Shellder', 'Cloyster', 'Tentacool', 'Chewtle', 'Tentacruel', 'Whiscash', + { pokemon: 'Clobbopus', options: { hide: true, requirement: new ObtainedPokemonRequirement('Clobbopus') } }, +], { + common: [ + { loot: 'Pokeball' }, + { loot: 'Greatball' }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + ], + epic: [ + { loot: 'Duskball' }, + { loot: 'Quickball' }, + ], + legendary: [ + { loot: 'Icy Rock' }, + { loot: 'Star Piece' }, + { loot: 'Revive' }, + { loot: 'Oval Stone' }, + { loot: 'Everstone' }, + { loot: 'Hard Stone' }, + ], +}, 26704124, [ + new DungeonBossPokemon('Golisopod', 133520620, 60), + new DungeonBossPokemon('Druddigon', 133520620, 60), + new DungeonBossPokemon('Drednaw', 133520620, 60), +], 1730000, 33); +dungeonList['Brawlers\' Cave'] = new Dungeon('Brawlers\' Cave', ['Whismur', 'Woobat', 'Azurill', 'Lickitung', 'Loudred', 'Swoobat', 'Golduck', 'Poliwag', 'Barboach', 'Whiscash', 'Chansey', 'Psyduck'], { + common: [ + { loot: 'Greatball', weight: 3 }, + { loot: 'Ultraball', weight: 3 }, + { loot: 'MediumRestore' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Rose Shard' }, + ], + epic: [ + { loot: 'Duskball' }, + { loot: 'Nestball' }, + { loot: 'Timerball' }, + { loot: 'Luxuryball' }, + ], + legendary: [ + { loot: 'Rare Bone' }, + { loot: 'Hard Stone' }, + { loot: 'Star Piece' }, + { loot: 'LargeRestore' }, + ], + mythic: [{ loot: 'Protein', requirement: new ClearDungeonRequirement(150, GameConstants.getDungeonIndex('Brawlers\' Cave')) }], +}, 27009504, [ + new DungeonBossPokemon('Gigalith', 135047520, 60), + new DungeonBossPokemon('Druddigon', 135047520, 60), + new DungeonBossPokemon('Poliwrath', 135047520, 60), +], 1730000, 34); +dungeonList['Tower of Darkness'] = new Dungeon('Tower of Darkness', [ + new DungeonTrainer('Master Dojo', [new GymPokemon('Zorua', 28886112, 65)], { weight: 1 }, 'Student'), + new DungeonTrainer('Master Dojo', [new GymPokemon('Scraggy', 28886112, 66)], { weight: 1 }, 'Student'), + new DungeonTrainer('Master Dojo', [new GymPokemon('Inkay', 28886112, 67)], { weight: 1 }, 'Student'), + new DungeonTrainer('Master Dojo', [new GymPokemon('Krokorok', 28886112, 68)], { weight: 1 }, 'Student'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Black Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [{ loot: 'Dread Plate' }], + legendary: [{ loot: 'Black_Glasses' }], +}, 28886112, [ + new DungeonTrainer('Dojo Master', [new GymPokemon('Kubfu', 144430560, 70)], { weight: 1 }, 'Mustard'), +], 2000000, 40, () => { + App.game.party.gainPokemonByName('Urshifu (Single Strike)'); + Notifier.notify({ + message: 'Kubfu evolved into Urshifu (Single Strike)!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); +}); +dungeonList['Tower of Waters'] = new Dungeon('Tower of Waters', [ + new DungeonTrainer('Master Dojo', [new GymPokemon('Psyduck', 28886112, 65)], { weight: 1 }, 'Student'), + new DungeonTrainer('Master Dojo', [new GymPokemon('Krabby', 28886112, 66)], { weight: 1 }, 'Student'), + new DungeonTrainer('Master Dojo', [new GymPokemon('Marill', 28886112, 67)], { weight: 1 }, 'Student'), + new DungeonTrainer('Master Dojo', [new GymPokemon('Poliwhirl', 28886112, 68)], { weight: 1 }, 'Student'), +], { + common: [ + { loot: 'xClick' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Ochre Shard' }, + ], + epic: [{ loot: 'Splash Plate' }], + legendary: [{ loot: 'Mystic_Water' }], +}, 28886112, [ + new DungeonTrainer('Dojo Master', [new GymPokemon('Kubfu', 144430560, 70)], { weight: 1 }, 'Mustard'), +], 2000000, 36, () => { + App.game.party.gainPokemonByName('Urshifu (Rapid Strike)'); + Notifier.notify({ + message: 'Kubfu evolved into Urshifu (Rapid Strike)!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); +}); +//Crown Tundra +dungeonList['Roaring-Sea Caves'] = new Dungeon('Roaring-Sea Caves', [ + 'Zubat', 'Carbink', 'Piloswine', 'Deino', 'Larvitar', 'Riolu', 'Audino', 'Golbat', 'Barboach', 'Basculin (Red-Striped)', 'Basculin (Blue-Striped)', 'Magikarp', 'Feebas', + { pokemon: 'Omanyte', options: { hide: true, requirement: new ObtainedPokemonRequirement('Omanyte') } }, + { pokemon: 'Kabuto', options: { hide: true, requirement: new ObtainedPokemonRequirement('Kabuto') } }, +], { + common: [ + { loot: 'Greatball' }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Blue Shard' }, + { loot: 'Cyan Shard' }, + ], + epic: [ + { loot: 'Duskball' }, + { loot: 'LargeRestore' }, + ], + legendary: [ + { loot: 'Max Revive' }, + { loot: 'Hard Stone' }, + { loot: 'Star Piece' }, + { loot: 'Everstone' }, + { loot: 'Rare Bone' }, + ], +}, 32184888, [ + new DungeonBossPokemon('Kabutops', 160924440, 60, { hide: true, requirement: new ObtainedPokemonRequirement('Kabutops') }), + new DungeonBossPokemon('Omastar', 160924440, 60, { hide: true, requirement: new ObtainedPokemonRequirement('Omastar') }), + new DungeonBossPokemon('Tyranitar', 160924440, 60), + new DungeonBossPokemon('Hydreigon', 160924440, 60), + new DungeonBossPokemon('Lucario', 160924440, 60), +], 1730000, 50); +dungeonList['Rock Peak Ruins'] = new Dungeon('Rock Peak Ruins', [ + 'Stonjourner', 'Rhyperior', 'Aggron', 'Coalossal', 'Barbaracle', 'Gigalith', 'Crustle', + { pokemon: 'Aerodactyl', options: { hide: true, requirement: new ObtainedPokemonRequirement('Aerodactyl') } }, +], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Lucky_incense' }, + ], + rare: [{ loot: 'Brown Shard' }], + epic: [ + { loot: 'Hard Stone' }, + { loot: 'Everstone' }, + { loot: 'Stone Plate' }, + ], +}, 31507840, [ + new DungeonBossPokemon('Relicanth', 149662240, 60), + new DungeonBossPokemon('Regirock', 157539200, 70, { hide: true, requirement: new QuestLineStepCompletedRequirement('The Ancient Golems', 4) }), +], 1920000, 48); +dungeonList['Iron Ruins'] = new Dungeon('Iron Ruins', ['Bronzong', 'Duraludon', 'Copperajah', 'Corviknight', 'Perrserker', 'Bisharp', 'Ferrothorn', 'Excadrill'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Lucky_incense' }, + ], + rare: [{ loot: 'Grey Shard' }], + epic: [ + { loot: 'Hard Stone' }, + { loot: 'Everstone' }, + { loot: 'Iron Plate' }, + ], +}, 31507840, [ + new DungeonBossPokemon('Metagross', 149662240, 60), + new DungeonBossPokemon('Registeel', 157539200, 70, { hide: true, requirement: new QuestLineStepCompletedRequirement('The Ancient Golems', 4) }), +], 1920000, 48); +dungeonList['Iceberg Ruins'] = new Dungeon('Iceberg Ruins', [ + 'Cryogonal', 'Beartic', 'Galarian Darumaka', 'Weavile', 'Vanilluxe', 'Froslass', 'Delibird', + { pokemon: 'Aurorus', options: { hide: true, requirement: new ObtainedPokemonRequirement('Aurorus') } }, +], { + common: [ + { loot: 'Dowsing_machine', weight: 3 }, + { loot: 'Lucky_incense', weight: 3 }, + { loot: 'Cryogonal' }, + ], + rare: [ + { loot: 'White Shard' }, + { loot: 'Cyan Shard' }, + ], + epic: [ + { loot: 'Hard Stone' }, + { loot: 'Everstone' }, + { loot: 'Icicle Plate' }, + ], + legendary: [{ loot: 'Never_Melt_Ice' }], +}, 31507840, [ + new DungeonBossPokemon('Glalie', 149662240, 60), + new DungeonBossPokemon('Regice', 157539200, 70, { hide: true, requirement: new QuestLineStepCompletedRequirement('The Ancient Golems', 4) }), +], 1920000, 54); +dungeonList['Split-Decision Ruins'] = new Dungeon('Split-Decision Ruins', ['Electabuzz', 'Cryogonal', 'Bronzong', 'Stonjourner', 'Galvantula', 'Relicanth', 'Glalie', 'Metagross'], { + common: [ + { loot: 'Dowsing_machine' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'White Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Crimson Shard' }, + ], + legendary: [ + { loot: 'Dragon_Fang' }, + { loot: 'Magnet' }, + ], + mythic: [ + { loot: 'Draco Plate' }, + { loot: 'Zap Plate' }, + ], +}, 32870660, [ + new DungeonBossPokemon('Altaria', 156135635, 60), + new DungeonBossPokemon('Electivire', 156135635, 60), + new DungeonBossPokemon('Regidrago', 164353300, 70), + new DungeonBossPokemon('Regieleki', 164353300, 70), +], 2000000, 52); +dungeonList['Lakeside Cave'] = new Dungeon('Lakeside Cave', ['Zubat', 'Aron', 'Carbink', 'Carkol', 'Ferroseed', 'Mawile', 'Sableye', 'Audino', 'Lairon'], { + common: [ + { loot: 'xClick' }, + { loot: 'Token_collector' }, + ], + rare: [ + { loot: 'Grey Shard' }, + { loot: 'Brown Shard' }, + ], + epic: [{ loot: 'Duskball' }], + legendary: [ + { loot: 'Rare Bone' }, + { loot: 'Star Piece' }, + { loot: 'Hard Stone' }, + { loot: 'Everstone' }, + ], +}, 33216830, [ + new DungeonBossPokemon('Noivern', 166608415, 60), + new DungeonBossPokemon('Aggron', 166608415, 60), + new DungeonBossPokemon('Coalossal', 166608415, 60), +], 1750000, 53); +dungeonList['Dyna Tree Hill'] = new Dungeon('Dyna Tree Hill', ['Magmar', 'Absol', 'Beartic', 'Cryogonal', 'Dubwool', 'Glalie', 'Clefable'], { + common: [ + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Rose Shard' }, + ], + epic: [ + { loot: 'Meadow Plate' }, + { loot: 'Tamato' }, + { loot: 'Hondew' }, + ], + legendary: [{ loot: 'Silk_Scarf' }], +}, 33216830, [new DungeonBossPokemon('Greedent', 166608415, 60)], 1920000, 53); +dungeonList['Tunnel to the Top'] = new Dungeon('Tunnel to the Top', ['Zubat', 'Golbat', 'Carbink', 'Snorunt', 'Gible', 'Bagon', 'Clefairy', 'Clefable', 'Audino', 'Druddigon'], { + common: [ + { loot: 'Rawst' }, + { loot: 'Aspear' }, + { loot: 'xAttack' }, + ], + rare: [ + { loot: 'Brown Shard' }, + { loot: 'Rose Shard' }, + ], + epic: [ + { loot: 'Duskball' }, + { loot: 'Quickball' }, + { loot: 'Moonball' }, + { loot: 'Flame Plate' }, + ], + legendary: [ + { loot: 'Fastball' }, + { loot: 'Repeatball' }, + ], +}, 33565196, [ + new DungeonBossPokemon('Froslass', 167825980, 60), + new DungeonBossPokemon('Garchomp', 167825980, 60), + new DungeonBossPokemon('Salamence', 167825980, 60), +], 2000000, 54); +dungeonList['Crown Shrine'] = new Dungeon('Crown Shrine', ['Dhelmise', 'Hatterene', 'Reuniclus', 'Mr. Rime', 'Mamoswine', 'Roserade'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], + rare: [ + { loot: 'Brown Shard' }, + { loot: 'Rose Shard' }, + ], + epic: [ + { loot: 'Mind Plate' }, + { loot: 'Icicle Plate' }, + { loot: 'Spooky Plate' }, + ], + legendary: [{ loot: 'Max Revive' }], + mythic: [ + { loot: 'Heart Scale', weight: 2 }, + { loot: 'Galarian Darmanitan (Zen)', ignoreDebuff: true }, + ], +}, 33915762, [ + new DungeonBossPokemon('Galarian Rapidash', 161099869, 60), + new DungeonBossPokemon('Abomasnow', 161099869, 60), + new DungeonBossPokemon('Trevenant', 161099869, 60), + new DungeonBossPokemon('Weavile', 161099869, 60), + new DungeonBossPokemon('Calyrex', 169578810, 80, { requirement: new QuestLineStepCompletedRequirement('The Crown of Galar', 8) }), +], 2200000, 55); +// Function, because we don't have 'player' on load +const maxLairQuestStepRandomIndex = (index) => { + SeededRand.seed(+player.trainerId); + return SeededRand.shuffleArray([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32])[index]; +}; +dungeonList['Max Lair'] = new Dungeon('Max Lair', ['Ivysaur', 'Charmeleon', 'Wartortle', 'Grovyle', 'Sceptile', 'Combusken', 'Blaziken', 'Marshtomp', 'Swampert', 'Cradily', 'Cofagrigus', 'Fraxure', 'Toxtricity (Amped)', 'Toxtricity (Low Key)'], { + common: [ + { loot: 'xAttack' }, + { loot: 'xClick' }, + ], + rare: [ + { loot: 'Brown Shard' }, + { loot: 'Rose Shard' }, + ], + epic: [ + { loot: 'Draco Plate' }, + { loot: 'Toxic Plate' }, + ], + legendary: [ + { loot: 'Duskball' }, + { loot: 'Quickball' }, + { loot: 'Fastball' }, + { loot: 'Repeatball' }, + ], + mythic: [ + { loot: 'Carbos', weight: 2 }, + { loot: 'Rare_Candy' }, + ], +}, 33915762, [ + new DungeonBossPokemon('Gigantamax Venusaur', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(0)), new ObtainedPokemonRequirement('Gigantamax Venusaur', true)]) }), + new DungeonBossPokemon('Gigantamax Venusaur', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Venusaur') }), + new DungeonBossPokemon('Gigantamax Charizard', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(1)), new ObtainedPokemonRequirement('Gigantamax Charizard', true)]) }), + new DungeonBossPokemon('Gigantamax Charizard', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Charizard') }), + new DungeonBossPokemon('Gigantamax Blastoise', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(2)), new ObtainedPokemonRequirement('Gigantamax Blastoise', true)]) }), + new DungeonBossPokemon('Gigantamax Blastoise', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Blastoise') }), + new DungeonBossPokemon('Gigantamax Butterfree', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(3)), new ObtainedPokemonRequirement('Gigantamax Butterfree', true)]) }), + new DungeonBossPokemon('Gigantamax Butterfree', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Butterfree') }), + new DungeonBossPokemon('Gigantamax Pikachu', 164353300, 70, { hide: true, weight: 4, requirement: new ObtainedPokemonRequirement('Gigantamax Pikachu', true) }), + new DungeonBossPokemon('Gigantamax Pikachu', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Pikachu') }), + new DungeonBossPokemon('Gigantamax Meowth', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Gigantamax Meowth', true), new QuestLineStepCompletedRequirement('The Lair of Giants', 2)]) }), + new DungeonBossPokemon('Gigantamax Meowth', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Meowth') }), + new DungeonBossPokemon('Gigantamax Machamp', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(4)), new ObtainedPokemonRequirement('Gigantamax Machamp', true)]) }), + new DungeonBossPokemon('Gigantamax Machamp', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Machamp') }), + new DungeonBossPokemon('Gigantamax Gengar', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(5)), new ObtainedPokemonRequirement('Gigantamax Gengar', true)]) }), + new DungeonBossPokemon('Gigantamax Gengar', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Gengar') }), + new DungeonBossPokemon('Gigantamax Kingler', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(6)), new ObtainedPokemonRequirement('Gigantamax Kingler', true)]) }), + new DungeonBossPokemon('Gigantamax Kingler', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Kingler') }), + new DungeonBossPokemon('Gigantamax Lapras', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(7)), new ObtainedPokemonRequirement('Gigantamax Lapras', true)]) }), + new DungeonBossPokemon('Gigantamax Lapras', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Lapras') }), + new DungeonBossPokemon('Gigantamax Eevee', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new ObtainedPokemonRequirement('Gigantamax Eevee', true), new QuestLineStepCompletedRequirement('The Lair of Giants', 2)]) }), + new DungeonBossPokemon('Gigantamax Eevee', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Eevee') }), + new DungeonBossPokemon('Gigantamax Snorlax', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(8)), new ObtainedPokemonRequirement('Gigantamax Snorlax', true)]) }), + new DungeonBossPokemon('Gigantamax Snorlax', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Snorlax') }), + new DungeonBossPokemon('Gigantamax Garbodor', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(9)), new ObtainedPokemonRequirement('Gigantamax Garbodor', true)]) }), + new DungeonBossPokemon('Gigantamax Garbodor', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Garbodor') }), + new DungeonBossPokemon('Gigantamax Melmetal', 169578810, 70, { hide: true, weight: 2, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(10)), new ObtainedPokemonRequirement('Gigantamax Melmetal', true)]) }), + new DungeonBossPokemon('Gigantamax Melmetal', 169578810, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Melmetal') }), + new DungeonBossPokemon('Gigantamax Rillaboom', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(11)), new ObtainedPokemonRequirement('Gigantamax Rillaboom', true)]) }), + new DungeonBossPokemon('Gigantamax Rillaboom', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Rillaboom') }), + new DungeonBossPokemon('Gigantamax Cinderace', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(12)), new ObtainedPokemonRequirement('Gigantamax Cinderace', true)]) }), + new DungeonBossPokemon('Gigantamax Cinderace', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Cinderace') }), + new DungeonBossPokemon('Gigantamax Inteleon', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(13)), new ObtainedPokemonRequirement('Gigantamax Inteleon', true)]) }), + new DungeonBossPokemon('Gigantamax Inteleon', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Inteleon') }), + new DungeonBossPokemon('Gigantamax Corviknight', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(14)), new ObtainedPokemonRequirement('Gigantamax Corviknight', true)]) }), + new DungeonBossPokemon('Gigantamax Corviknight', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Corviknight') }), + new DungeonBossPokemon('Gigantamax Orbeetle', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(15)), new ObtainedPokemonRequirement('Gigantamax Orbeetle', true)]) }), + new DungeonBossPokemon('Gigantamax Orbeetle', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Orbeetle') }), + new DungeonBossPokemon('Gigantamax Drednaw', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(16)), new ObtainedPokemonRequirement('Gigantamax Drednaw', true)]) }), + new DungeonBossPokemon('Gigantamax Drednaw', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Drednaw') }), + new DungeonBossPokemon('Gigantamax Coalossal', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(17)), new ObtainedPokemonRequirement('Gigantamax Coalossal', true)]) }), + new DungeonBossPokemon('Gigantamax Coalossal', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Coalossal') }), + new DungeonBossPokemon('Gigantamax Flapple', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(18)), new ObtainedPokemonRequirement('Gigantamax Flapple', true)]) }), + new DungeonBossPokemon('Gigantamax Flapple', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Flapple') }), + new DungeonBossPokemon('Gigantamax Appletun', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(19)), new ObtainedPokemonRequirement('Gigantamax Appletun', true)]) }), + new DungeonBossPokemon('Gigantamax Appletun', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Appletun') }), + new DungeonBossPokemon('Gigantamax Sandaconda', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(20)), new ObtainedPokemonRequirement('Gigantamax Sandaconda', true)]) }), + new DungeonBossPokemon('Gigantamax Sandaconda', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Sandaconda') }), + new DungeonBossPokemon('Gigantamax Toxtricity', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(21)), new ObtainedPokemonRequirement('Gigantamax Toxtricity', true)]) }), + new DungeonBossPokemon('Gigantamax Toxtricity', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Toxtricity') }), + new DungeonBossPokemon('Gigantamax Centiskorch', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(22)), new ObtainedPokemonRequirement('Gigantamax Centiskorch', true)]) }), + new DungeonBossPokemon('Gigantamax Centiskorch', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Centiskorch') }), + new DungeonBossPokemon('Gigantamax Hatterene', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(23)), new ObtainedPokemonRequirement('Gigantamax Hatterene', true)]) }), + new DungeonBossPokemon('Gigantamax Hatterene', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Hatterene') }), + new DungeonBossPokemon('Gigantamax Grimmsnarl', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(24)), new ObtainedPokemonRequirement('Gigantamax Grimmsnarl', true)]) }), + new DungeonBossPokemon('Gigantamax Grimmsnarl', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Grimmsnarl') }), + new DungeonBossPokemon('Gigantamax Alcremie', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(25)), new ObtainedPokemonRequirement('Gigantamax Alcremie', true)]) }), + new DungeonBossPokemon('Gigantamax Alcremie', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Alcremie') }), + new DungeonBossPokemon('Gigantamax Copperajah', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(26)), new ObtainedPokemonRequirement('Gigantamax Copperajah', true)]) }), + new DungeonBossPokemon('Gigantamax Copperajah', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Copperajah') }), + new DungeonBossPokemon('Gigantamax Duraludon', 164353300, 70, { hide: true, weight: 4, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(27)), new ObtainedPokemonRequirement('Gigantamax Duraludon', true)]) }), + new DungeonBossPokemon('Gigantamax Duraludon', 164353300, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Duraludon') }), + new DungeonBossPokemon('Gigantamax Urshifu (Single Strike)', 169578810, 70, { hide: true, weight: 2, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(28)), new ObtainedPokemonRequirement('Gigantamax Urshifu (Single Strike)', true)]) }), + new DungeonBossPokemon('Gigantamax Urshifu (Single Strike)', 169578810, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Urshifu (Single Strike)') }), + new DungeonBossPokemon('Gigantamax Urshifu (Rapid Strike)', 169578810, 70, { hide: true, weight: 2, requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', () => maxLairQuestStepRandomIndex(29)), new ObtainedPokemonRequirement('Gigantamax Urshifu (Rapid Strike)', true)]) }), + new DungeonBossPokemon('Gigantamax Urshifu (Rapid Strike)', 169578810, 70, { hide: true, requirement: new ObtainedPokemonRequirement('Gigantamax Urshifu (Rapid Strike)') }), + new DungeonBossPokemon('Eternamax Eternatus', 176361964, 100, { hide: true, requirement: new QuestLineCompletedRequirement('The Lair of Giants') }), +], 2500000, 46); +//Hisui Dungeons +dungeonList['Floaro Gardens'] = new Dungeon('Floaro Gardens', ['Wurmple', 'Silcoon', 'Cascoon', 'Pichu', 'Drifloon', 'Shinx', 'Luxio'], { + common: [ + { loot: 'Cheri' }, + { loot: 'Rawst' }, + { loot: 'Leppa' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Nanab' }, + { loot: 'Pinap' }, + ], + rare: [{ loot: 'Green Shard' }], + epic: [ + { loot: 'Meadow Plate' }, + { loot: 'Star Piece' }, + ], + legendary: [{ loot: 'Miracle_Seed' }], +}, 2603000, [ + new DungeonBossPokemon('Beautifly', 10000000, 31), + new DungeonBossPokemon('Dustox', 10000000, 31), + new DungeonBossPokemon('Shaymin (Land)', 10000000, 70, { hide: true, requirement: new DevelopmentRequirement() }), +], 96500, 1); +dungeonList['Oreburrow Tunnel'] = new Dungeon('Oreburrow Tunnel', ['Geodude', 'Machop', 'Zubat', 'Happiny'], { + common: [ + { loot: 'Cheri' }, + { loot: 'Rawst' }, + { loot: 'Leppa' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Nanab' }, + { loot: 'Pinap' }, + ], + rare: [ + { loot: 'Brown Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Stone Plate' }], + legendary: [{ loot: 'Rock_Incense' }], +}, 2603000, [new DungeonBossPokemon('Graveler', 10000000, 28)], 96500, 11); +dungeonList.Heartwood = new Dungeon('Heartwood', ['Geodude', 'Zubat', 'Golbat', 'Psyduck', 'Wurmple', 'Silcoon', 'Cascoon', 'Combee', 'Buneary'], { + common: [ + { loot: 'Cheri' }, + { loot: 'Rawst' }, + { loot: 'Leppa' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Nanab' }, + { loot: 'Pinap' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Lime Shard' }, + ], + epic: [{ loot: 'Insect Plate' }], + legendary: [{ loot: 'Silver_Powder' }], +}, 2603000, [ + new DungeonBossPokemon('Scyther', 10000000, 31), + new DungeonBossPokemon('Beautifly', 10000000, 31), + new DungeonBossPokemon('Dustox', 10000000, 31), +], 96500, 10); +// All Unown +const AncientSolaceonUnownList = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ?!'.split(''); +dungeonList['Ancient Solaceon Ruins'] = new Dungeon('Ancient Solaceon Ruins', ['Paras', 'Carnivine', 'Croagunk', 'Yanma', 'Stunky', 'Kirlia'], { + common: [ + { loot: 'Cheri' }, + { loot: 'Pecha' }, + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Leppa' }, + { loot: 'Razz' }, + ], + rare: [ + { loot: 'Pink Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Mind Plate' }], + legendary: [{ loot: 'Twisted_Spoon' }], +}, 960000, [ + ...AncientSolaceonUnownList.map((char, index) => new DungeonBossPokemon(`Unown (${char})`, 4100000, 30, { + hide: true, + requirement: new OneFromManyRequirement([ + new SeededDateSelectNRequirement(index, AncientSolaceonUnownList.length, 1), + new MultiRequirement([new SeededDateSelectNRequirement(index, AncientSolaceonUnownList.length, 2), new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Ancient Solaceon Ruins'))]), + new MultiRequirement([new SeededDateSelectNRequirement(index, AncientSolaceonUnownList.length, 3), new ClearDungeonRequirement(250, GameConstants.getDungeonIndex('Ancient Solaceon Ruins'))]), + ]), + })), +], 96500, 13); +dungeonList['Shrouded Ruins'] = new Dungeon('Shrouded Ruins', ['Geodude', 'Graveler', 'Rhyhorn', 'Gastly', 'Haunter', 'Lickitung', 'Ralts', 'Kirlia', 'Carnivine', 'Burmy (Sand)'], { + common: [ + { loot: 'Cheri' }, + { loot: 'Pecha' }, + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Leppa' }, + { loot: 'Razz' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + ], + rare: [ + { loot: 'Black Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [ + { loot: 'Spooky Plate' }, + { loot: 'Dread Plate' }, + ], + legendary: [{ loot: 'Black_Glasses' }], +}, 2603000, [ + new DungeonBossPokemon('Lickilicky', 10000000, 52), + new DungeonBossPokemon('Spiritomb', 10000000, 80), +], 96500, 16); +dungeonList['Veilstone Cape'] = new Dungeon('Veilstone Cape', ['Glameow', 'Murkrow', 'Vulpix', 'Mothim', 'Burmy (Trash)', 'Wormadam (Trash)', 'Geodude', 'Graveler'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Green Shard' }, + { loot: 'Blue Shard' }, + ], + epic: [{ loot: 'Flame Plate' }], + legendary: [ + { loot: 'Charcoal' }, + { loot: 'Rock_Incense' }, + ], +}, 2603000, [ + new DungeonBossPokemon('Purugly', 10000000, 45), + new DungeonBossPokemon('Beautifly', 10000000, 47), + new DungeonBossPokemon('Dustox', 10000000, 47), + new DungeonBossPokemon('Hisuian Growlithe', 10000000, 47), +], 96500, 31); +dungeonList['Firespit Island'] = new Dungeon('Firespit Island', ['Graveler', 'Magby', 'Magmar'], { + common: [ + { loot: 'Cheri' }, + { loot: 'Pecha' }, + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Leppa' }, + { loot: 'Razz' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Grey Shard' }, + ], + epic: [ + { loot: 'Flame Plate' }, + { loot: 'Iron Plate' }, + ], + legendary: [ + { loot: 'Charcoal' }, + { loot: 'Metal_Powder' }, + ], +}, 2603000, [ + new DungeonBossPokemon('Ninetales', 10000000, 61), + new DungeonBossPokemon('Heatran', 10000000, 70, { hide: true, requirement: new DevelopmentRequirement() }), +], 96500, 36); +dungeonList['Ancient Wayward Cave'] = new Dungeon('Ancient Wayward Cave', ['Zubat', 'Golbat', 'Barboach', 'Whiscash', 'Gible'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Chesto', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Aspear', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Mago', weight: 2 }, + { loot: 'Iapapa', weight: 2 }, + { loot: 'Wiki', weight: 2 }, + { loot: 'Aguav', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Cyan Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Revive' }], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'MediumRestore' }, + { loot: 'LargeRestore' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Ancient Wayward Cave')) }, + ], +}, 2603000, [new DungeonBossPokemon('Crobat', 10000000, 60)], 96500, 38); +dungeonList['Ancient Quarry'] = new Dungeon('Ancient Quarry', ['Bronzor', 'Goomy', 'Stunky', 'Croagunk', 'Skuntank', 'Toxicroak'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Chesto', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Aspear', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Mago', weight: 2 }, + { loot: 'Iapapa', weight: 2 }, + { loot: 'Wiki', weight: 2 }, + { loot: 'Aguav', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Grey Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Revive' }], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'MediumRestore' }, + { loot: 'LargeRestore' }, + { loot: 'Metal_Powder' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Ancient Quarry')) }, + ], +}, 2603000, [ + new DungeonBossPokemon('Bronzong', 10000000, 55), + new DungeonBossPokemon('Hisuian Sliggoo', 10000000, 55), +], 96500, 39); +dungeonList['Primeval Grotto'] = new Dungeon('Primeval Grotto', ['Bronzor', 'Scyther', 'Gligar', 'Nosepass', 'Gyarados', 'Cherubi', 'Cherrim (Overcast)'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Chesto', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Aspear', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Mago', weight: 2 }, + { loot: 'Iapapa', weight: 2 }, + { loot: 'Wiki', weight: 2 }, + { loot: 'Aguav', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Brown Shard' }, + { loot: 'Purple Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Revive' }], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'MediumRestore' }, + { loot: 'LargeRestore' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Primeval Grotto')) }, + ], +}, 2603000, [ + new DungeonBossPokemon('Probopass', 10000000, 71), + new DungeonBossPokemon('Gliscor', 10000000, 71), + new DungeonBossPokemon('Hisuian Sneasel', 10000000, 71), +], 96500, 42); +dungeonList['Clamberclaw Cliffs'] = new Dungeon('Clamberclaw Cliffs', ['Gligar', 'Geodude', 'Graveler', 'Gastly', 'Haunter', 'Gible', 'Burmy (Sand)', 'Wormadam (Sand)', 'Bronzor'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Chesto', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Aspear', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Mago', weight: 2 }, + { loot: 'Iapapa', weight: 2 }, + { loot: 'Wiki', weight: 2 }, + { loot: 'Aguav', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Black Shard' }, + { loot: 'Purple Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [ + { loot: 'Revive' }, + { loot: 'Toxic Plate' }, + ], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'MediumRestore' }, + { loot: 'LargeRestore' }, + { loot: 'Poison_Barb' }, + { loot: 'Black_Glasses' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Clamberclaw Cliffs')) }, + ], +}, 2603000, [ + new DungeonBossPokemon('Bronzong', 10000000, 44), + new DungeonBossPokemon('Gabite', 10000000, 47), + new DungeonBossPokemon('Darkrai', 10000000, 70, { hide: true, requirement: new DevelopmentRequirement() }), +], 96500, 40); +dungeonList['Celestica Ruins'] = new Dungeon('Celestica Ruins', ['Geodude', 'Graveler', 'Nosepass', 'Gligar', 'Burmy (Sand)', 'Gastly', 'Haunter', 'Bonsly', 'Misdreavus'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Chesto', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Aspear', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Mago', weight: 2 }, + { loot: 'Iapapa', weight: 2 }, + { loot: 'Wiki', weight: 2 }, + { loot: 'Aguav', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Lime Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Revive' }], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'MediumRestore' }, + { loot: 'LargeRestore' }, + { loot: 'Silver_Powder' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Celestica Ruins')) }, + ], +}, 2603000, [ + new DungeonBossPokemon('Sudowoodo', 10000000, 57), + new DungeonBossPokemon('Wormadam (Sand)', 10000000, 57), +], 96500, 40); +dungeonList['Sacred Plaza'] = new Dungeon('Sacred Plaza', ['Geodude', 'Graveler', 'Rhyhorn', 'Gastly', 'Haunter', 'Burmy (Sand)', 'Wormadam (Sand)', 'Nosepass', 'Luxio', 'Chingling', 'Chimecho', 'Misdreavus', 'Rotom', 'Hisuian Voltorb'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Chesto', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Aspear', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Mago', weight: 2 }, + { loot: 'Iapapa', weight: 2 }, + { loot: 'Wiki', weight: 2 }, + { loot: 'Aguav', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Revive' }], + legendary: [ + { loot: 'Star Piece' }, + { loot: 'MediumRestore' }, + { loot: 'LargeRestore' }, + { loot: 'Soft_Sand' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Celestica Ruins')) }, + ], +}, 2603000, [ + new DungeonBossPokemon('Rhydon', 10000000, 71), + new DungeonBossPokemon('Luxray', 10000000, 55), +], 96500, 45); +dungeonList['Avalugg\'s Legacy'] = new Dungeon('Avalugg\'s Legacy', ['Hisuian Sneasel', 'Bergmite', 'Swinub', 'Piloswine', 'Drifloon', 'Drifblim', 'Bibarel', 'Glalie', 'Froslass'], { + common: [ + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Leppa' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Razz' }, + ], + rare: [ + { loot: 'White Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Icicle Plate' }], + legendary: [{ loot: 'Never_Melt_Ice' }], +}, 2603000, [ + new DungeonBossPokemon('Mamoswine', 10000000, 68), + new DungeonBossPokemon('Hisuian Avalugg', 10000000, 51), +], 96500, 48); +dungeonList['Ice Column Chamber'] = new Dungeon('Ice Column Chamber', ['Bergmite', 'Misdreavus'], { + common: [ + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Pecha' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Razz' }, + ], + rare: [{ loot: 'White Shard' }], + epic: [{ loot: 'Icicle Plate' }], +}, 2603000, [new DungeonBossPokemon('Froslass', 10000000, 72)], 96500, 51); +dungeonList['Icepeak Cavern'] = new Dungeon('Icepeak Cavern', ['Bergmite', 'Misdreavus', 'Hisuian Zorua'], { + common: [ + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Pecha' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Razz' }, + ], + rare: [ + { loot: 'White Shard' }, + { loot: 'Purple Shard' }, + ], + epic: [{ loot: 'Icicle Plate' }], + legendary: [{ loot: 'Never_Melt_Ice' }], +}, 2603000, [new DungeonBossPokemon('Hisuian Zoroark', 10000000, 67)], 96500, 49); +dungeonList['Ancient Snowpoint Temple'] = new Dungeon('Ancient Snowpoint Temple', ['Zubat', 'Golbat', 'Graveler', 'Ralts', 'Kirlia', 'Glalie', 'Froslass', 'Bronzor', 'Bronzong'], { + common: [ + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Pecha' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Razz' }, + ], + rare: [{ loot: 'White Shard' }], + // epic: [{loot: 'Blank Plate'}], + legendary: [{ loot: 'Silk_Scarf' }], +}, 2603000, [ + new DungeonBossPokemon('Gallade', 10000000, 70), + new DungeonBossPokemon('Regigigas', 10000000, 70, { hide: true, requirement: new DevelopmentRequirement() }), +], 96500, 54); +dungeonList['Seaside Hollow'] = new Dungeon('Seaside Hollow', ['Octillery', 'Phione'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [{ loot: 'Blue Shard' }], + epic: [{ loot: 'Splash Plate' }], + legendary: [{ loot: 'Mystic_Water' }], +}, 2603000, [new DungeonBossPokemon('Manaphy', 10000000, 50)], 96500, 36); +dungeonList['Ancient Lake Verity'] = new Dungeon('Ancient Lake Verity', ['Magikarp', 'Gyarados', 'Luxio', 'Luxray', 'Wormadam (Plant)', 'Drifblim', 'Togekiss'], { + common: [ + { loot: 'Cheri' }, + { loot: 'Rawst' }, + { loot: 'Leppa' }, + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Razz' }, + { loot: 'Nanab' }, + { loot: 'Pinap' }, + ], + rare: [ + { loot: 'Red Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Draco Plate' }], + legendary: [{ loot: 'Twisted_Spoon' }], +}, 2603000, [ + new DungeonBossPokemon('Hisuian Goodra', 10000000, 58), + new DungeonBossPokemon('Mesprit', 10000000, 70, { hide: true, requirement: new DevelopmentRequirement() }), +], 96500, 3); +dungeonList['Ancient Lake Valor'] = new Dungeon('Ancient Lake Valor', ['Graveler', 'Barboach', 'Whiscash'], { + common: [ + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Cheri' }, + { loot: 'Pecha' }, + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Leppa' }, + { loot: 'Razz' }, + ], + rare: [ + { loot: 'Blue Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Draco Plate' }], + legendary: [{ loot: 'Twisted_Spoon' }], +}, 2603000, [ + new DungeonBossPokemon('Overqwil', 10000000, 58), + new DungeonBossPokemon('Azelf', 10000000, 70, { hide: true, requirement: new DevelopmentRequirement() }), +], 96500, 16); +dungeonList['Ancient Lake Acuity'] = new Dungeon('Ancient Lake Acuity', ['Abra', 'Kadabra', 'Chingling', 'Chimecho', 'Burmy (Trash)', 'Wormadam (Trash)', 'Rufflet', 'Basculin (White-Striped)'], { + common: [ + { loot: 'Oran' }, + { loot: 'Sitrus' }, + { loot: 'Chesto' }, + { loot: 'Aspear' }, + { loot: 'Leppa' }, + { loot: 'Razz' }, + ], + rare: [ + { loot: 'Yellow Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [{ loot: 'Draco Plate' }], + legendary: [{ loot: 'Twisted_Spoon' }], +}, 2603000, [ + new DungeonBossPokemon('Hisuian Zoroark', 10000000, 58), + new DungeonBossPokemon('Uxie', 10000000, 70, { hide: true, requirement: new DevelopmentRequirement() }), +], 96500, 54); +dungeonList['Temple of Sinnoh'] = new Dungeon('Temple of Sinnoh', ['Bronzong', 'Floatzel', 'Magnezone', 'Lumineon', 'Lucario', 'Bibarel', 'Garchomp'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Chesto', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Aspear', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Figy', weight: 2 }, + { loot: 'Mago', weight: 2 }, + { loot: 'Iapapa', weight: 2 }, + { loot: 'Wiki', weight: 2 }, + { loot: 'Aguav', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Red Shard' }, + { loot: 'Blue Shard' }, + { loot: 'Yellow Shard' }, + { loot: 'Green Shard' }, + { loot: 'Purple Shard' }, + { loot: 'Grey Shard' }, + { loot: 'Ochre Shard' }, + { loot: 'Crimson Shard' }, + { loot: 'Lime Shard' }, + { loot: 'Black Shard' }, + { loot: 'White Shard' }, + { loot: 'Pink Shard' }, + { loot: 'Cyan Shard' }, + { loot: 'Brown Shard' }, + { loot: 'Rose Shard' }, + // {loot: 'Beige Shard'}, + ], + epic: [ + // {loot: 'Blank Plate'}, + { loot: 'Draco Plate' }, + { loot: 'Dread Plate' }, + { loot: 'Earth Plate' }, + { loot: 'Fist Plate' }, + { loot: 'Flame Plate' }, + { loot: 'Icicle Plate' }, + { loot: 'Insect Plate' }, + { loot: 'Iron Plate' }, + { loot: 'Meadow Plate' }, + { loot: 'Mind Plate' }, + { loot: 'Pixie Plate' }, + { loot: 'Sky Plate' }, + { loot: 'Splash Plate' }, + { loot: 'Spooky Plate' }, + { loot: 'Stone Plate' }, + { loot: 'Toxic Plate' }, + { loot: 'Zap Plate' }, + { loot: 'Revive' }, + ], + legendary: [ + { loot: 'MediumRestore' }, + { loot: 'LargeRestore' }, + { loot: 'Silk_Scarf' }, + ], + mythic: [ + { loot: 'Max Revive' }, + { loot: 'Lum', requirement: new ClearDungeonRequirement(100, GameConstants.getDungeonIndex('Temple of Sinnoh')) }, + ], +}, 1350400, [ + new DungeonTrainer('The Galaxy Team\'s Kamado', [ + new GymPokemon('Hisuian Braviary', 1128000, 61), + new GymPokemon('Golem', 1128000, 61), + new GymPokemon('Clefable', 1128000, 61), + new GymPokemon('Snorlax', 1128000, 61), + ], { weight: 4 }), + new DungeonBossPokemon('Dialga (Origin)', 11880000, 70, { hide: true, requirement: new DevelopmentRequirement() }), + new DungeonBossPokemon('Palkia (Origin)', 11880000, 70, { hide: true, requirement: new DevelopmentRequirement() }), +], 96500, 46); +dungeonList['Turnback Cave'] = new Dungeon('Turnback Cave', ['Gabite', 'Hisuian Sliggoo', 'Dusclops', 'Gengar', 'Rotom', 'Drifblim', 'Hisuian Zorua'], { + common: [ + { loot: 'Cheri', weight: 2 }, + { loot: 'Pecha', weight: 2 }, + { loot: 'Rawst', weight: 2 }, + { loot: 'Oran', weight: 2 }, + { loot: 'Sitrus', weight: 2 }, + { loot: 'Nanab', weight: 2 }, + { loot: 'Leppa', weight: 2 }, + { loot: 'Pinap', weight: 2 }, + { loot: 'Razz', weight: 2 }, + { loot: 'Pokeball', weight: 2 }, + { loot: 'Greatball', weight: 1.5 }, + { loot: 'Ultraball' }, + ], + rare: [ + { loot: 'Purple Shard' }, + { loot: 'Black Shard' }, + ], + epic: [ + { loot: 'Spooky Plate' }, + { loot: 'Draco Plate' }, + ], + legendary: [ + { loot: 'Spell_Tag' }, + { loot: 'Dragon_Fang' }, + ], +}, 2603000, [ + new DungeonBossPokemon('Garchomp', 10000000, 58), + new DungeonBossPokemon('Dusknoir', 10000000, 58), + new DungeonBossPokemon('Mismagius', 10000000, 58), + new DungeonBossPokemon('Froslass', 10000000, 58), + new DungeonBossPokemon('Giratina (Origin)', 10000000, 70), +], 96500, 32); +// Paldea Dungeons +dungeonList['Inlet Grotto'] = new Dungeon('Inlet Grotto', ['Diglett', 'Houndour', 'Yungoos'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], +}, 33915762, [new DungeonBossPokemon('Houndoom', 161099869, 30)], 2200000, 1); +//This is ridiculous. Should certainly be split up if a way to do so is found, and possibly some encounters removed outright. +dungeonList['Glaseado Mountain'] = new Dungeon('Glaseado Mountain', ['Magneton', 'Haunter', 'Sneasel', 'Ursaring', 'Delibird', 'Kirlia', 'Gardevoir', 'Vigoroth', 'Grumpig'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], +}, 33915762, [ + new DungeonBossPokemon('Spiritomb', 161099869, 30), + new DungeonBossPokemon('Cetitan', 161099869, 30), + new DungeonBossPokemon('Arctibax', 161099869, 30), +], 2200000, 1); +dungeonList['Grasswither Shrine'] = new Dungeon('Grasswither Shrine', ['Shiftry', 'Cacturne'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], +}, 33915762, [new DungeonBossPokemon('Wo-Chien', 161099869, 60)], 2200000, 1); +dungeonList['Icerend Shrine'] = new Dungeon('Icerend Shrine', ['Weavile'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], +}, 33915762, [new DungeonBossPokemon('Chien-Pao', 161099869, 60)], 2200000, 1); +dungeonList['Groundblight Shrine'] = new Dungeon('Groundblight Shrine', ['Krookodile'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], +}, 33915762, [new DungeonBossPokemon('Ting-Lu', 161099869, 60)], 2200000, 1); +dungeonList['Firescourge Shrine'] = new Dungeon('Firescourge Shrine', ['Houndoom'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], +}, 33915762, [new DungeonBossPokemon('Chi-Yu', 161099869, 60)], 2200000, 1); +// May be split up into two areas (Area Zero: Heights & Area Zero: Lower (Needs better name)). +//To have some of the regular Paradox mons be exclusive to one area, I am likely going to have Slither Wing/Iron Moth and Sandy Shocks/Iron Thorns be exclusive to Area Zero (pretty sure they actually are, anyway), and Great Tusk/Iron Treads and Flutter Mane/Iron Jugulis be exclusive to Area Zero Depths +dungeonList['Area Zero'] = new Dungeon('Area Zero', ['Venomoth', 'Meditite', 'Medicham', 'Braviary', 'Corviknight', 'Floette (White)', 'Raichu', 'Jumpluff', 'Girafarig', 'Volcarona', 'Frosmoth', 'Farigiraf', 'Swablu', 'Altaria', 'Flamigo', 'Phanpy', 'Donphan', 'Talonflame', 'Lycanroc (Midday)', 'Lycanroc (Midnight)', 'Garganacl', 'Masquerain', 'Tadbulb', 'Bellibolt', 'Pawniard', 'Bisharp', 'Numel', 'Camerupt', 'Sneasel', 'Weavile', 'Scream Tail', 'Iron Bundle', 'Brute Bonnet', 'Iron Hands', 'Flutter Mane', 'Iron Jugulis', 'Slither Wing', 'Iron Moth', 'Sandy Shocks', 'Iron Thorns'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], +}, 33915762, [ + new DungeonBossPokemon('Glimmora', 161099869, 30, { weight: 4 }), + new DungeonBossPokemon('Roaring Moon', 161099869, 30, { hide: true, weight: 2, requirement: new TemporaryBattleRequirement('Paradise Protection Protocol') }), + new DungeonBossPokemon('Iron Valiant', 161099869, 30, { hide: true, weight: 2, requirement: new TemporaryBattleRequirement('Paradise Protection Protocol') }), +], 2200000, 1); +dungeonList['Area Zero Depths'] = new Dungeon('Area Zero Depths', ['Glimmet', 'Dunsparce', 'Gible', 'Gabite', 'Sableye', 'Garganacl', 'Greavard', 'Houndstone', 'Dugtrio', 'Zweilous', 'Dreepy', 'Drakloak', 'Espathra', 'Dudunsparce (Two-Segment)', 'Great Tusk', 'Iron Treads', 'Scream Tail', 'Iron Bundle', 'Flutter Mane', 'Iron Jugulis', 'Brute Bonnet', 'Iron Hands', /*Slither Wing and Iron Moth are only found in Grass. I have never seen Grass, nor these Pokémon, in the depths, so they may not actually spawn here*/ 'Slither Wing', 'Iron Moth', /*Sandy Shocks have the same situation as Slither Wing and Iron Moth, except in Rocky environment*/ 'Sandy Shocks', 'Iron Thorns'], { + common: [ + { loot: 'Lucky_egg' }, + { loot: 'Lucky_incense' }, + ], + epic: [{ loot: 'Heart Scale' }], +}, 33915762, [ + new DungeonBossPokemon('Glimmora', 161099869, 30, { weight: 5 }), + new DungeonBossPokemon('Koraidon', 161099869, 30, { hide: true, requirement: new TemporaryBattleRequirement('Paradise Protection Protocol') }), + new DungeonBossPokemon('Miraidon', 161099869, 30, { hide: true, requirement: new TemporaryBattleRequirement('Paradise Protection Protocol') }), +], 2200000, 1); +/// +/// +class DungeonBattle extends Battle { + /** + * Award the player with money and exp, and throw a Pokéball if applicable + */ + static defeatPokemon() { + var _a, _b; + const enemyPokemon = this.enemyPokemon(); + // Handle Trainer Pokemon defeat + if (this.trainer()) { + this.defeatTrainerPokemon(); + return; + } + DungeonRunner.fighting(false); + if (DungeonRunner.fightingLootEnemy) { + DungeonRunner.fightingLootEnemy = false; + } + else if (!DungeonRunner.fightingBoss()) { + GameHelper.incrementObservable(DungeonRunner.encountersWon); + } + if (DungeonRunner.fightingBoss()) { + DungeonRunner.fightingBoss(false); + DungeonRunner.defeatedBoss(enemyPokemon.name); + } + enemyPokemon.defeat(); + App.game.breeding.progressEggsBattle(DungeonRunner.dungeon.difficultyRoute, player.region); + player.lowerItemMultipliers(MultiplierDecreaser.Battle); + // Clearing Dungeon tile + DungeonRunner.map.currentTile().type(GameConstants.DungeonTileType.empty); + DungeonRunner.map.currentTile().calculateCssClass(); + // Attempting to catch Pokemon + const isShiny = enemyPokemon.shiny; + const isShadow = enemyPokemon.shadow == GameConstants.ShadowStatus.Shadow; + const pokeBall = App.game.pokeballs.calculatePokeballToUse(enemyPokemon.id, isShiny, isShadow, enemyPokemon.encounterType); + const route = ((_b = (_a = player.town) === null || _a === void 0 ? void 0 : _a.dungeon) === null || _b === void 0 ? void 0 : _b.difficultyRoute) || 1; + const region = player.region; + if (pokeBall !== GameConstants.Pokeball.None) { + this.prepareCatch(enemyPokemon, pokeBall); + setTimeout(() => { + this.attemptCatch(enemyPokemon, route, region); + if (DungeonRunner.defeatedBoss()) { + DungeonRunner.dungeonWon(); + } + }, App.game.pokeballs.calculateCatchTime(pokeBall)); + } + else if (DungeonRunner.defeatedBoss()) { + DungeonRunner.dungeonWon(); + } + } + /** + * Handles defeating a trainer Pokemon + */ + static defeatTrainerPokemon() { + var _a, _b; + const enemyPokemon = this.enemyPokemon(); + enemyPokemon.defeat(true); + GameHelper.incrementObservable(this.trainerPokemonIndex); + App.game.breeding.progressEggsBattle(DungeonRunner.dungeon.difficultyRoute, player.region); + player.lowerItemMultipliers(MultiplierDecreaser.Battle); + if (this.enemyPokemon().shadow == GameConstants.ShadowStatus.Shadow) { + // Attempting to catch Pokemon + const isShiny = enemyPokemon.shiny; + const isShadow = enemyPokemon.shadow == GameConstants.ShadowStatus.Shadow; + const pokeBall = App.game.pokeballs.calculatePokeballToUse(enemyPokemon.id, isShiny, isShadow, enemyPokemon.encounterType); + const route = ((_b = (_a = player.town) === null || _a === void 0 ? void 0 : _a.dungeon) === null || _b === void 0 ? void 0 : _b.difficultyRoute) || 1; + const region = player.region; + if (pokeBall !== GameConstants.Pokeball.None) { + this.prepareCatch(enemyPokemon, pokeBall); + setTimeout(() => { + this.attemptCatch(enemyPokemon, route, region); + DungeonBattle.nextTrainerPokemon(); + }, App.game.pokeballs.calculateCatchTime(pokeBall)); + } + else { + DungeonBattle.nextTrainerPokemon(); + } + } + else { + DungeonBattle.nextTrainerPokemon(); + } + } + static nextTrainerPokemon() { + // No Pokemon left, trainer defeated + if (this.trainerPokemonIndex() >= this.trainer().getTeam().length) { + // rewards for defeating trainer + if (this.trainer().options.reward) { + // Custom reward amount on defeat + App.game.wallet.addAmount(this.trainer().options.reward); + } + else { + const dungeonCost = DungeonRunner.dungeon.tokenCost; + // Reward back 50% or 100% (boss) of the total dungeon DT cost as money (excludes achievement multiplier) + const money = Math.round(dungeonCost * (DungeonRunner.fightingBoss() ? 1 : 0.5)); + App.game.wallet.gainMoney(money, true); + // Reward back 4% or 10% (boss) of the total dungeon DT cost (excludes achievement multiplier) + const tokens = Math.round(dungeonCost * (DungeonRunner.fightingBoss() ? 0.1 : 0.04)); + App.game.wallet.gainDungeonTokens(tokens, true); + } + DungeonRunner.fighting(false); + GameHelper.incrementObservable(DungeonRunner.encountersWon); + if (DungeonRunner.fightingBoss()) { + DungeonRunner.defeatedBoss(DungeonBattle.trainer().name); + } + this.trainer(null); + this.trainerPokemonIndex(0); + // Clearing Dungeon tile + DungeonRunner.map.currentTile().type(GameConstants.DungeonTileType.empty); + DungeonRunner.map.currentTile().calculateCssClass(); + // Update boss + if (DungeonRunner.fightingBoss()) { + DungeonRunner.fightingBoss(false); + DungeonRunner.dungeonWon(); + } + // Generate next trainer Pokemon + } + else { + this.generateTrainerPokemon(); + } + } + static generateNewEnemy() { + this.catching(false); + this.counter = 0; + // Finding enemy from enemyList + const enemy = Rand.fromWeightedArray(DungeonRunner.dungeon.availableMinions(), DungeonRunner.dungeon.weightList); + // Pokemon + if (typeof enemy === 'string' || enemy.hasOwnProperty('pokemon')) { + const pokemon = (typeof enemy === 'string') ? enemy : enemy.pokemon; + const enemyPokemon = PokemonFactory.generateDungeonPokemon(pokemon, DungeonRunner.chestsOpened(), DungeonRunner.dungeon.baseHealth, DungeonRunner.dungeonLevel()); + this.enemyPokemon(enemyPokemon); + PokemonHelper.incrementPokemonStatistics(enemyPokemon.id, GameConstants.PokemonStatisticsType.Encountered, enemyPokemon.shiny, enemyPokemon.gender, enemyPokemon.shadow); + // Shiny + if (enemyPokemon.shiny) { + App.game.logbook.newLog(LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemon(this.enemyPokemon().id, true) + ? createLogContent.encounterShinyDupe({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + }) + : createLogContent.encounterShiny({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + })); + } + else if (!App.game.party.alreadyCaughtPokemon(this.enemyPokemon().id)) { + App.game.logbook.newLog(LogBookTypes.NEW, createLogContent.encounterWild({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + })); + } + // Trainer + } + else { + const trainer = enemy; + this.trainer(trainer); + this.trainerPokemonIndex(0); + this.generateTrainerPokemon(); + } + DungeonRunner.fighting(true); + } + static generateNewLootEnemy(pokemon) { + this.catching(false); + this.counter = 0; + const enemyPokemon = PokemonFactory.generateDungeonPokemon(pokemon, DungeonRunner.chestsOpened(), DungeonRunner.dungeon.baseHealth * 2, DungeonRunner.dungeonLevel(), true); + this.enemyPokemon(enemyPokemon); + PokemonHelper.incrementPokemonStatistics(enemyPokemon.id, GameConstants.PokemonStatisticsType.Encountered, enemyPokemon.shiny, enemyPokemon.gender, enemyPokemon.shadow); + // Shiny + if (enemyPokemon.shiny) { + App.game.logbook.newLog(LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemon(this.enemyPokemon().id, true) + ? createLogContent.encounterShinyDupe({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + }) + : createLogContent.encounterShiny({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + })); + } + else if (!App.game.party.alreadyCaughtPokemon(this.enemyPokemon().id)) { + App.game.logbook.newLog(LogBookTypes.NEW, createLogContent.encounterWild({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + })); + } + DungeonRunner.fighting(true); + } + /** + * Handles generating the enemy Trainer Pokemon + */ + static generateTrainerPokemon() { + this.counter = 0; + const pokemon = this.trainer().getTeam()[this.trainerPokemonIndex()]; + const baseHealth = DungeonRunner.fightingBoss() ? pokemon.maxHealth : DungeonRunner.dungeon.baseHealth; + const level = DungeonRunner.fightingBoss() ? pokemon.level : DungeonRunner.dungeonLevel(); + const enemyPokemon = PokemonFactory.generateDungeonTrainerPokemon(pokemon, DungeonRunner.chestsOpened(), baseHealth, level, DungeonRunner.fightingBoss(), this.trainer().getTeam().length); + this.enemyPokemon(enemyPokemon); + } + static generateNewBoss() { + DungeonRunner.fighting(true); + this.catching(false); + this.counter = 0; + // Finding boss from bossList + const enemy = Rand.fromWeightedArray(DungeonRunner.dungeon.availableBosses(), DungeonRunner.dungeon.bossWeightList); + // Pokemon + if (enemy instanceof DungeonBossPokemon) { + this.enemyPokemon(PokemonFactory.generateDungeonBoss(enemy, DungeonRunner.chestsOpened())); + PokemonHelper.incrementPokemonStatistics(this.enemyPokemon().id, GameConstants.PokemonStatisticsType.Encountered, this.enemyPokemon().shiny, this.enemyPokemon().gender, this.enemyPokemon().shadow); + // Shiny + if (this.enemyPokemon().shiny) { + App.game.logbook.newLog(LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemon(this.enemyPokemon().id, true) + ? createLogContent.encounterShinyDupe({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + }) + : createLogContent.encounterShiny({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + })); + } + else if (!App.game.party.alreadyCaughtPokemon(this.enemyPokemon().id)) { + App.game.logbook.newLog(LogBookTypes.NEW, createLogContent.encounterWild({ + location: player.town.dungeon.name, + pokemon: this.enemyPokemon().name, + })); + } + } + else { + this.trainer(enemy); + this.trainerPokemonIndex(0); + this.generateTrainerPokemon(); + } + } +} +DungeonBattle.trainer = ko.observable(null); +DungeonBattle.trainerPokemonIndex = ko.observable(0); +DungeonBattle.remainingTrainerPokemon = ko.pureComputed(() => { + if (!DungeonBattle.trainer()) { + return 0; + } + return DungeonBattle.trainer().getTeam().length - DungeonBattle.trainerPokemonIndex(); +}); +DungeonBattle.defeatedTrainerPokemon = ko.pureComputed(() => { + if (!DungeonBattle.trainer()) { + return 0; + } + return DungeonBattle.trainerPokemonIndex(); +}); +class DungeonFlash { + constructor(flashConfig) { + var _a; + this.flashConfig = flashConfig; + this.playerOffset = [ + flashConfig.findIndex(row => row.includes('P')), + (_a = flashConfig.find(row => row.includes('P'))) === null || _a === void 0 ? void 0 : _a.findIndex(state => state === 'P'), + ]; + if (this.playerOffset.includes(-1)) { + console.error('DungeonFlash definition does not specify player location', flashConfig); + } + } + apply(board, position) { + const [pi, pj] = this.playerOffset; + const { floor, x, y } = position; + return this.flashConfig.forEach((row, i) => { + row.forEach((s, j) => { + var _a; + if (s === 'F') { + const tile = (_a = board[floor][y + i - pi]) === null || _a === void 0 ? void 0 : _a[x + j - pj]; + if (tile) { + tile.isVisible = true; + } + } + }); + }); + } +} +DungeonFlash.tiers = [ + new DungeonFlash([ + ['-', 'F', '-'], + ['F', 'P', 'F'], + ['-', 'F', '-'], + ]), + new DungeonFlash([ + ['F', 'F', 'F'], + ['F', 'P', 'F'], + ['F', 'F', 'F'], + ]), + new DungeonFlash([ + ['-', '-', 'F', '-', '-'], + ['-', 'F', 'F', 'F', '-'], + ['F', 'F', 'P', 'F', 'F'], + ['-', 'F', 'F', 'F', '-'], + ['-', '-', 'F', '-', '-'], + ]), +]; +class DungeonGuide { + constructor(name, description, cost, fixedCost, interval, // how often they take a step in ms + walk, unlockRequirement, trainerSprite) { + this.name = name; + this.description = description; + this.cost = cost; + this.fixedCost = fixedCost; + this.interval = interval; + this.walk = walk; + this.unlockRequirement = unlockRequirement; + this.trainerSprite = 0; + this.hired = ko.observable(false).extend({ boolean: null }); + this.ticks = 0; + this.index = 0; + SeededRand.seed(parseInt(this.name, 36)); + this.trainerSprite = trainerSprite !== null && trainerSprite !== void 0 ? trainerSprite : SeededRand.intBetween(0, 118); + } + start() { + DungeonRunner.map.playerMoved(true); + GameHelper.incrementObservable(DungeonGuides.clears, -1); + GameHelper.incrementObservable(App.game.statistics.dungeonGuideAttempts[this.index]); + } + tick() { + this.ticks += GameConstants.DUNGEON_TICK; + if (this.ticks >= this.interval) { + this.ticks = 0; + try { + this.walk(); + // Interact with the current tile + switch (DungeonRunner.map.currentTile().type()) { + case GameConstants.DungeonTileType.chest: + case GameConstants.DungeonTileType.boss: + case GameConstants.DungeonTileType.ladder: + DungeonRunner.handleInteraction(); + break; + } + } + catch (e) { + console.error('Dungeon Guide failed to walk correctly:\n', e); + } + } + } + end() { + // Check if more clears already paid for + if (DungeonGuides.clears() > 0) { + // Need to reset the map + DungeonRunner.map.board([]); + DungeonRunner.initializeDungeon(player.town.dungeon); + } + else { + // No more clears, fire the guide, reset clears to 1 for modal + this.fire(); + } + } + isUnlocked() { + var _a, _b; + return (_b = (_a = this.unlockRequirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true; + } + calcCost(clears, price, region) { + const costs = []; + let discount = Math.pow(clears, 0.975); + discount /= clears; + this.cost.forEach(([multiplier, currency]) => { + costs.push(new Amount(Math.round(Math.pow((price * clears * discount), (1 - region / 100))) * multiplier, currency)); + }); + this.fixedCost.forEach((cost) => { + const newCost = Object.assign({}, cost); + newCost.amount = Math.round(cost.amount * clears * discount); + costs.push(new Amount(newCost.amount, newCost.currency)); + }); + return costs; + } + hire() { + Notifier.notify({ + title: `[DUNGEON GUIDE] ${this.name}`, + message: 'Thanks for hiring me,\nI won\'t let you down!', + type: NotificationConstants.NotificationOption.success, + timeout: 30 * GameConstants.SECOND, + }); + DungeonGuides.hired(this); + } + fire() { + Notifier.notify({ + title: `[DUNGEON GUIDE] ${this.name}`, + message: 'Thanks for the work.\nLet me know when you\'re hiring again!', + type: NotificationConstants.NotificationOption.info, + timeout: 30 * GameConstants.SECOND, + }); + // Hide modals + $('.modal.show').modal('hide'); + // Reset our clears + DungeonGuides.clears(1); + DungeonGuides.hired(null); + } +} +class DungeonGuides { + static add(guide) { + guide.index = this.list.length; + this.list.push(guide); + } + static startDungeon() { + var _a; + // Add steps and attack based on efficiency + (_a = this.hired()) === null || _a === void 0 ? void 0 : _a.start(); + } + static endDungeon() { + var _a; + (_a = this.hired()) === null || _a === void 0 ? void 0 : _a.end(); + } + static calcCost() { + return this.list[this.selected()].calcCost(this.clears(), player.town.dungeon.tokenCost, player.region); + } + static calcDungeonCost() { + return new Amount(player.town.dungeon.tokenCost * this.clears(), GameConstants.Currency.dungeonToken); + } + static canAfford() { + const costs = { + [GameConstants.Currency.dungeonToken]: this.calcDungeonCost(), + }; + this.calcCost().forEach((cost) => { + var _a; + const tempAmount = (_a = costs[cost.currency]) !== null && _a !== void 0 ? _a : new Amount(0, cost.currency); + tempAmount.amount += cost.amount; + costs[cost.currency] = tempAmount; + }); + return Object.values(costs).every((cost) => App.game.wallet.hasAmount(cost)); + } + static hire() { + const guide = this.list[this.selected()]; + // Check player has enough currency + if (!this.canAfford()) { + Notifier.notify({ + title: `[DUNGEON GUIDE] ${guide.name}`, + message: 'You can\'t currently afford to hire me...', + type: NotificationConstants.NotificationOption.warning, + timeout: 30 * GameConstants.SECOND, + }); + return; + } + // Charge the player + this.calcCost().forEach((cost) => App.game.wallet.loseAmount(cost)); + App.game.wallet.loseAmount(this.calcDungeonCost()); + // Hide modals + $('.modal.show').modal('hide'); + // Hire the guide + guide.hire(); + // Start the dungeon + DungeonRunner.initializeDungeon(player.town.dungeon); + } + static getRandomWeightedNearbyTile(nearbyTiles) { + const weightedTiles = nearbyTiles.map(t => { + let weight = 0.5; + weight += !t.isVisited ? 1.5 : 0; + weight += [GameConstants.DungeonTileType.enemy].includes(t.type()) ? 1 : 0; + weight += [GameConstants.DungeonTileType.chest].includes(t.type()) ? 2 : 0; + weight += [GameConstants.DungeonTileType.boss, GameConstants.DungeonTileType.ladder].includes(t.type()) ? 4 : 0; + return weight; + }); + return Rand.fromWeightedArray(nearbyTiles, weightedTiles); + } +} +DungeonGuides.list = []; +DungeonGuides.available = ko.pureComputed(() => DungeonGuides.list.filter(f => f.isUnlocked())); +DungeonGuides.selected = ko.observable(0).extend({ numeric: 0 }); +DungeonGuides.hired = ko.observable(null); +DungeonGuides.clears = ko.observable(1).extend({ numeric: 0 }); +// Note: Trainer sprite is (seeded) randomly generated, or can be set manually, please make sure it kind of matches the name +DungeonGuides.add(new DungeonGuide('Jimmy', 'Doesn\'t really know their way around a dungeon, but gives it their best try!', [[4, GameConstants.Currency.money]], [], 2000, () => { + // Get current position + const pos = DungeonRunner.map.playerPosition(); + const nearbyTiles = DungeonRunner.map.nearbyTiles(pos); + // We just want to move weighted randomly + const randomTile = DungeonGuides.getRandomWeightedNearbyTile(nearbyTiles); + DungeonRunner.map.moveToTile(randomTile.position); +})); +DungeonGuides.add(new DungeonGuide('Timmy', 'Can smell when there is a treasure chest on a tile near them!', [[4, GameConstants.Currency.money], [1, GameConstants.Currency.dungeonToken]], [], 2000, () => { + // Get current position + const pos = DungeonRunner.map.playerPosition(); + const nearbyTiles = DungeonRunner.map.nearbyTiles(pos); + // Check if any tiles within 3 spaces contain a chest + const treasureTiles = DungeonRunner.map.board()[pos.floor].flat().filter(t => t.type() == GameConstants.DungeonTileType.chest); + if (treasureTiles.length) { + const paths = treasureTiles.map(t => DungeonRunner.map.findShortestPath(pos, t.position)).filter(t => t.length <= 3); + if (paths === null || paths === void 0 ? void 0 : paths.length) { + const shortestPath = Math.min(...paths.map(p => p.length)); + const path = Rand.fromArray(paths.filter(p => p.length == shortestPath)); + // We found some treasure, move to it + DungeonRunner.map.moveToTile(path[0]); + return; + } + } + // We didn't find what we were looking for, We just want to move weighted randomly + const randomTile = DungeonGuides.getRandomWeightedNearbyTile(nearbyTiles); + DungeonRunner.map.moveToTile(randomTile.position); +}, new MaxRegionRequirement(GameConstants.Region.johto))); +DungeonGuides.add(new DungeonGuide('Shelly', 'Prefers to explore the unknown!', [[4, GameConstants.Currency.money], [4, GameConstants.Currency.dungeonToken]], [new Amount(5, GameConstants.Currency.questPoint)], 1500, () => { + // Get current position + const pos = DungeonRunner.map.playerPosition(); + const nearbyTiles = DungeonRunner.map.nearbyTiles(pos); + // Check if any tiles within 3 spaces are unexplored + const unexploredTiles = DungeonRunner.map.board()[pos.floor].flat().filter(t => !t.isVisited); + if (unexploredTiles.length) { + const paths = unexploredTiles.map(t => DungeonRunner.map.findShortestPath(pos, t.position)).filter(t => t.length <= 3); + if (paths === null || paths === void 0 ? void 0 : paths.length) { + const shortestPath = Math.min(...paths.map(p => p.length)); + const path = Rand.fromArray(paths.filter(p => p.length == shortestPath)); + // We found an unexplored tile, move to it + DungeonRunner.map.moveToTile(path[0]); + return; + } + } + // We didn't find what we were looking for, We just want to move weighted randomly + const randomTile = DungeonGuides.getRandomWeightedNearbyTile(nearbyTiles); + DungeonRunner.map.moveToTile(randomTile.position); +}, new MaxRegionRequirement(GameConstants.Region.hoenn))); +DungeonGuides.add(new DungeonGuide('Angeline', 'Can find treasure anywhere, loves to explore new areas!', [[15, GameConstants.Currency.money], [10, GameConstants.Currency.dungeonToken]], [new Amount(1, GameConstants.Currency.diamond)], 1000, () => { + // Get current position + const pos = DungeonRunner.map.playerPosition(); + const nearbyTiles = DungeonRunner.map.nearbyTiles(pos); + // Look for any unopened chest + const treasureTiles = DungeonRunner.map.board()[pos.floor].flat().filter(t => t.type() == GameConstants.DungeonTileType.chest); + if (treasureTiles.length) { + const paths = treasureTiles.map(t => DungeonRunner.map.findShortestPath(pos, t.position)); + if (paths === null || paths === void 0 ? void 0 : paths.length) { + const shortestPath = Math.min(...paths.map(p => p.length)); + const path = Rand.fromArray(paths.filter(p => p.length == shortestPath)); + // We found some treasure, move to it + DungeonRunner.map.moveToTile(path[0]); + return; + } + } + // Look for any unexplored areas + const unexploredTiles = DungeonRunner.map.board()[pos.floor].flat().filter(t => !t.isVisited); + if (unexploredTiles.length) { + const paths = unexploredTiles.map(t => DungeonRunner.map.findShortestPath(pos, t.position)); + if (paths === null || paths === void 0 ? void 0 : paths.length) { + const shortestPath = Math.min(...paths.map(p => p.length)); + const path = Rand.fromArray(paths.filter(p => p.length == shortestPath)); + // We found an unexplored tile, move to it + DungeonRunner.map.moveToTile(path[0]); + return; + } + } + // We didn't find what we were looking for, We just want to move weighted randomly + const randomTile = DungeonGuides.getRandomWeightedNearbyTile(nearbyTiles); + DungeonRunner.map.moveToTile(randomTile.position); +}, new MaxRegionRequirement(GameConstants.Region.kalos))); +DungeonGuides.add(new DungeonGuide('Georgia', 'Knows the path to the boss, avoids random encounters when possible.', [[20, GameConstants.Currency.money], [20, GameConstants.Currency.dungeonToken]], [new Amount(2, GameConstants.Currency.diamond)], 900, () => { + var _a, _b; + // Get current position + const pos = DungeonRunner.map.playerPosition(); + const nearbyTiles = DungeonRunner.map.nearbyTiles(pos); + const bossPosition = (_a = DungeonRunner.map.board()[pos.floor].flat().find(t => t.type() == GameConstants.DungeonTileType.boss)) === null || _a === void 0 ? void 0 : _a.position; + const ladderPosition = (_b = DungeonRunner.map.board()[pos.floor].flat().find(t => t.type() == GameConstants.DungeonTileType.ladder)) === null || _b === void 0 ? void 0 : _b.position; + // Shortest path to the boss avoiding enemies + let path = bossPosition || ladderPosition ? DungeonRunner.map.findShortestPath(pos, bossPosition || ladderPosition, [GameConstants.DungeonTileType.enemy]) : []; + // If no path avoiding enemies, then any path will do + if ((path === null || path === void 0 ? void 0 : path.length) <= 1) { + path = bossPosition || ladderPosition ? DungeonRunner.map.findShortestPath(pos, bossPosition || ladderPosition) : []; + } + if (path === null || path === void 0 ? void 0 : path.length) { + // We found the boss or a ladder, move to it + DungeonRunner.map.moveToTile(path[0]); + return; + } + // We didn't find what we were looking for, We just want to move weighted randomly + const randomTile = DungeonGuides.getRandomWeightedNearbyTile(nearbyTiles); + DungeonRunner.map.moveToTile(randomTile.position); +}, new MaxRegionRequirement(GameConstants.Region.alola))); +DungeonGuides.add(new DungeonGuide('Drake', 'Knows the shortest path to the boss!', [[20, GameConstants.Currency.money], [20, GameConstants.Currency.dungeonToken]], [new Amount(3, GameConstants.Currency.diamond)], 800, () => { + var _a, _b; + // Get current position + const pos = DungeonRunner.map.playerPosition(); + const nearbyTiles = DungeonRunner.map.nearbyTiles(pos); + const bossPosition = (_a = DungeonRunner.map.board()[pos.floor].flat().find(t => t.type() == GameConstants.DungeonTileType.boss)) === null || _a === void 0 ? void 0 : _a.position; + const ladderPosition = (_b = DungeonRunner.map.board()[pos.floor].flat().find(t => t.type() == GameConstants.DungeonTileType.ladder)) === null || _b === void 0 ? void 0 : _b.position; + const path = bossPosition || ladderPosition ? DungeonRunner.map.findShortestPath(pos, bossPosition || ladderPosition) : []; + if (path === null || path === void 0 ? void 0 : path.length) { + // We found the boss or a ladder, move to it + DungeonRunner.map.moveToTile(path[0]); + return; + } + // We didn't find what we were looking for, We just want to move weighted randomly + const randomTile = DungeonGuides.getRandomWeightedNearbyTile(nearbyTiles); + DungeonRunner.map.moveToTile(randomTile.position); +}, new MaxRegionRequirement(GameConstants.Region.galar))); +class DungeonMap { + constructor(size, generateChestLoot, flash) { + var _a; + this.generateChestLoot = generateChestLoot; + this.flash = flash; + if (size <= GameConstants.MAX_DUNGEON_SIZE) { + this.floorSizes = [size]; + } + else { + this.floorSizes = [GameConstants.MAX_DUNGEON_SIZE, size - GameConstants.MAX_DUNGEON_SIZE + GameConstants.MIN_DUNGEON_SIZE - 1]; + } + this.board = ko.observable(this.generateMap()); + this.playerPosition = ko.observable(new Point(Math.floor(this.floorSizes[0] / 2), this.floorSizes[0] - 1)); + this.playerMoved = ko.observable(false); + this.currentTile().hasPlayer = true; + (_a = this.flash) === null || _a === void 0 ? void 0 : _a.apply(this.board(), this.playerPosition()); + this.totalFights = ko.observable(this.board().flat().flat().filter((t) => t.type() == GameConstants.DungeonTileType.enemy).length); + this.totalChests = ko.observable(this.board().flat().flat().filter((t) => t.type() == GameConstants.DungeonTileType.chest).length); + } + moveToCoordinates(x, y, floor = undefined) { + if (this.moveToTile(new Point(x, y, floor !== null && floor !== void 0 ? floor : this.playerPosition().floor))) { + this.playerMoved(true); + } + } + moveUp() { + this.moveToCoordinates(this.playerPosition().x, this.playerPosition().y - 1); + } + moveRight() { + this.moveToCoordinates(this.playerPosition().x + 1, this.playerPosition().y); + } + moveDown() { + this.moveToCoordinates(this.playerPosition().x, this.playerPosition().y + 1); + } + moveLeft() { + this.moveToCoordinates(this.playerPosition().x - 1, this.playerPosition().y); + } + moveToTile(point) { + var _a; + if (this.hasAccessToTile(point)) { + this.currentTile().hasPlayer = false; + this.playerPosition(point); + (_a = this.flash) === null || _a === void 0 ? void 0 : _a.apply(this.board(), this.playerPosition()); + this.currentTile().hasPlayer = true; + this.currentTile().isVisible = true; + this.currentTile().isVisited = true; + if (this.currentTile().type() == GameConstants.DungeonTileType.enemy) { + DungeonBattle.generateNewEnemy(); + } + return true; + } + return false; + } + showChestTiles() { + for (let i = 0; i < this.board()[this.playerPosition().floor].length; i++) { + for (let j = 0; j < this.board()[this.playerPosition().floor][i].length; j++) { + if (this.board()[this.playerPosition().floor][i][j].type() == GameConstants.DungeonTileType.chest) { + this.board()[this.playerPosition().floor][i][j].isVisible = true; + } + } + } + } + showAllTiles() { + for (let i = 0; i < this.board()[this.playerPosition().floor].length; i++) { + for (let j = 0; j < this.board()[this.playerPosition().floor][i].length; j++) { + this.board()[this.playerPosition().floor][i][j].isVisible = true; + } + } + } + currentTile() { + return this.board()[this.playerPosition().floor][this.playerPosition().y][this.playerPosition().x]; + } + nearbyTiles(point, avoidTiles = []) { + var _a, _b, _c, _d; + const tiles = []; + tiles.push((_a = this.board()[point.floor][point.y - 1]) === null || _a === void 0 ? void 0 : _a[point.x]); + tiles.push((_b = this.board()[point.floor][point.y + 1]) === null || _b === void 0 ? void 0 : _b[point.x]); + tiles.push((_c = this.board()[point.floor][point.y]) === null || _c === void 0 ? void 0 : _c[point.x - 1]); + tiles.push((_d = this.board()[point.floor][point.y]) === null || _d === void 0 ? void 0 : _d[point.x + 1]); + return tiles.filter(t => t && !avoidTiles.includes(t.type())); + } + findShortestPath(start, goal, avoidTiles = []) { + const pathing = [start]; + const fromPos = {}; + fromPos[`${start.x},${start.y}`] = null; + while (pathing.length > 0) { + const current = pathing.shift(); + if (current.x === goal.x && current.y === goal.y) { + break; + } + const neighbors = this.nearbyTiles(current, avoidTiles); + const randNeighbors = Rand.shuffleArray(neighbors); + randNeighbors.forEach(neighbor => { + if (!fromPos[`${neighbor.position.x},${neighbor.position.y}`]) { + pathing.push(neighbor.position); + fromPos[`${neighbor.position.x},${neighbor.position.y}`] = current; + } + }); + } + let current = goal; + const path = []; + while (current != undefined && (current.x !== start.x || current.y !== start.y)) { + path.unshift(current); + current = fromPos[`${current.x},${current.y}`]; + } + return path; + } + hasAccessToTile(point) { + var _a; + // If player fighting/catching they cannot move right now + if (DungeonRunner.fighting() || DungeonBattle.catching()) { + return false; + } + // If tile out of bounds, it's invalid + if (point.x < 0 || point.x >= this.floorSizes[point.floor] || point.y < 0 || point.y >= this.floorSizes[point.floor]) { + return false; + } + if ((_a = this.board()[point.floor][point.y]) === null || _a === void 0 ? void 0 : _a[point.x].isVisited) { + return true; + } + //If any of the adjacent Tiles is visited, it's a valid Tile. + return this.nearbyTiles(point).some(t => t.isVisited); + } + generateMap() { + const map = []; + this.floorSizes.forEach((size, index) => { + // Fill mapList with required Tiles + const mapList = []; + // Boss or ladder + if (index == this.floorSizes.length - 1) { + mapList.push(new DungeonTile(GameConstants.DungeonTileType.boss, null)); + } + else { + mapList.push(new DungeonTile(GameConstants.DungeonTileType.ladder, null)); + } + // Chests (leave 1 space for enemy and 1 space for entrance) + for (let i = 0; i < size && mapList.length < size * size - 2; i++) { + mapList.push(new DungeonTile(GameConstants.DungeonTileType.chest, this.generateChestLoot())); + } + // Enemy Pokemon (leave 1 space for entrance) + for (let i = 0; i < size * 2 + 3 && mapList.length < size * size - 1; i++) { + mapList.push(new DungeonTile(GameConstants.DungeonTileType.enemy, null)); + } + // Fill with empty tiles (leave 1 space for entrance) + for (let i = mapList.length; i < size * size - 1; i++) { + mapList.push(new DungeonTile(GameConstants.DungeonTileType.empty, null)); + } + // Shuffle the tiles randomly + this.shuffle(mapList); + // Then place the entrance tile + const entranceTile = new DungeonTile(GameConstants.DungeonTileType.entrance, null); + entranceTile.isVisible = true; + entranceTile.isVisited = true; + mapList.splice(mapList.length + 1 - Math.ceil(size / 2), 0, entranceTile); + // Create a 2d array + const floor = []; + while (mapList.length) { + floor.push(mapList.splice(0, size)); + } + map.push(floor); + }); + // Map positions to each tile + return map.map((floor, floorIndex) => { + return floor.map((row, rowIndex) => { + return row.map((tile, tileIndex) => { + tile.position = new Point(tileIndex, rowIndex, floorIndex); + return tile; + }); + }); + }); + } + /** + * Shuffles array in place. + * @param {Array} a items The array containing the items. + */ + shuffle(a) { + let j, x, i; + for (i = a.length; i; i--) { + j = Rand.floor(i); + x = a[i - 1]; + a[i - 1] = a[j]; + a[j] = x; + } + } +} +/// +/// +class DungeonRunner { + static initializeDungeon(dungeon) { + var _a; + if (!dungeon.isUnlocked()) { + if (dungeon.name === 'Viridian Forest') { + Notifier.notify({ + message: 'You need the Dungeon Ticket to access dungeons.\nCheck out the shop at Viridian City.', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + else { + Notifier.notify({ + message: `You don't have access to this dungeon yet.\n${dungeon.getRequirementHints()}`, + type: NotificationConstants.NotificationOption.warning, + }); + return false; + } + } + DungeonRunner.dungeon = dungeon; + // Only charge the player if they aren't using a dungeon guide as they are charged when they start the dungeon + if (!DungeonGuides.hired()) { + if (!DungeonRunner.hasEnoughTokens()) { + Notifier.notify({ + message: 'You don\'t have enough Dungeon Tokens.', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + App.game.wallet.loseAmount(new Amount(DungeonRunner.dungeon.tokenCost, GameConstants.Currency.dungeonToken)); + } + // Reset any trainers/pokemon if there was one previously + DungeonBattle.trainer(null); + DungeonBattle.trainerPokemonIndex(0); + DungeonBattle.enemyPokemon(null); + DungeonRunner.timeBonus(FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute)); + DungeonRunner.timeLeft(GameConstants.DUNGEON_TIME * DungeonRunner.timeBonus()); + DungeonRunner.timeLeftPercentage(100); + // Dungeon size increases with each region + let dungeonSize = GameConstants.BASE_DUNGEON_SIZE + ((_a = dungeon.optionalParameters.dungeonRegionalDifficulty) !== null && _a !== void 0 ? _a : player.region); + // Decrease dungeon size by 1 for every 10, 100, 1000 etc completes + dungeonSize -= Math.max(0, App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(DungeonRunner.dungeon.name)]().toString().length - 1); + const flash = DungeonRunner.getFlash(DungeonRunner.dungeon.name); + const generateChestLoot = () => { + var _a, _b; + const clears = App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(dungeon.name)](); + const debuffed = ((_b = (_a = dungeon.optionalParameters) === null || _a === void 0 ? void 0 : _a.dungeonRegionalDifficulty) !== null && _b !== void 0 ? _b : GameConstants.getDungeonRegion(dungeon.name)) < player.highestRegion() - 2; + // Ignores debuff on first attempt to get loot that ignores debuff. + let tier = dungeon.getRandomLootTier(clears); + let loot = dungeon.getRandomLoot(tier); + if (!loot.ignoreDebuff && debuffed) { + tier = dungeon.getRandomLootTier(clears, debuffed, true); + loot = dungeon.getRandomLoot(tier, true); + } + return { tier, loot }; + }; + // Dungeon size minimum of MIN_DUNGEON_SIZE + DungeonRunner.map = new DungeonMap(Math.max(GameConstants.MIN_DUNGEON_SIZE, dungeonSize), generateChestLoot, flash); + DungeonRunner.chestsOpened(0); + DungeonRunner.encountersWon(0); + DungeonRunner.chestsOpenedPerFloor = new Array(DungeonRunner.map.board().length).fill(0); + DungeonRunner.currentTileType = ko.pureComputed(() => { + return DungeonRunner.map.currentTile().type; + }); + DungeonRunner.fightingLootEnemy = false; + DungeonRunner.fightingBoss(false); + DungeonRunner.defeatedBoss(null); + DungeonRunner.dungeonFinished(false); + App.game.gameState = GameConstants.GameState.dungeon; + // If we have a dungeon guide, start them walking + DungeonGuides.startDungeon(); + } + static tick() { + var _a; + if (DungeonRunner.timeLeft() <= 0) { + if (DungeonRunner.defeatedBoss()) { + DungeonRunner.dungeonWon(); + } + else { + DungeonRunner.dungeonLost(); + } + return; + } + // Tick our dungeon guides + (_a = DungeonGuides.hired()) === null || _a === void 0 ? void 0 : _a.tick(); + if (DungeonRunner.map.playerMoved()) { + DungeonRunner.timeLeft(DungeonRunner.timeLeft() - GameConstants.DUNGEON_TICK); + DungeonRunner.timeLeftPercentage(Math.floor(DungeonRunner.timeLeft() / (GameConstants.DUNGEON_TIME * FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute)) * 100)); + if (DungeonRunner.continuousInteractionInput) { + DungeonRunner.handleInteraction(GameConstants.DungeonInteractionSource.HeldKeybind); + } + } + const currentFluteBonus = FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute); + if (currentFluteBonus != DungeonRunner.timeBonus()) { + if (currentFluteBonus > DungeonRunner.timeBonus()) { + if (DungeonRunner.timeBonus() === 1) { + DungeonRunner.timeBonus(currentFluteBonus); + DungeonRunner.timeLeft(DungeonRunner.timeLeft() * DungeonRunner.timeBonus()); + } + else { + DungeonRunner.timeLeft(DungeonRunner.timeLeft() / DungeonRunner.timeBonus()); + DungeonRunner.timeBonus(currentFluteBonus); + DungeonRunner.timeLeft(DungeonRunner.timeLeft() * DungeonRunner.timeBonus()); + } + } + else { + DungeonRunner.timeLeft(DungeonRunner.timeLeft() / DungeonRunner.timeBonus()); + DungeonRunner.timeBonus(currentFluteBonus); + } + } + } + /** + * Handles the interaction event in the dungeon view and from keybinds + */ + static handleInteraction(source = GameConstants.DungeonInteractionSource.Click) { + if (DungeonRunner.fighting() && !DungeonBattle.catching() && source === GameConstants.DungeonInteractionSource.Click) { + DungeonBattle.clickAttack(); + } + else if (DungeonRunner.map.currentTile().type() === GameConstants.DungeonTileType.entrance && source !== GameConstants.DungeonInteractionSource.HeldKeybind && !DungeonGuides.hired()) { + DungeonRunner.dungeonLeave(); + } + else if (DungeonRunner.map.currentTile().type() === GameConstants.DungeonTileType.chest) { + DungeonRunner.openChest(); + } + else if (DungeonRunner.map.currentTile().type() === GameConstants.DungeonTileType.boss && !DungeonRunner.fightingBoss()) { + DungeonRunner.startBossFight(); + } + else if (DungeonRunner.map.currentTile().type() === GameConstants.DungeonTileType.ladder) { + DungeonRunner.nextFloor(); + } + } + static openChest() { + const tile = DungeonRunner.map.currentTile(); + if (tile.type() !== GameConstants.DungeonTileType.chest) { + return; + } + GameHelper.incrementObservable(DungeonRunner.chestsOpened); + DungeonRunner.chestsOpenedPerFloor[DungeonRunner.map.playerPosition().floor]++; + const { tier, loot } = tile.metadata; + let amount = loot.amount || 1; + const tierWeight = { + common: 4, + rare: 3, + epic: 2, + legendary: 1, + mythic: 0, + }[tier]; + if (EffectEngineRunner.isActive(GameConstants.BattleItemType.Dowsing_machine)()) { + // Decreasing chance for rarer items (62.5% → 12.5%) + const magnetChance = 0.5 / (4 / (tierWeight + 1)); + if (Rand.chance(magnetChance)) { + // Gain more items in higher regions + amount += Math.max(1, Math.round(Math.max(tierWeight, 2) / 8 * (GameConstants.getDungeonRegion(DungeonRunner.dungeon.name) + 1))); + } + } + DungeonRunner.gainLoot(loot.loot, amount, tierWeight); + DungeonRunner.map.currentTile().type(GameConstants.DungeonTileType.empty); + DungeonRunner.map.currentTile().calculateCssClass(); + if (DungeonRunner.chestsOpenedPerFloor[DungeonRunner.map.playerPosition().floor] == Math.floor(DungeonRunner.map.floorSizes[DungeonRunner.map.playerPosition().floor] / 3)) { + DungeonRunner.map.showChestTiles(); + } + if (DungeonRunner.chestsOpenedPerFloor[DungeonRunner.map.playerPosition().floor] == Math.ceil(DungeonRunner.map.floorSizes[DungeonRunner.map.playerPosition().floor] / 2)) { + DungeonRunner.map.showAllTiles(); + } + } + static gainLoot(input, amount, weight) { + if (typeof BerryType[input] == 'number') { + DungeonRunner.lootNotification(input, amount, weight, FarmController.getBerryImage(BerryType[GameConstants.humanifyString(input)])); + return App.game.farming.gainBerry(BerryType[GameConstants.humanifyString(input)], amount, false); + } + else if (ItemList[input] instanceof PokeballItem) { + DungeonRunner.lootNotification(input, amount, weight, ItemList[input].image); + return App.game.pokeballs.gainPokeballs(GameConstants.Pokeball[GameConstants.humanifyString(input)], amount, false); + } + else if (UndergroundItems.getByName(input) instanceof UndergroundItem) { + DungeonRunner.lootNotification(input, amount, weight, UndergroundItems.getByName(input).image); + return Underground.gainMineItem(UndergroundItems.getByName(input).id, amount); + } + else if (PokemonHelper.getPokemonByName(input).name != 'MissingNo.') { + const image = `assets/images/pokemon/${PokemonHelper.getPokemonByName(input).id}.png`; + DungeonRunner.lootNotification(input, amount, weight, image); + DungeonRunner.fightingLootEnemy = true; + return DungeonBattle.generateNewLootEnemy(input); + } + else if (ItemList[input] instanceof MegaStoneItem) { + DungeonRunner.lootNotification(input, amount, weight, ItemList[input].image); + ItemList[input].gain(1); + } + else if (ItemList[input] instanceof EvolutionStone || EggItem || BattleItem || Vitamin || EnergyRestore) { + if (ItemList[input] instanceof Vitamin) { + GameHelper.incrementObservable(App.game.statistics.totalVitaminsObtained, amount); + } + DungeonRunner.lootNotification(input, amount, weight, ItemList[input].image); + return player.gainItem(ItemList[input].name, amount); + } + else { + DungeonRunner.lootNotification(input, amount, weight, ItemList[input].image); + return player.gainItem(ItemList.xAttack, 1); + } + } + static lootNotification(input, amount, weight, image) { + let message = `Found ${amount} × ${GameConstants.pluralizeString(GameConstants.camelCaseToString(GameConstants.humanifyString(input)), amount)} in a dungeon chest.`; + let type = NotificationConstants.NotificationOption.success; + let setting = NotificationConstants.NotificationSetting.Dungeons.common_dungeon_item_found; + if (typeof BerryType[input] == 'number') { + message = `Found ${Math.floor(amount)} × ${GameConstants.humanifyString(input)} ${GameConstants.pluralizeString('Berry', amount)} in a dungeon chest.`; + } + if (ItemList[input] instanceof PokeballItem) { + message = `Found ${amount} × ${GameConstants.pluralizeString(ItemList[input].displayName, amount)} in a dungeon chest.`; + } + else if (PokemonHelper.getPokemonByName(input).name != 'MissingNo.') { + message = `Encountered ${GameHelper.anOrA(input)} ${GameConstants.humanifyString(input)} in a dungeon chest.`; + } + if (weight <= 2) { + setting = NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found; + if (weight <= 0.5) { + type = NotificationConstants.NotificationOption.danger; + } + else { + type = NotificationConstants.NotificationOption.warning; + } + } + return Notifier.notify({ + message: message, + type: type, + setting: setting, + }); + } + static startBossFight() { + if (DungeonRunner.map.currentTile().type() !== GameConstants.DungeonTileType.boss || DungeonRunner.fightingBoss()) { + return; + } + DungeonRunner.fightingBoss(true); + DungeonBattle.generateNewBoss(); + } + static nextFloor() { + DungeonRunner.map.moveToCoordinates(Math.floor(DungeonRunner.map.floorSizes[DungeonRunner.map.playerPosition().floor + 1] / 2), DungeonRunner.map.floorSizes[DungeonRunner.map.playerPosition().floor + 1] - 1, DungeonRunner.map.playerPosition().floor + 1); + DungeonRunner.map.playerPosition.notifySubscribers(); + DungeonRunner.timeLeft(DungeonRunner.timeLeft() + GameConstants.DUNGEON_LADDER_BONUS); + if (!DungeonGuides.hired()) { + DungeonRunner.map.playerMoved(false); + } + } + static dungeonLeave(shouldConfirm = Settings.getSetting('confirmLeaveDungeon').observableValue()) { + return __awaiter(this, void 0, void 0, function* () { + if (DungeonRunner.map.currentTile().type() !== GameConstants.DungeonTileType.entrance || DungeonRunner.dungeonFinished() || !DungeonRunner.map.playerMoved()) { + return; + } + if (!shouldConfirm || (yield Notifier.confirm({ + title: 'Dungeon', + message: 'Leave the dungeon?\n\nCurrent progress will be lost, but you will keep any items obtained from chests.', + type: NotificationConstants.NotificationOption.warning, + confirm: 'Leave', + timeout: 1 * GameConstants.MINUTE, + }))) { + DungeonRunner.dungeonFinished(true); + DungeonRunner.fighting(false); + DungeonRunner.fightingBoss(false); + App.game.gameState = GameConstants.GameState.town; + DungeonGuides.clears(0); + DungeonGuides.endDungeon(); + } + }); + } + static dungeonLost() { + if (!DungeonRunner.dungeonFinished()) { + DungeonRunner.dungeonFinished(true); + DungeonRunner.fighting(false); + DungeonRunner.fightingBoss(false); + App.game.gameState = GameConstants.GameState.town; + Notifier.notify({ + message: 'You could not complete the dungeon in time.', + type: NotificationConstants.NotificationOption.danger, + }); + } + DungeonGuides.endDungeon(); + } + static dungeonWon() { + if (!DungeonRunner.dungeonFinished()) { + DungeonRunner.dungeonFinished(true); + if (!App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(DungeonRunner.dungeon.name)]()) { + DungeonRunner.dungeon.rewardFunction(); + } + if (DungeonGuides.hired()) { + GameHelper.incrementObservable(App.game.statistics.dungeonGuideClears[DungeonGuides.hired().index]); + } + GameHelper.incrementObservable(App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(DungeonRunner.dungeon.name)]); + MapHelper.moveToTown(DungeonRunner.dungeon.name); + Notifier.notify({ + message: 'You have successfully completed the dungeon.', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.dungeon_complete, + }); + } + DungeonGuides.endDungeon(); + } + static dungeonCompleted(dungeon, includeShiny) { + const possiblePokemon = dungeon.allAvailablePokemon(); + return RouteHelper.listCompleted(possiblePokemon, includeShiny); + } + static isAchievementsComplete(dungeon) { + const dungeonIndex = GameConstants.getDungeonIndex(dungeon.name); + return AchievementHandler.achievementList.every(achievement => { + return !(achievement.property instanceof ClearDungeonRequirement && achievement.property.dungeonIndex === dungeonIndex && !achievement.isCompleted()); + }); + } + static hasEnoughTokens() { + return App.game.wallet.hasAmount(new Amount(DungeonRunner.dungeon.tokenCost, GameConstants.Currency.dungeonToken)); + } + static dungeonLevel() { + return PokemonFactory.routeLevel(DungeonRunner.dungeon.difficultyRoute, player.region); + } + static getFlash(dungeonName) { + var _a; + const clears = App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(dungeonName)](); + const config = [ + { flash: DungeonFlash.tiers[0], clearsNeeded: 100 }, + { flash: DungeonFlash.tiers[1], clearsNeeded: 250 }, + { flash: DungeonFlash.tiers[2], clearsNeeded: 400 }, + ].reverse(); + // findIndex, so we can get next tier when light ball is implemented + const index = config.findIndex((tier) => tier.clearsNeeded <= clears); + return (_a = config[index]) === null || _a === void 0 ? void 0 : _a.flash; + } +} +DungeonRunner.timeLeft = ko.observable(GameConstants.DUNGEON_TIME); +DungeonRunner.timeLeftPercentage = ko.observable(100); +DungeonRunner.timeBonus = ko.observable(1); +DungeonRunner.fighting = ko.observable(false); +DungeonRunner.chestsOpened = ko.observable(0); +DungeonRunner.encountersWon = ko.observable(0); +DungeonRunner.fightingBoss = ko.observable(false); +DungeonRunner.defeatedBoss = ko.observable(null); +DungeonRunner.dungeonFinished = ko.observable(false); +DungeonRunner.continuousInteractionInput = false; +DungeonRunner.timeLeftSeconds = ko.pureComputed(() => { + return (Math.ceil(DungeonRunner.timeLeft() / 100) / 10).toFixed(1); +}); +DungeonRunner; +class DungeonTile { + constructor(type, metadata = null) { + this.metadata = metadata; + this._isVisible = false; + this._isVisited = false; + this._hasPlayer = false; + this.type = ko.observable(type); + this.cssClass = ko.observable(''); + this.calculateCssClass(); + } + get isVisible() { + return this._isVisible; + } + set isVisible(val) { + this._isVisible = val; + this.calculateCssClass(); + } + get isVisited() { + return this._isVisited; + } + set isVisited(val) { + this._isVisited = val; + this.calculateCssClass(); + } + get hasPlayer() { + return this._hasPlayer; + } + set hasPlayer(val) { + this._hasPlayer = val; + this.calculateCssClass(); + } + calculateCssClass() { + if (!this.isVisible) { + this.cssClass('tile tile-invisible'); + return; + } + if (this.hasPlayer) { + this.cssClass('tile tile-player'); + return; + } + // Base tile class + const css = ['tile']; + // If player visited tile add the class + if (this.isVisited) { + css.push('tile-visited'); + } + // Add the tile type class + css.push(`tile-${GameConstants.DungeonTileType[this.type()]}`); + if (this.type() === GameConstants.DungeonTileType.chest) { + css.push(`tile-chest-${this.metadata.tier}`); + } + // Join all the classes + this.cssClass(css.join(' ')); + } +} +class Point { + constructor(x, y, floor = 0) { + this.x = x; + this.y = y; + this.floor = floor; + } +} +class DungeonInfo { + static getLootList() { + var _a; + return ((_a = player.town.dungeon) === null || _a === void 0 ? void 0 : _a.lootTable) || []; + } + static getFullName() { + return `${DungeonInfo.getDungeonName()} - ${DungeonInfo.getRegionName()} (${DungeonInfo.getSubregionName()})`; + } + static getDungeonName() { + return player.town.name; + } + static getRegionName() { + return GameConstants.camelCaseToString(GameConstants.Region[player.region]); + } + static getSubregionName() { + var _a; + return (_a = player.subregionObject()) === null || _a === void 0 ? void 0 : _a.name; + } + static getLootImage(input) { + switch (true) { + case typeof BerryType[input] == 'number': + return FarmController.getBerryImage(BerryType[GameConstants.humanifyString(input)]); + case UndergroundItems.getByName(input) instanceof UndergroundItem: + return UndergroundItems.getByName(input).image; + case PokemonHelper.getPokemonByName(input).name != 'MissingNo.': + return `assets/images/pokemon/${PokemonHelper.getPokemonByName(input).id}.png`; + default: + return ItemList[input].image; + } + } + static getLootName(input) { + var _a; + switch (true) { + case input in ItemList: + return (_a = ItemList[input]) === null || _a === void 0 ? void 0 : _a.displayName; + case typeof BerryType[input] == 'number': + return `${input} Berry`; + case PokemonHelper.getPokemonByName(input).name != 'MissingNo.': + return PokemonHelper.displayName(input)(); + default: + return GameConstants.camelCaseToString(GameConstants.humanifyString(input.toLowerCase())); + } + } +} +DungeonInfo.lootList = ko.pureComputed(() => { + return DungeonInfo.getLootList(); +}); +class RouteInfo { + static getPokemonList() { + var _a; + const pokemonList = (_a = Routes.getRoute(player.region, player.route)) === null || _a === void 0 ? void 0 : _a.pokemon; + const pokemonArray = []; + if (pokemonList) { + [...new Set(pokemonList.land)].forEach(pokemonName => { + pokemonArray.push({ id: PokemonHelper.getPokemonByName(pokemonName).id, name: pokemonName, type: 'land' }); + }); + if (App.game.keyItems.hasKeyItem(KeyItemType.Super_rod) || pokemonList.land.length == 0) { + [...new Set(pokemonList.water)].forEach(pokemonName => { + pokemonArray.push({ id: PokemonHelper.getPokemonByName(pokemonName).id, name: pokemonName, type: 'water', fishing: pokemonList.land.length != 0 }); + }); + } + [...new Set(pokemonList.headbutt)].forEach(pokemonName => { + pokemonArray.push({ id: PokemonHelper.getPokemonByName(pokemonName).id, name: pokemonName, type: 'headbutt' }); + }); + pokemonList.special.filter(p => p.isAvailable()).forEach(special => { + [...new Set(special.pokemon)].forEach(pokemonName => { + pokemonArray.push({ id: PokemonHelper.getPokemonByName(pokemonName).id, name: pokemonName, type: 'special', requirement: special.req }); + }); + }); + pokemonArray.sort((a, b) => a.id - b.id); + } + const roamerArray = RoamingPokemonList.getSubRegionalGroupRoamers(player.region, RoamingPokemonList.findGroup(player.region, player.subregion)) + .map((roamer) => ({ id: roamer.pokemon.id, name: roamer.pokemonName, type: 'roamer', requirement: roamer.unlockRequirement })) + .sort((a, b) => a.id - b.id); + return roamerArray.length ? { pokemons: pokemonArray, roamers: roamerArray } : { pokemons: pokemonArray }; + } + static getInformations(pokemon) { + if (pokemon.type == 'roamer') { + if (RouteInfo.hasRequirement(pokemon.requirement, SpecialEventRequirement)) { + return { tooltip: 'Event Roaming Pokémon', image: 'event_roaming.png' }; + } + else { + return { tooltip: 'Roaming Pokémon', image: 'roaming.png' }; + } + } + else if (pokemon.type == 'special') { + if (RouteInfo.hasRequirement(pokemon.requirement, SpecialEventRequirement)) { + return { tooltip: 'Event Pokémon', image: 'event.png' }; + } + else if (RouteInfo.hasRequirement(pokemon.requirement, WeatherRequirement)) { + return { tooltip: 'Weather Pokémon', image: 'weather.png' }; + } + else if (RouteInfo.hasRequirement(pokemon.requirement, DayOfWeekRequirement)) { + return { tooltip: 'Day of Week Pokémon', image: 'day_of_week.png' }; + } + } + else if (pokemon.type == 'water' && pokemon.fishing) { + return { tooltip: 'Fishing Pokémon', image: 'fishing.png' }; + } + return null; + } + static hasRequirement(requirement, type) { + //I traverse all the Requirement tree recursively to check if one of the requirements is the one I want + if (requirement instanceof type) { + return true; + } + if (requirement === null || requirement === void 0 ? void 0 : requirement.requirements) { + for (const req of requirement.requirements) { + if (RouteInfo.hasRequirement(req, type)) { + return true; + } + } + } + return false; + } + static getFullName() { + return `${RouteInfo.getRouteName()} - ${RouteInfo.getRegionName()} (${RouteInfo.getSubregionName()})`; + } + static getRouteName() { + return Routes.getName(player.route, player.region); + } + static getRegionName() { + return GameConstants.camelCaseToString(GameConstants.Region[player.region]); + } + static getSubregionName() { + var _a; + return (_a = player.subregionObject()) === null || _a === void 0 ? void 0 : _a.name; + } +} +RouteInfo.pokemonList = ko.pureComputed(() => { + return RouteInfo.getPokemonList(); +}); +/// +/// +/// +/// +/// +class Berry { + static isBaseWanderer(pokemon) { + return this.baseWander.includes(pokemon); + } + constructor(type, growthTime, harvestAmount, replantRate, farmValue, exp, flavors, smoothness, color, size, firmness, description, aura, wander) { + this.type = type; + this.growthTime = growthTime; + this.harvestAmount = harvestAmount; + this.replantRate = replantRate; + this.farmValue = farmValue; + this.exp = exp; + this.smoothness = smoothness; + this.color = color; + this.size = size; + this.firmness = firmness; + this.description = description; + this.aura = aura; + this.flavors = []; + for (let i = 0; i < 5; i++) { + this.flavors.push({ type: i, value: flavors[i] }); + } + this.wander = Berry.baseWander.concat(Berry.colorWander[this.color], wander !== null && wander !== void 0 ? wander : []); + } + get descriptionHTML() { + return this.description.join('
    '); + } +} +Berry.baseWander = [ + 'Tangela', 'Scyther', + 'Pineco', 'Heracross', + 'Cherubi', + 'Sewaddle', 'Karrablast', + 'Scatterbug', + 'Cutiefly', 'Bounsweet', + 'Blipbug', 'Gossifleur', +]; +Berry.colorWander = { + [BerryColor.Red]: ['Ledyba', 'Flabébé (Red)', 'Oricorio (Baile)'], + [BerryColor.Purple]: ['Illumise', 'Oricorio (Sensu)'], + [BerryColor.Pink]: ['Spewpa', 'Oricorio (Pa\'u)'], + [BerryColor.Green]: ['Burmy (Plant)'], + [BerryColor.Yellow]: ['Combee', 'Flabébé (Yellow)', 'Oricorio (Pom-Pom)'], + [BerryColor.Blue]: ['Volbeat', 'Flabébé (Blue)'], + [BerryColor.Silver]: ['Flabébé (White)'], + [BerryColor.Gold]: ['Flabébé (Orange)'], +}; +class BerryDeal { + constructor(berry, berryAmount, item, itemAmount) { + this.berries = []; + berry.forEach((berry, idx) => { + this.berries.push({ berryType: berry, amount: berryAmount[idx] }); + }); + this.item = { itemType: item, amount: itemAmount }; + } + calculateMaxTrades() { + return Math.min(...this.berries.map(b => Math.floor(App.game.farming.berryList[b.berryType]() / b.amount))); + } + static getDeals(town) { + return BerryDeal.list[town]; + } + static randomBerry(berryList) { + return SeededRand.fromArray(berryList); + } + static randomBattleItem() { + const battleItem = SeededRand.fromArray(GameHelper.enumStrings(GameConstants.BattleItemType)); + return ItemList[battleItem]; + } + static randomEvoItem() { + const evoItem = SeededRand.fromArray(GameHelper.enumStrings(GameConstants.StoneType).filter(name => !(['None', 'Black_DNA', 'White_DNA', 'Solar_light', 'Key_stone', 'Lunar_light', 'Pure_light', 'Crystallized_shadow', 'Black_mane_hair', 'White_mane_hair']).includes(name))); + return ItemList[evoItem]; + } + static randomUndergroundItem() { + return ItemList[SeededRand.fromArray(UndergroundItems.list.filter(item => item.valueType !== UndergroundItemValueType.MegaStone)).itemName]; + } + static randomPokeballDeal() { + const firstGen = Farming.getGeneration(0); + const secondGen = Farming.getGeneration(1); + const thirdGen = Farming.getGeneration(2); + return SeededRand.fromArray([ + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + ], ItemList.Fastball, 1), + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + ], ItemList.Moonball, 1), + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + ], ItemList.Quickball, 1), + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + ], ItemList.Timerball, 1), + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + ], ItemList.Duskball, 1), + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + this.randomBerry(thirdGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + SeededRand.intBetween(5, 10), + ], ItemList.Luxuryball, 1), + ]); + } + static generateDeals(date) { + SeededRand.seedWithDate(date); + const berryMasterTowns = [GameConstants.BerryTraderLocations['Goldenrod City'], GameConstants.BerryTraderLocations['Mauville City'], GameConstants.BerryTraderLocations['Hearthome City'], GameConstants.BerryTraderLocations['Pinkan Pokémon Reserve'], GameConstants.BerryTraderLocations['Secret Berry Shop'], GameConstants.BerryTraderLocations['Driftveil City']]; + // Removing old deals + for (const town of berryMasterTowns) { + if (!BerryDeal.list[town]) { + BerryDeal.list[town] = ko.observableArray(); + } + else { + BerryDeal.list[town].removeAll(); + } + } + BerryDeal.list[GameConstants.BerryTraderLocations['Goldenrod City']].push(...this.generateGoldenrodDeals()); + BerryDeal.list[GameConstants.BerryTraderLocations['Mauville City']].push(...this.generateMauvilleDeals()); + BerryDeal.list[GameConstants.BerryTraderLocations['Pinkan Pokémon Reserve']].push(...this.generatePinkanDeals()); + BerryDeal.list[GameConstants.BerryTraderLocations['Hearthome City']].push(...this.generateHearthomeDeals()); + BerryDeal.list[GameConstants.BerryTraderLocations['Secret Berry Shop']].push(...this.generateSecretBerryShopDeals()); + BerryDeal.list[GameConstants.BerryTraderLocations['Driftveil City']].push(...this.generateDriftveilDeals()); + } + static generateGoldenrodDeals() { + const firstGen = Farming.getGeneration(0); + const secondGen = Farming.getGeneration(1); + const thirdGen = Farming.getGeneration(2); + const list = []; + list.push(new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + ], [ + SeededRand.intBetween(30, 70), + SeededRand.intBetween(10, 30), + ], this.randomBattleItem(), SeededRand.intBetween(3, 7))); + list.push(new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + this.randomBerry(thirdGen), + ], [ + SeededRand.intBetween(70, 130), + SeededRand.intBetween(30, 70), + SeededRand.intBetween(10, 30), + ], this.randomEvoItem(), SeededRand.intBetween(1, 3))); + list.push(this.randomPokeballDeal()); + return list; + } + static generateMauvilleDeals() { + const thirdGen = Farming.getGeneration(2); + const fourthGen = Farming.getGeneration(3); + const temp = []; + const maxTries = 30; + let i = 0; + while (i < maxTries && temp.length < 3) { + const deal = new BerryDeal([ + this.randomBerry(thirdGen), + this.randomBerry(fourthGen), + ], [ + SeededRand.intBetween(30, 70), + SeededRand.intBetween(10, 30), + ], this.randomUndergroundItem(), SeededRand.intBetween(1, 3)); + if (temp.every(madeDeal => madeDeal.item.name !== deal.item.itemType.name)) { + temp.push(deal); + } + i++; + } + return temp; + } + static generateHearthomeDeals() { + const firstGen = Farming.getGeneration(0); + const secondGen = Farming.getGeneration(1); + const thirdGen = Farming.getGeneration(2); + const fourthGen = Farming.getGeneration(3); + const fifthGen = [ + BerryType.Micle, + BerryType.Custap, + BerryType.Jaboca, + BerryType.Rowap, + BerryType.Kee, + BerryType.Maranga, + ]; + const list = []; + list.push(new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + this.randomBerry(thirdGen), + this.randomBerry(fourthGen), + this.randomBerry(fifthGen), + ], [ + SeededRand.intBetween(500, 1000), + SeededRand.intBetween(200, 500), + SeededRand.intBetween(100, 200), + SeededRand.intBetween(50, 100), + SeededRand.intBetween(10, 50), + ], ItemList.Masterball, 1)); + list.push(new BerryDeal([this.randomBerry(fourthGen)], [SeededRand.intBetween(50, 100)], ItemList.Protein, 1)); + list.push(new BerryDeal([this.randomBerry(fifthGen)], [SeededRand.intBetween(10, 50)], ItemList.Calcium, 1)); + return [SeededRand.fromArray(list)]; + } + static generatePinkanDeals() { + const list = []; + list.push(new BerryDeal([BerryType.Pinkan], [SeededRand.intBetween(40, 60)], ItemList['Pinkan Arbok'], 1)); + list.push(new BerryDeal([BerryType.Pinkan], [SeededRand.intBetween(20, 40)], ItemList['Pinkan Oddish'], 1)); + list.push(new BerryDeal([BerryType.Pinkan], [SeededRand.intBetween(40, 60)], ItemList['Pinkan Poliwhirl'], 1)); + list.push(new BerryDeal([BerryType.Pinkan], [SeededRand.intBetween(20, 40)], ItemList['Pinkan Geodude'], 1)); + list.push(new BerryDeal([BerryType.Pinkan], [SeededRand.intBetween(80, 100)], ItemList['Pinkan Weezing'], 1)); + list.push(new BerryDeal([BerryType.Pinkan], [SeededRand.intBetween(80, 100)], ItemList['Pinkan Scyther'], 1)); + list.push(new BerryDeal([BerryType.Pinkan], [SeededRand.intBetween(80, 100)], ItemList['Pinkan Electabuzz'], 1)); + return list; + } + static generateSecretBerryShopDeals() { + const list = []; + list.push(new BerryDeal([BerryType.Snover], [SeededRand.intBetween(80, 100)], ItemList['Grotle (Acorn)'], 1)); + return list; + } + static generateDriftveilDeals() { + const firstGen = Farming.getGeneration(0); + const secondGen = Farming.getGeneration(1); + const thirdGen = Farming.getGeneration(2); + const fourthGen = Farming.getGeneration(3); + const fifthGen = [ + BerryType.Micle, + BerryType.Custap, + BerryType.Jaboca, + BerryType.Rowap, + BerryType.Kee, + BerryType.Maranga, + ]; + const pokeballList = [ + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + this.randomBerry(thirdGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + SeededRand.intBetween(5, 10), + ], ItemList.Diveball, 1), + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + this.randomBerry(thirdGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + SeededRand.intBetween(5, 10), + ], ItemList.Lureball, 1), + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + this.randomBerry(thirdGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + SeededRand.intBetween(5, 10), + ], ItemList.Nestball, 1), + new BerryDeal([ + this.randomBerry(firstGen), + this.randomBerry(secondGen), + this.randomBerry(thirdGen), + ], [ + SeededRand.intBetween(20, 40), + SeededRand.intBetween(5, 15), + SeededRand.intBetween(5, 10), + ], ItemList.Repeatball, 1), + ]; + const vitaminList = [ + new BerryDeal([this.randomBerry(fourthGen)], [SeededRand.intBetween(50, 100)], ItemList.Protein, 1), + new BerryDeal([this.randomBerry(fifthGen)], [SeededRand.intBetween(10, 50)], ItemList.Calcium, 1), + new BerryDeal([this.randomBerry(fifthGen)], [SeededRand.intBetween(10, 50)], ItemList.Carbos, 1), + ]; + return [ + SeededRand.fromArray(pokeballList), + SeededRand.fromArray(vitaminList), + ]; + } + static canUse(town, i) { + var _a; + const deal = (_a = BerryDeal.list[town]) === null || _a === void 0 ? void 0 : _a.peek()[i]; + if (!deal) { + return false; + } + else { + return deal.berries.every((value) => App.game.farming.berryList[value.berryType]() >= value.amount); + } + } + static use(town, i, tradeTimes = 1) { + var _a; + const deal = (_a = BerryDeal.list[town]) === null || _a === void 0 ? void 0 : _a.peek()[i]; + if (BerryDeal.canUse(town, i)) { + const trades = deal.berries.map(berry => { + const amt = App.game.farming.berryList[berry.berryType](); + const maxTrades = Math.floor(amt / berry.amount); + return maxTrades; + }); + const maxTrades = trades.reduce((a, b) => Math.min(a, b), tradeTimes); + deal.berries.forEach((value) => GameHelper.incrementObservable(App.game.farming.berryList[value.berryType], -value.amount * maxTrades)); + if (deal.item.itemType instanceof UndergroundItem) { + Underground.gainMineItem(deal.item.itemType.id, deal.item.amount * maxTrades); + } + else { + deal.item.itemType.gain(deal.item.amount * maxTrades); + } + GameHelper.incrementObservable(App.game.statistics.berryDailyDealTrades); + const amount = deal.item.amount * maxTrades; + Notifier.notify({ + message: `You traded for ${amount.toLocaleString('en-US')} × ${GameConstants.pluralizeString(GameConstants.humanifyString(deal.item.itemType.displayName), amount)}.`, + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Items.item_bought, + }); + } + } +} +BerryDeal.list = {}; +/// +class FarmController { + static initialize() { + this.berryListFiltered(Array.from(Array(GameHelper.enumLength(BerryType) - 1).keys())); + this.numberOfTabs = ko.pureComputed(() => { + return Math.floor(App.game.farming.highestUnlockedBerry() / this.BERRIES_PER_PAGE); + }); + this.berryListEnd = ko.pureComputed(() => { + var _a; + const highestMutation = App.game.farming.mutations.slice().sort((a, b) => b.mutatedBerry - a.mutatedBerry).find(mut => mut._hintSeen() && !App.game.farming.unlockedBerries[mut.mutatedBerry]()); + const highestMutationHint = (_a = highestMutation === null || highestMutation === void 0 ? void 0 : highestMutation.mutatedBerry) !== null && _a !== void 0 ? _a : 0; + return Math.max(App.game.farming.highestUnlockedBerry(), highestMutationHint); + }); + this.navigateIndex(0); + } + static openFarmModal() { + if (App.game.farming.canAccess()) { + $('#farmModal').modal('show'); + } + else { + Notifier.notify({ + message: `You need the ${GameConstants.humanifyString(KeyItemType[KeyItemType.Wailmer_pail])} to access this location.\nClear Route 6 first.`, + type: NotificationConstants.NotificationOption.warning, + }); + } + } + static getImage(index) { + const plot = App.game.farming.plotList[index]; + if (plot.berry === BerryType.None) { + return ''; + } + if (plot.stage() === PlotStage.Seed) { + return 'assets/images/farm/AllTreeSeed.png'; + } + else if (plot.stage() === PlotStage.Sprout) { + return 'assets/images/farm/AllTreeSprout.png'; + } + return `assets/images/farm/${BerryType[plot.berry]}Tree${PlotStage[plot.stage()]}.png`; + } + static calculateCssClassFromTool(plot, tool) { + switch (tool) { + case FarmingTool.Lock: + return 'PlotSafeLockSelected'; + case FarmingTool.Mulch: + return 'MulchSelected'; + case FarmingTool.Shovel: + return 'ShovelSelected'; + case FarmingTool.MulchShovel: + return 'MulchShovelSelected'; + case FarmingTool.Berry: + default: + return plot.wanderer ? 'WandererHandling' : 'BerrySelected'; + } + } + static calculateCssClass(plot) { + return this.calculateCssClassFromTool(plot, this.selectedFarmTool()); + } + static calcMulchClass(plot) { + if (plot.mulch === MulchType.None) { + return ''; + } + return MulchType[plot.mulch]; + } + static plotClick(index, event) { + const plot = App.game.farming.plotList[index]; + // If shift key held, lock/unlock plot + if (event.shiftKey) { + this.shiftTogglePlotSafeLock(plot, index); + } + else { + this.handleClickActions(this.selectedFarmTool(), plot, index); + } + } + static plotClickMini(index, event) { + const plot = App.game.farming.plotList[index]; + // Unlocking Plot (we don't want to do this in the farm module) + if (!plot.isUnlocked) { + return; + } + // If shift key held, lock/unlock plot + if (event.shiftKey) { + this.shiftTogglePlotSafeLock(plot, index); + } + else { + this.handleClickActions(this.selectedFarmModuleTool(), plot, index); + } + } + static shiftTogglePlotSafeLock(plot, index) { + if (!plot.isUnlocked) { + return; + } + App.game.farming.togglePlotSafeLock(index); + } + static toggleAllPlotLocks() { + App.game.farming.plotList.forEach((plot, index) => { + if (plot.isUnlocked) { + App.game.farming.togglePlotSafeLock(index); + } + }); + } + static toggleAllPlotLocksTo(lock) { + App.game.farming.plotList.forEach((plot, index) => { + if (plot.isUnlocked && ((lock && !plot.isSafeLocked) || (!lock && plot.isSafeLocked))) { + App.game.farming.togglePlotSafeLock(index); + } + }); + } + static handleClickActions(tool, plot, index) { + // Unlocking Plot + if (!plot.isUnlocked) { + return App.game.farming.unlockPlot(index); + } + // Check which tool we have selected + switch (tool) { + case FarmingTool.Berry: + if (plot.wanderer) { + App.game.farming.handleWanderer(plot); + } + else if (plot.isEmpty()) { + App.game.farming.plant(index, this.selectedBerry()); + } + else { + App.game.farming.harvest(index); + } + break; + case FarmingTool.Mulch: + App.game.farming.addMulch(index, this.selectedMulch(), this.getAmount()); + break; + case FarmingTool.Shovel: + App.game.farming.shovel(index); + break; + case FarmingTool.MulchShovel: + App.game.farming.shovelMulch(index); + break; + case FarmingTool.Lock: + App.game.farming.togglePlotSafeLock(index); + break; + } + } + static calculateCssClassMini(plot) { + return this.calculateCssClassFromTool(plot, this.selectedFarmModuleTool()); + } + static mulchAll() { + if (!Settings.getSetting('confirmBeformeMulchingAllPlots').observableValue()) { + return App.game.farming.mulchAll(FarmController.selectedMulch(), this.getAmount()); + } + Notifier.confirm({ + title: 'Mulch All', + message: `Are you sure you want to use ${this.getAmount()} ${MulchType[FarmController.selectedMulch()].replace('_', ' ')} on all plots?`, + type: NotificationConstants.NotificationOption.info, + confirm: 'Mulch', + }).then(confirmed => { + if (confirmed) { + App.game.farming.mulchAll(FarmController.selectedMulch(), this.getAmount()); + } + }); + } + static navigateRight() { + if (FarmController.navigateIndex() < FarmController.numberOfTabs()) { + FarmController.navigateIndex(FarmController.navigateIndex() + 1); + this.selectedBerry(this.getUnlockedBerryListWithIndex()[0]); + } + } + static navigateLeft() { + if (FarmController.navigateIndex() > 0) { + FarmController.navigateIndex(FarmController.navigateIndex() - 1); + this.selectedBerry(this.getUnlockedBerryListWithIndex()[0]); + } + } + static getUnlockedBerryListWithIndex() { + return this.getUnlockedBerryList().slice(this.navigateIndex() * this.BERRIES_PER_PAGE, (this.navigateIndex() * this.BERRIES_PER_PAGE) + this.BERRIES_PER_PAGE); + } + static getUnlockedBerryList() { + return this.berryListFiltered().filter((berry) => berry <= this.berryListEnd()); + } + static getAmount() { + return Number(this.multipliers[this.multIndex()].replace(/\D/g, '')) || Infinity; + } + static incrementMultiplier() { + this.multIndex((this.multIndex() + 1) % this.multipliers.length); + } + static decrementMultiplier() { + this.multIndex((this.multIndex() + this.multipliers.length - 1) % this.multipliers.length); + } + static getBackgroundColor(index) { + if (App.game.farming.unlockedBerries[index]()) { + return GameConstants.BerryColor[App.game.farming.berryData[index].color]; + } + else if (FarmController.getHint(index, true) !== '') { + return GameConstants.BerryColor[8]; + } + else { + return GameConstants.BerryColor[9]; + } + } + static getBerryImage(index) { + return `assets/images/items/berry/${BerryType[index]}.png`; + } + static getHint(index, checkSeen = false, checkUnlocked = false) { + if (checkUnlocked && App.game.farming.unlockedBerries[index]()) { + return ''; + } + const mutation = App.game.farming.mutations.find(mutation => mutation.mutatedBerry === index && mutation.showHint); + if (mutation) { + if (checkSeen && !mutation.hintSeen) { + return ''; + } + return mutation.hint; + } + return ''; + } + // For preview in Farm Modal's BerryDex Tab + static handleBerryDexClick(berryId) { + if (App.game.statistics.selectedBerryID() === berryId && App.game.farming.unlockedBerries[berryId]()) { + $('#berryDexModal').modal('show'); + } + App.game.statistics.selectedBerryID(berryId); + } + static wandererToRoute(pokemon) { + const maxRegion = player.highestRegion(); + const pokemonRegion = pokemonMap[pokemon].nativeRegion; + const routes = Routes.getRoutesByRegion(maxRegion).filter(r => !r.ignoreRouteInCalculations); + const minIndex = Math.floor((routes.length - 1) * pokemonRegion / (maxRegion + 2)); + const maxIndex = Math.floor((routes.length - 1) * (pokemonRegion + 2) / (maxRegion + 2)); + // Adds a bit of randomness so it is not always the same route + const routeIndex = Rand.intBetween(minIndex, maxIndex); + return routes[routeIndex]; + } + static getWandererStyle(plot) { + if (!plot.wanderer) { + return ''; + } + const pokemon = pokemonMap[plot.wanderer.name]; + const forgedID = `${pokemon.id}${plot.wanderer.shiny ? 's' : ''}`; + return `${plot.wanderer.shiny ? 'url(\'assets/images/dynamic-background/pokemon/sparkle.png\'), ' : ''}url('assets/images/dynamic-background/pokemon/${forgedID}.png')`; + } + static getWandererCss(plot) { + if (!plot.wanderer) { + return ''; + } + if (plot.wanderer.fleeing()) { + return 'walkDownFlee'; + } + else if (plot.wanderer.distractTime() > 0) { + return 'walkDownFlash'; + } + else { + return 'walkDown'; + } + } +} +FarmController.navigateIndex = ko.observable(0); +FarmController.berryListFiltered = ko.observableArray([]); +FarmController.farmingModalTabSelected = ko.observable('berryFarmView'); +FarmController.selectedBerry = ko.observable(BerryType.Cheri); +FarmController.selectedMulch = ko.observable(MulchType.Boost_Mulch); +FarmController.selectedFarmTool = ko.observable(FarmingTool.Berry); +FarmController.selectedFarmModuleTool = ko.observable(FarmingTool.Berry); +FarmController.berryListVisible = ko.observable(true); +FarmController.multipliers = ['×1', '×10', '×100', '×1000', 'All']; +FarmController.multIndex = ko.observable(0); +FarmController.BERRIES_PER_PAGE = 8; +FarmController.additionalInfoTooltip = ko.pureComputed(() => { + const tooltip = []; + // External Auras + App.game.farming.externalAuras.forEach((aura, idx) => { + if (typeof aura === 'undefined') { + return; + } + if (aura() !== 1) { + tooltip.push(`${AuraType[idx]}: ×${aura().toLocaleString('en-US', { minimumFractionDigits: 3, maximumFractionDigits: 3 })}`); + } + }); + // Adding header if necessary + if (tooltip.length) { + tooltip.unshift('External Auras'); + } + return tooltip.join('
    '); +}); +FarmController.shortcutVisible = ko.pureComputed(() => { + return App.game.farming.canAccess() && !Settings.getSetting('showFarmModule').observableValue(); +}); +const FarmHandSkills = [ + 'energy', + 'efficiency', + 'accuracy', + 'cost', +]; +var FarmHandSpeeds; +(function (FarmHandSpeeds) { + FarmHandSpeeds[FarmHandSpeeds["Fastest"] = 0] = "Fastest"; + FarmHandSpeeds[FarmHandSpeeds["Faster"] = 1] = "Faster"; + FarmHandSpeeds[FarmHandSpeeds["Fast"] = 2] = "Fast"; + FarmHandSpeeds[FarmHandSpeeds["AboveAverage"] = 3] = "AboveAverage"; + FarmHandSpeeds[FarmHandSpeeds["Average"] = 4] = "Average"; + FarmHandSpeeds[FarmHandSpeeds["BelowAverage"] = 5] = "BelowAverage"; + FarmHandSpeeds[FarmHandSpeeds["Slow"] = 6] = "Slow"; + FarmHandSpeeds[FarmHandSpeeds["Slower"] = 7] = "Slower"; + FarmHandSpeeds[FarmHandSpeeds["Slowest"] = 8] = "Slowest"; + FarmHandSpeeds[FarmHandSpeeds["SnailPaced"] = 9] = "SnailPaced"; + FarmHandSpeeds[FarmHandSpeeds["Lazy"] = 10] = "Lazy"; +})(FarmHandSpeeds || (FarmHandSpeeds = {})); +/* +TODO: +Work in levels/experience somehow +Use accuracy to decide if they plant the right berry or plant a berry at all (still use up energy?) +Use accuracy to decide if they harvest a berry by accident? (still use up energy?) +*/ +var FarmHandBerryType; +(function (FarmHandBerryType) { + FarmHandBerryType[FarmHandBerryType["Random"] = -3] = "Random"; + FarmHandBerryType[FarmHandBerryType["Replant"] = -2] = "Replant"; +})(FarmHandBerryType || (FarmHandBerryType = {})); +const FarmHandBerryTypes = Object.assign(Object.assign({}, FarmHandBerryType), BerryType); +class FarmHand { + // public level: number; + // public experience: number; + constructor(name, maxEnergy, // 10 - 100 + efficiency, // 1 - 50? + speed, accuracy, // 0 - 10 (80% - 100%) + cost, // 0 - 10? (can go higher if needed) + unlockRequirement) { + this.name = name; + this.maxEnergy = maxEnergy; + this.efficiency = efficiency; + this.speed = speed; + this.accuracy = accuracy; + this.unlockRequirement = unlockRequirement; + this.defaults = { + focus: BerryType.None, + shouldHarvest: false, + workTicks: 0, + costTicks: 0, + energy: 0, + hired: false, + plots: [], + name: undefined, + shouldCatch: false, + }; + // Maximum Efficiency value + this.maxEfficiency = 50; + // Negative value so they are charged on the first tick and work on the first tick + this.workTicks = ko.observable(-GameConstants.TICK_TIME).extend({ numeric: 0 }); + this.costTicks = ko.observable(-GameConstants.TICK_TIME).extend({ numeric: 0 }); + this.costTick = GameConstants.HOUR; + this.cost = new Amount(+0, GameConstants.Currency.farmPoint); + this.trainerSprite = 0; + this.focus = ko.observable(BerryType.None); + this.shouldHarvest = ko.observable(false).extend({ boolean: null }); + this.energy = ko.observable(0).extend({ numeric: 0 }); + this.hired = ko.observable(false).extend({ boolean: null }); + this.plots = ko.observableArray(new Array(GameConstants.FARM_PLOT_WIDTH * GameConstants.FARM_PLOT_HEIGHT).fill(0).map((v, i) => i)); + this.shouldCatch = ko.observable(false); + SeededRand.seed(parseInt(this.name, 36)); + this.trainerSprite = SeededRand.intBetween(0, 118); + // Negative value so they are charged on the first tick and work on the first tick + this.workTicks(-GameConstants.TICK_TIME); + this.costTicks(-GameConstants.TICK_TIME); + // Set initial energy to maximum energy + this.energy(this.maxEnergy); + // Calculate how much to charge the player in farm points + this.cost = new Amount(+Math.pow(100, 1 + cost * 0.08).toPrecision(2), GameConstants.Currency.farmPoint); + // Calculate how often they work + this.workTick = this.calcWorkTick(this.speed); + this.tooltip = ko.pureComputed(() => `${this.name}
    + Energy: ${this.energy()}/${this.maxEnergy}
    + Work Cycle: ${GameConstants.formatTimeFullLetters((this.workTick - this.workTicks()) / GameConstants.SECOND)}
    + Next Payment: ${GameConstants.formatTimeFullLetters((this.costTick - this.costTicks()) / GameConstants.SECOND)}`); + } + calcWorkTick(speed) { + speed = ((speed + 1) * 0.03) + 1; + let time = Math.pow(GameConstants.MINUTE, speed); + time -= time > 5 * GameConstants.MINUTE ? time % GameConstants.MINUTE : time % (30 * GameConstants.SECOND); + return time; + } + isUnlocked() { + var _a, _b; + return (_b = (_a = this.unlockRequirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true; + } + togglePlot(plotIndex) { + const index = this.plots().findIndex(p => p == plotIndex); + if (index >= 0) { + this.plots.splice(index, 1); + } + else { + this.plots.push(plotIndex); + } + this.plots.sort((a, b) => a - b); + } + hire() { + // Negative value so they are charged on the first tick and work on the first tick + this.workTicks(-GameConstants.TICK_TIME); + this.costTicks(-GameConstants.TICK_TIME); + // Check the player has enough Farm Points to hire this Farm Hand + if (!App.game.wallet.hasAmount(this.cost)) { + Notifier.notify({ + title: `[FARM HAND] ${this.name}`, + message: `You don't have enough Farm Points to hire me...\nCost: ${this.cost.amount.toLocaleString('en-US')}`, + type: NotificationConstants.NotificationOption.warning, + timeout: 30 * GameConstants.SECOND, + }); + return; + } + // Farm hand is hired + this.hired(true); + Notifier.notify({ + title: `[FARM HAND] ${this.name}`, + message: 'Thanks for hiring me,\nI won\'t let you down!', + type: NotificationConstants.NotificationOption.success, + timeout: 30 * GameConstants.SECOND, + setting: NotificationConstants.NotificationSetting.Farming.farm_hand, + }); + } + fire() { + Notifier.notify({ + title: `[FARM HAND] ${this.name}`, + message: 'Thanks for the work.\nLet me know when you\'re hiring again!', + type: NotificationConstants.NotificationOption.info, + timeout: 30 * GameConstants.SECOND, + setting: NotificationConstants.NotificationSetting.Farming.farm_hand, + }); + this.hired(false); + return; + } + tick() { + // If not hired, nothing to do + if (!this.hired()) { + // energy isn't full, restore energy + if (this.energy() < this.maxEnergy) { + this.addEnergy(); + } + return; + } + // Charge player when cost tick reached + GameHelper.incrementObservable(this.costTicks, GameConstants.TICK_TIME); + if (this.costTicks() % this.costTick < GameConstants.TICK_TIME) { + this.costTicks(0); + this.charge(); + } + // Work/Restore energy when work ticks reached + GameHelper.incrementObservable(this.workTicks, GameConstants.TICK_TIME); + if (this.workTicks() % this.workTick < GameConstants.TICK_TIME) { + this.workTicks(0); + this.work(); + } + } + work() { + // Out of energy cannot work right now.. + if (!this.energy()) { + this.addEnergy(); + return; + } + // flip this if they worked, otherwise restore energy points + let worked = false; + let workTimes = this.efficiency; + // Harvesting berries + if (this.shouldHarvest()) { + let readyPlotIndex; + do { + readyPlotIndex = App.game.farming.plotList.findIndex((p, i) => p.isUnlocked && p.berry !== BerryType.None && p.stage() >= PlotStage.Berry && this.plots().includes(i) && !p.isSafeLocked); + if (readyPlotIndex >= 0 && workTimes > 0) { + const berry = App.game.farming.plotList[readyPlotIndex].berry; + App.game.farming.harvest(readyPlotIndex); + workTimes--; + worked = true; + if (this.focus() == FarmHandBerryTypes.Replant) { + App.game.farming.plant(readyPlotIndex, berry); + workTimes--; + } + } + } while (readyPlotIndex >= 0 && workTimes > 0); + } + // Planting berries + if (this.focus() != FarmHandBerryTypes.None) { + let emptyPlotIndex; + let berry; + do { + // Find empty plots + emptyPlotIndex = App.game.farming.plotList.findIndex((p, i) => p.isUnlocked && p.berry == BerryType.None && this.plots().includes(i) && !p.isSafeLocked); + // Plant the berry + if (emptyPlotIndex >= 0 && workTimes > 0) { + // Plant the expected berry + switch (this.focus()) { + case FarmHandBerryTypes.Replant: // Re-plant last berry used + berry = App.game.farming.plotList[emptyPlotIndex].lastPlanted; + break; + case FarmHandBerryTypes.Random: // Plant a random berry + berry = Rand.fromArray(App.game.farming.farmHands.availableBerries().filter(b => b >= 0)); + break; + default: + berry = this.focus(); + } + // If we somehow didn't find a berry to use, just plant a Cheri.. + berry = berry < 0 ? BerryType.Cheri : berry; + // Only plant and work if the player has a berry to plant + if (App.game.farming.hasBerry(berry)) { + App.game.farming.plant(emptyPlotIndex, berry); + workTimes--; + worked = true; + } + } + } while (emptyPlotIndex >= 0 && workTimes > 0 && App.game.farming.hasBerry(berry)); + } + if (this.shouldCatch()) { + // First handle plots whose wanderer might flee soon + const prioPlots = App.game.farming.plotList.filter(p => p.wanderer && p.wanderer.distractTime() > 0 && !p.wanderer.catching()); + while (prioPlots.length > 0 && workTimes > 0) { + const plot = prioPlots.shift(); + if (this.plots().includes(plot.index)) { + App.game.farming.handleWanderer(plot); + workTimes--; + worked = true; + } + } + // Then handle any plot + const plots = App.game.farming.plotList.filter(p => p.wanderer && !p.wanderer.catching()); + while (plots.length > 0 && workTimes > 0) { + const plot = plots.shift(); + if (this.plots().includes(plot.index)) { + App.game.farming.handleWanderer(plot); + workTimes--; + worked = true; + } + } + } + if (!worked) { + this.addEnergy(); + } + else { + this.useEnergy(); + } + } + addEnergy(amt = 1) { + // Only allow up to maximum value + this.energy(Math.min(this.maxEnergy, this.energy() + amt)); + } + useEnergy(amt = 1) { + // Only allow to go down to 0 + this.energy(Math.max(0, this.energy() - amt)); + } + charge() { + // Charge the player if they can afford it, otherwise notify that they cannot + if (!App.game.wallet.loseAmount(this.cost)) { + Notifier.notify({ + title: `[FARM HAND] ${this.name}`, + message: `It looks like you are a little short on Farm Points right now...\nLet me know when you're hiring again!\nCost: ${this.cost.amount.toLocaleString('en-US')}`, + type: NotificationConstants.NotificationOption.danger, + timeout: 30 * GameConstants.MINUTE, + }); + this.hired(false); + App.game.logbook.newLog(LogBookTypes.OTHER, createLogContent.unableToPayFarmHand({ name: this.name })); + return; + } + // Charge the player for the hour + Notifier.notify({ + title: `[FARM HAND] ${this.name}`, + message: `Here's your bill for the hour!\nCost: ${this.cost.amount.toLocaleString('en-US')}`, + type: NotificationConstants.NotificationOption.info, + timeout: 30 * GameConstants.SECOND, + }); + } + toJSON() { + const output = { + focus: this.focus(), + shouldHarvest: this.shouldHarvest(), + workTicks: this.workTicks(), + costTicks: this.costTicks(), + energy: this.energy(), + hired: this.hired(), + plots: this.plots(), + // It uses the name to look up the farmhand on load + name: this.name, + shouldCatch: this.shouldCatch(), + }; + // Don't save anything that is the default option + Object.entries(output).forEach(([key, value]) => { + if (value === this.defaults[key]) { + delete output[key]; + } + }); + return output; + } + fromJSON(json) { + var _a, _b, _c, _d, _e, _g, _h, _j; + if (!json) { + return; + } + this.focus((_a = json.focus) !== null && _a !== void 0 ? _a : this.defaults.focus); + this.shouldHarvest((_b = json.shouldHarvest) !== null && _b !== void 0 ? _b : this.defaults.shouldHarvest); + this.workTicks((_c = json.workTicks) !== null && _c !== void 0 ? _c : this.defaults.workTicks); + this.costTicks((_d = json.costTicks) !== null && _d !== void 0 ? _d : this.defaults.costTicks); + this.energy((_e = json.energy) !== null && _e !== void 0 ? _e : this.defaults.energy); + this.hired((_g = json.hired) !== null && _g !== void 0 ? _g : this.defaults.hired); + this.plots((_h = json.plots) !== null && _h !== void 0 ? _h : this.defaults.plots); + this.shouldCatch((_j = json.shouldCatch) !== null && _j !== void 0 ? _j : this.defaults.shouldCatch); + } +} +class FarmHands { + static add(farmHand) { + this.list.push(farmHand); + } + constructor() { + this.MAX_HIRES = 3; + this.requirement = new BerriesUnlockedRequirement(8); + this.available = ko.pureComputed(() => FarmHands.list.filter(f => f.isUnlocked())); + this.hired = ko.pureComputed(() => FarmHands.list.filter(f => f.hired())); + this.availableBerries = ko.pureComputed(() => GameHelper.enumNumbers(FarmHandBerryTypes).filter(b => { var _a, _b; return ((_b = (_a = App.game.farming.unlockedBerries)[b]) === null || _b === void 0 ? void 0 : _b.call(_a)) || b < 0; }).sort((a, b) => a - b)); + this.canHire = ko.pureComputed(() => this.hired().length < this.MAX_HIRES); + } + isUnlocked() { + return this.requirement.isCompleted(); + } + tick() { + // run game tick for all farmhands + FarmHands.list.forEach(f => f.tick()); + } + toJSON() { + return this.available().map(f => f.toJSON()); + } + fromJSON(json) { + if (!json || !json.length) { + return; + } + FarmHands.list.forEach(f => { + const data = json === null || json === void 0 ? void 0 : json.find(_f => _f.name == f.name); + if (data) { + f.fromJSON(data); + } + }); + } +} +FarmHands.list = []; +// Note: Gender-neutral names used as the trainer sprite is (seeded) randomly generated +FarmHands.add(new FarmHand('Alex', 10, 1, FarmHandSpeeds.Lazy, 1, 1, new BerriesUnlockedRequirement(8))); +FarmHands.add(new FarmHand('Logan', 15, 3, FarmHandSpeeds.Slowest, 2, 4, new BerriesUnlockedRequirement(16))); +FarmHands.add(new FarmHand('Joey', 10, 5, FarmHandSpeeds.Slow, 2, 5, new BerriesUnlockedRequirement(24))); +FarmHands.add(new FarmHand('Charlie', 30, 10, FarmHandSpeeds.BelowAverage, 7, 6, new BerriesUnlockedRequirement(32))); +FarmHands.add(new FarmHand('Bailey', 10, 12, FarmHandSpeeds.Average, 7, 7, new UniqueItemOwnedRequirement('FarmHandBailey', 'purchase'))); +FarmHands.add(new FarmHand('Kerry', 50, 16, FarmHandSpeeds.AboveAverage, 8, 8, new UniqueItemOwnedRequirement('FarmHandKerry', 'purchase'))); +FarmHands.add(new FarmHand('Riley', 70, 25, FarmHandSpeeds.Fast, 8, 10, new UniqueItemOwnedRequirement('FarmHandRiley', 'purchase'))); +FarmHands.add(new FarmHand('Jamie', 65, 5, FarmHandSpeeds.Faster, 9, 10, new UniqueItemOwnedRequirement('FarmHandJamie', 'purchase'))); +FarmHands.add(new FarmHand('Jessie', 100, 50, FarmHandSpeeds.Fastest, 10, 12, new BerriesUnlockedRequirement(56))); +/// +/// +class Farming { + constructor(multiplier) { + this.multiplier = multiplier; + this.name = 'Farming'; + this.saveKey = 'farming'; + this.berryData = []; + this.mutations = []; + this.farmHands = new FarmHands(); + this.mutationCounter = 0; + this.wanderCounter = 0; + this.defaults = { + berryList: Array(GameHelper.enumLength(BerryType) - 1).fill(0), + unlockedBerries: Array(GameHelper.enumLength(BerryType) - 1).fill(false), + mulchList: Array(GameHelper.enumLength(MulchType)).fill(0), + plotList: new Array(GameConstants.FARM_PLOT_WIDTH * GameConstants.FARM_PLOT_HEIGHT).fill(null).map((value, index) => { + const middle = Math.floor(GameConstants.FARM_PLOT_HEIGHT / 2) * GameConstants.FARM_PLOT_WIDTH + Math.floor(GameConstants.FARM_PLOT_WIDTH / 2); + return new Plot(index === middle, BerryType.None, 0, MulchType.None, 0, index); + }), + shovelAmt: 0, + mulchShovelAmt: 0, + }; + this.berryList = this.defaults.berryList.map((v) => ko.observable(v)); + this.unlockedBerries = this.defaults.unlockedBerries.map((v) => ko.observable(v)); + this.mulchList = this.defaults.mulchList.map((v) => ko.observable(v)); + this.plotList = this.defaults.plotList; + this.unlockedPlotCount = ko.observable(0); + this.shovelAmt = ko.observable(this.defaults.shovelAmt); + this.mulchShovelAmt = ko.observable(this.defaults.mulchShovelAmt); + this.externalAuras = []; + this.externalAuras[AuraType.Attract] = ko.pureComputed(() => this.multiplyPlotAuras(AuraType.Attract)); + this.externalAuras[AuraType.Egg] = ko.pureComputed(() => this.multiplyPlotAuras(AuraType.Egg)); + this.externalAuras[AuraType.Shiny] = ko.pureComputed(() => this.multiplyPlotAuras(AuraType.Shiny)); + this.externalAuras[AuraType.Roaming] = ko.pureComputed(() => this.multiplyPlotAuras(AuraType.Roaming)); + this.externalAuras[AuraType.Ev] = ko.pureComputed(() => this.multiplyPlotAuras(AuraType.Ev)); + this.externalAuras[AuraType.Xp] = ko.pureComputed(() => this.multiplyPlotAuras(AuraType.Xp)); + const multiplierSource = 'Farm Aura'; + this.multiplier.addBonus('shiny', () => this.externalAuras[AuraType.Shiny](), multiplierSource); + this.multiplier.addBonus('eggStep', () => this.externalAuras[AuraType.Egg](), multiplierSource); + this.multiplier.addBonus('roaming', () => this.externalAuras[AuraType.Roaming](), multiplierSource); + this.multiplier.addBonus('ev', () => this.externalAuras[AuraType.Ev](), multiplierSource); + this.multiplier.addBonus('exp', () => this.externalAuras[AuraType.Xp](), multiplierSource); + this.highestUnlockedBerry = ko.pureComputed(() => { + for (let i = GameHelper.enumLength(BerryType) - 2; i >= 0; i--) { + if (this.unlockedBerries[i]()) { + return i; + } + } + return 0; + }); + } + initialize() { + //#region Berry Data + //#region First Generation + this.berryData[BerryType.Cheri] = new Berry(BerryType.Cheri, // name type + [5, 10, 20, 30, 60], // growth times for each stage [sprout, taller, bloom, berry, death] + 2, // harvest amount + 0.5, // replant rate, 1 is 100% + 5, // farm points per harvest (farm currency) + 1, // experience per harvest (affects how fast prices of Berry Master items (mulches, shovels, etc) go back to their base cost after being bought) + [10, 0, 0, 0, 0], // flavors [Spicy, Dry, Sweet, Bitter, Sour] (for pokeblocks and poffins) + 25, // smoothness (for pokeblocks and poffins) + BerryColor.Red, // color + 2, // size + BerryFirmness.Soft, // firmness + ['This bright red Berry is very spicy and has a provocative flavor. It blooms with delicate, pretty flowers.'] // description + // aura + // mature plant wanderers + ); + this.berryData[BerryType.Chesto] = new Berry(BerryType.Chesto, [5, 15, 25, 40, 80], 3, 0.5, 6, 2, [0, 10, 0, 0, 0], 25, BerryColor.Purple, 8, BerryFirmness.Super_Hard, ['This Berry\'s thick skin and fruit are very tough and dry-tasting. However, every bit of it can be eaten.']); + this.berryData[BerryType.Pecha] = new Berry(BerryType.Pecha, [10, 35, 50, 60, 120], 4, 0.5, 7, 3, [0, 0, 10, 0, 0], 25, BerryColor.Pink, 4, BerryFirmness.Very_Soft, ['Because of its hollow inside pocket, there isn\'t a lot to eat. What can be eaten is very sweet and delicious.']); + this.berryData[BerryType.Rawst] = new Berry(BerryType.Rawst, [15, 30, 45, 80, 160], 5, 0.5, 8, 4, [0, 0, 0, 10, 0], 25, BerryColor.Green, 3.2, BerryFirmness.Hard, ['If the leaves grow longer and curlier than average, this Berry will have a somewhat-bitter taste.']); + this.berryData[BerryType.Aspear] = new Berry(BerryType.Aspear, [10, 40, 60, 120, 240], 6, 0.5, 9, 5, [0, 0, 0, 0, 10], 25, BerryColor.Yellow, 5, BerryFirmness.Super_Hard, ['This Berry\'s peel is hard, but the flesh inside is very juicy. It is distinguished by its bracing sourness.']); + this.berryData[BerryType.Leppa] = new Berry(BerryType.Leppa, [100, 120, 140, 240, 480], 7, 0.5, 10, 6, [10, 0, 10, 10, 10], 20, BerryColor.Red, 2.8, BerryFirmness.Very_Hard, ['It takes longer to grow than Berries such as Cheri. The smaller Berries taste better.']); + this.berryData[BerryType.Oran] = new Berry(BerryType.Oran, [120, 180, 240, 300, 600], 8, 0.5, 20, 7, [10, 10, 0, 10, 10], 20, BerryColor.Blue, 3.5, BerryFirmness.Super_Hard, ['Nature\'s gifts came together as one in this Berry. It has a wondrous mix of flavors that spread in the mouth.']); + this.berryData[BerryType.Sitrus] = new Berry(BerryType.Sitrus, [150, 300, 450, 600, 1200], 9, 0.5, 30, 8, [0, 10, 10, 10, 10], 20, BerryColor.Yellow, 9.5, BerryFirmness.Very_Hard, ['Sitrus came from the same family as Oran. It is larger and smoother-tasting than Oran.']); + //#endregion + //#region Second Generation + this.berryData[BerryType.Persim] = new Berry(BerryType.Persim, [20, 40, 50, 90, 180], 5, 0.4, 10, 2, [10, 10, 10, 0, 10], 20, BerryColor.Pink, 4.7, BerryFirmness.Hard, ['The more this Berry absorbs energy from sunlight, the more vividly colorful it grows.']); + this.berryData[BerryType.Razz] = new Berry(BerryType.Razz, [100, 150, 200, 250, 500], 7, 0.4, 15, 2, [10, 10, 0, 0, 0], 20, BerryColor.Red, 12, BerryFirmness.Very_Hard, ['A small hint of spiciness lingers in the red granules surrounding this Berry. Their centers have a dry taste.']); + this.berryData[BerryType.Bluk] = new Berry(BerryType.Bluk, [200, 250, 300, 330, 660], 9, 0.4, 20, 2, [0, 10, 10, 0, 0], 20, BerryColor.Purple, 10.8, BerryFirmness.Soft, ['Though this small, delicately-skinned Berry is blue in color, it dyes the mouth black when eaten.']); + this.berryData[BerryType.Nanab] = new Berry(BerryType.Nanab, [25, 30, 35, 250, 500], 11, 0.4, 25, 2, [0, 0, 10, 10, 0], 20, BerryColor.Pink, 7.7, BerryFirmness.Very_Hard, ['Bitter, but with a trace of sweetness, the Nanab Berry was the seventh to be discovered in the world.']); + this.berryData[BerryType.Wepear] = new Berry(BerryType.Wepear, [150, 350, 375, 400, 800], 12, 0.4, 30, 2, [0, 0, 0, 10, 10], 20, BerryColor.Green, 7.4, BerryFirmness.Super_Hard, ['The potent mix of bitter and sour in this Berry seems to promote digestion. The flower is white and beautiful.']); + this.berryData[BerryType.Pinap] = new Berry(BerryType.Pinap, [30, 60, 180, 240, 480], 13, 0.4, 35, 2, [10, 0, 0, 0, 10], 20, BerryColor.Yellow, 8, BerryFirmness.Hard, ['It is said that when the sour skin is peeled, this spicy Berry can be crushed to make medicine.']); + this.berryData[BerryType.Figy] = new Berry(BerryType.Figy, [40, 160, 230, 350, 700], 14, 0.3, 40, 3, [15, 0, 0, 0, 0], 25, BerryColor.Red, 10, BerryFirmness.Soft, ['This Berry is oddly shaped, appearing as if someone took a bite out of it. It is packed full of spicy substances.']); + this.berryData[BerryType.Wiki] = new Berry(BerryType.Wiki, [40, 190, 210, 360, 720], 15, 0.3, 45, 3, [0, 15, 0, 0, 0], 25, BerryColor.Purple, 11.5, BerryFirmness.Hard, ['It is said that this Berry grew lumps to help Pokémon grip it, allowing propagation farther afield.']); + this.berryData[BerryType.Mago] = new Berry(BerryType.Mago, [40, 180, 240, 370, 740], 16, 0.3, 50, 3, [0, 0, 15, 0, 0], 25, BerryColor.Pink, 12.6, BerryFirmness.Hard, ['This Berry progressively curves as it grows. The curvier the Berry, the sweeter and tastier.']); + this.berryData[BerryType.Aguav] = new Berry(BerryType.Aguav, [40, 170, 220, 350, 700], 17, 0.3, 55, 3, [0, 0, 0, 15, 0], 25, BerryColor.Green, 6.4, BerryFirmness.Super_Hard, ['This Berry turns bitter toward the stem. The dainty flower it grows from doesn\'t absorb much sunlight.']); + this.berryData[BerryType.Iapapa] = new Berry(BerryType.Iapapa, [40, 200, 230, 380, 760], 18, 0.3, 60, 3, [0, 0, 0, 0, 15], 25, BerryColor.Yellow, 22.3, BerryFirmness.Soft, ['This Berry is very big and sour. The juiciness of the pulp accentuates the sourness.']); + this.berryData[BerryType.Lum] = new Berry(BerryType.Lum, [3000, 3200, 3400, 3600, 43200], 1, 0, 540, 3, [10, 10, 10, 10, 0], 25, BerryColor.Green, 3.4, BerryFirmness.Super_Hard, [ + 'This Berry\'s gradual process of storing nutrients beneficial to Pokémon health causes it to mature slowly.', + 'This Berry multiplies the effect of Berry plants around it.', + ], new Aura(AuraType.Boost, [1.01, 1.02, 1.03])); + //#endregion + //#region Third Generation + this.berryData[BerryType.Pomeg] = new Berry(BerryType.Pomeg, [200, 1200, 4000, 5400, 10800], 20, 0.2, 500, 10, [10, 0, 10, 10, 0], 20, BerryColor.Red, 13.5, BerryFirmness.Very_Hard, ['When this sweetly spicy Berry\'s thick skin is peeled, many pieces of the fruit spill out.']); + this.berryData[BerryType.Kelpsy] = new Berry(BerryType.Kelpsy, [240, 2000, 3400, 6000, 12000], 21, 0.2, 525, 10, [0, 10, 0, 10, 10], 20, BerryColor.Blue, 15, BerryFirmness.Hard, ['This Berry can be eaten as is or boiled to obtain an extract that adds a dash of flavor to food.']); + this.berryData[BerryType.Qualot] = new Berry(BerryType.Qualot, [230, 1000, 2500, 4800, 9600], 22, 0.2, 550, 10, [10, 0, 10, 0, 10], 20, BerryColor.Pink, 11, BerryFirmness.Hard, ['Even in places of constant rain and high humidity, this Berry\'s plant grows healthy and strong.']); + this.berryData[BerryType.Hondew] = new Berry(BerryType.Hondew, [1000, 2000, 5000, 10800, 21600], 23, 0.2, 2000, 10, [10, 10, 0, 10, 0], 20, BerryColor.Green, 16.2, BerryFirmness.Hard, ['This somewhat-rare Berry projects an image of luxury, so it is favored as a gift item.']); + this.berryData[BerryType.Grepa] = new Berry(BerryType.Grepa, [300, 3400, 5600, 7200, 14400], 24, 0.2, 600, 10, [0, 10, 10, 0, 10], 20, BerryColor.Yellow, 14.9, BerryFirmness.Soft, ['One bite of this very tender Berry fills the mouth with its sweet and tangy flavor.']); + this.berryData[BerryType.Tamato] = new Berry(BerryType.Tamato, [430, 1400, 4000, 8640, 17280], 25, 0.2, 625, 10, [20, 10, 0, 0, 0], 30, BerryColor.Red, 20, BerryFirmness.Soft, ['This Berry is large and spicy. When eaten during the cold season, it warms the body from inside.']); + this.berryData[BerryType.Cornn] = new Berry(BerryType.Cornn, [1100, 4000, 8000, 9000, 18000], 26, 0.1, 700, 10, [0, 20, 10, 0, 0], 30, BerryColor.Purple, 7.5, BerryFirmness.Hard, ['Its dryness is quite strong. As a result, its true deliciousness can\'t be appreciated by just eating one or two.']); + this.berryData[BerryType.Magost] = new Berry(BerryType.Magost, [2400, 6500, 10000, 14400, 28800], 27, 0.1, 750, 10, [0, 0, 20, 10, 0], 30, BerryColor.Pink, 14, BerryFirmness.Hard, ['The grown-up flavor and dreamy sweetness of this Berry make it a favorite of Pokémon everywhere.']); + this.berryData[BerryType.Rabuta] = new Berry(BerryType.Rabuta, [2310, 5400, 9500, 12240, 24480], 28, 0.1, 800, 10, [0, 0, 0, 20, 10], 30, BerryColor.Green, 22.6, BerryFirmness.Soft, ['Even though it is bitter, it should be eaten peel and all. The hair on the peel cleans the stomach from the inside.']); + this.berryData[BerryType.Nomel] = new Berry(BerryType.Nomel, [1240, 5200, 10500, 15120, 30240], 29, 0.1, 850, 10, [10, 0, 0, 0, 20], 30, BerryColor.Yellow, 28.5, BerryFirmness.Super_Hard, ['This Berry is quite sour overall, with the sourness especially concentrated at the pointed end.']); + this.berryData[BerryType.Spelon] = new Berry(BerryType.Spelon, [2000, 7000, 12000, 15480, 30960], 30, 0.1, 900, 10, [30, 10, 0, 0, 0], 35, BerryColor.Red, 13.3, BerryFirmness.Soft, ['So spicy is the Spelon Berry that, Fire type or not, Pokémon will try to breathe fire after eating a single one.']); + this.berryData[BerryType.Pamtre] = new Berry(BerryType.Pamtre, [3000, 10000, 16400, 18000, 36000], 31, 0.1, 950, 10, [0, 30, 10, 0, 0], 35, BerryColor.Purple, 24.4, BerryFirmness.Very_Soft, [ + 'This Berry drifted from a faraway sea. It is now cultivated in the Sinnoh region.', + 'It has a tendency to expand into nearby plots.', + ]); + this.berryData[BerryType.Watmel] = new Berry(BerryType.Watmel, [2300, 3400, 9800, 16560, 33120], 32, 0.1, 1000, 10, [0, 0, 30, 10, 0], 35, BerryColor.Pink, 25, BerryFirmness.Soft, ['A bounty of nature that is exceedingly sweet. The Berry is huge, with some discovered that exceed 20\u2033, or 50 cm.']); + this.berryData[BerryType.Durin] = new Berry(BerryType.Durin, [10000, 14000, 18000, 21600, 43200], 33, 0.1, 1050, 10, [0, 0, 0, 30, 10], 35, BerryColor.Green, 28, BerryFirmness.Hard, ['This Berry is tremendously bitter. Just one bite is enough to instantly stop hiccups.']); + this.berryData[BerryType.Belue] = new Berry(BerryType.Belue, [5000, 9800, 14500, 19800, 39600], 20, 0.1, 1100, 10, [10, 0, 0, 0, 30], 35, BerryColor.Purple, 30, BerryFirmness.Very_Soft, ['This glossy and colorful Berry has a mouthwateringly delicious appearance. However, it is awfully sour.']); + this.berryData[BerryType.Pinkan] = new Berry(BerryType.Pinkan, [1800, 3600, 7200, 14400, 28800], 3, 0.1, 2500, 15, [0, 0, 35, 0, 0], 30, BerryColor.Pink, 3.5, BerryFirmness.Hard, [ + 'This Berry endemic to Pinkan Island has an incredibly sweet taste.', + 'It has a vibrant pink pigment, and it is found in such abundance on Pinkan Island that all Pokémon found there are colored Pink!', + ], undefined, ['Pinkan Scyther']); + //#endregion + //#region Fourth Generation (Typed) + this.berryData[BerryType.Occa] = new Berry(BerryType.Occa, [8090, 13200, 16000, 21960, 43920], 21, 0.05, 1200, 15, [15, 0, 10, 0, 0], 30, BerryColor.Red, 8.9, BerryFirmness.Super_Hard, [ + 'This Berry is said to have grown plentiful in the tropics of the past. It boasts an intensely hot spiciness.', + 'It has a tendency to overtake nearby plants.', + ], undefined, ['Charmander', 'Cyndaquil', 'Torchic', 'Chimchar', 'Tepig', 'Fennekin', 'Litten', 'Scorbunny', 'Fuecoco']); + this.berryData[BerryType.Passho] = new Berry(BerryType.Passho, [490, 3600, 10800, 21600, 43200], 22, 0.05, 1300, 15, [0, 15, 0, 10, 0], 30, BerryColor.Blue, 3.3, BerryFirmness.Soft, [ + 'This Berry\'s flesh is dotted with countless tiny bubbles of air that keep it afloat in water.', + 'This Berry promotes the fruiting of nearby Berry plants.', + ], new Aura(AuraType.Harvest, [1.1, 1.2, 1.3]), ['Squirtle', 'Totodile', 'Mudkip', 'Piplup', 'Oshawott', 'Froakie', 'Popplio', 'Sobble', 'Quaxly']); + this.berryData[BerryType.Wacan] = new Berry(BerryType.Wacan, [10, 180, 900, 1800, 3600], 2, 0.05, 250, 1, [0, 0, 15, 0, 10], 30, BerryColor.Yellow, 25, BerryFirmness.Very_Soft, [ + 'Energy from lightning strikes is drawn into the plant, making the Berries grow big and rich.', + 'The same energy promotes the growth of nearby Berries.', + ], new Aura(AuraType.Growth, [1.1, 1.2, 1.3]), ['Pikachu', 'Plusle', 'Minun', 'Pachirisu', 'Emolga', 'Dedenne', 'Togedemaru', 'Morpeko (Hangry)', 'Pawmi']); + this.berryData[BerryType.Rindo] = new Berry(BerryType.Rindo, [3600, 7200, 16200, 28800, 57600], 24, 0.05, 1400, 15, [10, 0, 0, 15, 0], 30, BerryColor.Green, 15.5, BerryFirmness.Soft, [ + 'This Berry has a disagreeable "green" flavor and scent typical of vegetables. It is rich in health-promoting fiber.', + 'It has a tendency to expand into nearby plots.', + ], undefined, ['Bulbasaur', 'Chikorita', 'Treecko', 'Turtwig', 'Snivy', 'Chespin', 'Rowlet', 'Grookey', 'Sprigatito']); + this.berryData[BerryType.Yache] = new Berry(BerryType.Yache, [3600, 14400, 28800, 43200, 86400], 25, 0.05, 1500, 15, [0, 10, 0, 0, 15], 30, BerryColor.Blue, 13.5, BerryFirmness.Very_Hard, [ + 'This Berry has a refreshing flavor that strikes a good balance of dryness and sourness. It tastes better chilled.', + 'This Berry slows the decay of nearby Berries.', + ], new Aura(AuraType.Decay, [0.9, 0.8, 0.7]), ['Jynx', 'Swinub', 'Spheal', 'Snover', 'Snom']); + this.berryData[BerryType.Chople] = new Berry(BerryType.Chople, [5400, 10800, 25200, 36000, 72000], 26, 0.05, 1600, 15, [15, 0, 0, 10, 0], 30, BerryColor.Red, 7.7, BerryFirmness.Soft, [ + 'This Berry contains a substance that generates heat. It can even heat up a chilly heart.', + 'Growing these Berries will promote Egg growth.', + ], new Aura(AuraType.Egg, [1.01, 1.02, 1.03]), ['Mankey', 'Makuhita', 'Riolu', 'Scraggy', 'Crabrawler']); + this.berryData[BerryType.Kebia] = new Berry(BerryType.Kebia, [100, 200, 400, 600, 86400], 1, 1, 50, 1, [0, 15, 0, 0, 10], 30, BerryColor.Green, 8.9, BerryFirmness.Hard, [ + 'This Berry is a brilliant green on the outside. Inside, it is packed with a dry-flavored, black-colored flesh.', + 'It has a tendency to overtake nearby plants.', + 'Due to its poisonous nature, it increases the chances of mutations near it.', + ], new Aura(AuraType.Mutation, [1.2, 1.4, 1.6]), ['Grimer', 'Spinarak', 'Gulpin', 'Skorupi', 'Salandit', 'Toxel']); + this.berryData[BerryType.Shuca] = new Berry(BerryType.Shuca, [7200, 16200, 32400, 39600, 79200], 28, 1, 1700, 15, [10, 0, 15, 0, 0], 30, BerryColor.Yellow, 4.2, BerryFirmness.Soft, [ + 'The sweetness-laden pulp has just the hint of a hard-edged and fragrant bite to it.', + 'Growing these Berries will soften the ground around it, increasing the chances of replanting.', + ], new Aura(AuraType.Replant, [1.01, 1.02, 1.03]), ['Sandshrew', 'Larvitar', 'Numel', 'Hippopotas']); + this.berryData[BerryType.Coba] = new Berry(BerryType.Coba, [9000, 12600, 16200, 19800, 39600], 29, 0.05, 1800, 15, [0, 10, 0, 15, 0], 30, BerryColor.Blue, 27.7, BerryFirmness.Very_Hard, ['This Berry is said to be a new kind that is a cross of two Berries brought together by winds from far away.'], undefined, ['Farfetch\'d', 'Murkrow', 'Tropius', 'Chatot']); + this.berryData[BerryType.Payapa] = new Berry(BerryType.Payapa, [4680, 11880, 23400, 34200, 68400], 30, 0.05, 1900, 15, [0, 0, 10, 0, 15], 30, BerryColor.Purple, 25.1, BerryFirmness.Soft, [ + 'This Berry is said to sense human emotions for the way it swells roundly when a person approaches.', + 'The same behavior affects nearby plants, causing additional mutations.', + ], new Aura(AuraType.Mutation, [1.1, 1.2, 1.3]), ['Mr. Mime', 'Natu', 'Ralts', 'Chingling']); + this.berryData[BerryType.Tanga] = new Berry(BerryType.Tanga, [450, 900, 1800, 3600, 7200], 3, 0.5, 500, 15, [20, 0, 0, 0, 10], 35, BerryColor.Green, 4.3, BerryFirmness.Very_Soft, [ + 'The flower grows at the tip of this Berry. It attracts Bug Pokémon by letting its stringy petals stream out.', + 'The attracted Bug Pokémon decrease the amount of harvestable Berries in nearby plants.', + ], new Aura(AuraType.Harvest, [0.9, 0.8, 0.7]), ['Pinsir', 'Shuckle', 'Shuckle (Corked)', 'Nincada', 'Mothim', 'Sizzlipede']); + this.berryData[BerryType.Charti] = new Berry(BerryType.Charti, [8600, 12960, 23040, 37800, 75600], 32, 0.05, 2000, 15, [10, 20, 0, 0, 0], 35, BerryColor.Yellow, 2.8, BerryFirmness.Very_Soft, [ + 'It is often used for pickles because of its very dry flavor. It can also be eaten raw for its provocative taste.', + 'This Berry plant hardens the surrounding soil, decreasing the chances of replanting.', + ], new Aura(AuraType.Replant, [0.99, 0.98, 0.97]), ['Rhyhorn', 'Sudowoodo', 'Aron', 'Bonsly', 'Rockruff']); + this.berryData[BerryType.Kasib] = new Berry(BerryType.Kasib, [30, 60, 120, 300, 86400], 1, 1, 25, 1, [0, 10, 20, 0, 0], 35, BerryColor.Purple, 14.4, BerryFirmness.Hard, [ + 'Considered to have a special power from the olden days, this Berry is sometimes dried and used as a good-luck charm.', + 'This Berry causes other nearby Berries to wither away faster.', + ], new Aura(AuraType.Death, [1.25, 1.5, 2.0]), ['Gastly', 'Misdreavus', 'Shedinja', 'Drifloon']); + this.berryData[BerryType.Haban] = new Berry(BerryType.Haban, [10800, 21600, 43200, 86400, 172800], 34, 0, 4000, 15, [0, 0, 10, 20, 0], 35, BerryColor.Red, 2.3, BerryFirmness.Soft, [ + 'If a large enough volume of this Berry is boiled down, its bitterness fades away. It makes a good jam.', + 'This Berry requires a lot of energy to grow, but isn\'t fussy about what it consumes, it helps other plants by removing toxins from the soil.', + ], new Aura(AuraType.Decay, [0.8, 0.6, 0.5]), ['Dratini', 'Bagon', 'Gible', 'Druddigon', 'Drampa', 'Applin', 'Exposed Applin']); + this.berryData[BerryType.Colbur] = new Berry(BerryType.Colbur, [2880, 10080, 19440, 27000, 54000], 35, 0.05, 2300, 15, [0, 0, 0, 10, 20], 35, BerryColor.Purple, 3.8, BerryFirmness.Super_Hard, [ + 'Tiny hooks grow on the surface of this Berry. It latches on to Pokémon so it can be carried to far-off places.', + 'It has a tendency to overtake nearby plants.', + 'It also prevents Kasib from mutating.', + ], undefined, ['Houndour', 'Absol', 'Stunky', 'Zorua', 'Impidimp']); + this.berryData[BerryType.Babiri] = new Berry(BerryType.Babiri, [7200, 16200, 32400, 64800, 129600], 36, 0.05, 2400, 15, [25, 10, 0, 0, 0], 35, BerryColor.Green, 26.5, BerryFirmness.Super_Hard, [ + 'This Berry is very tough with a strong flavor. It was used to make medicine by people in the past.', + 'This Berry plant is very hardy and resistant, making it resistant to mutations, and also decreasing the chance of mutations around it.', + ], new Aura(AuraType.Mutation, [0.5, 0.25, 0.0]), ['Magnemite', 'Skarmory', 'Beldum', 'Bronzor', 'Cufant']); + this.berryData[BerryType.Chilan] = new Berry(BerryType.Chilan, [240, 1430, 2970, 7200, 14400], 10, 0.05, 500, 15, [0, 25, 10, 0, 0], 35, BerryColor.Yellow, 3.3, BerryFirmness.Very_Soft, ['This Berry can be cored out and dried to make a whistle. Blowing through its hole makes an indescribable sound.'], undefined, ['Snorlax', 'Girafarig', 'Swablu', 'Munchlax', 'Audino', 'Skwovet']); + this.berryData[BerryType.Roseli] = new Berry(BerryType.Roseli, [2410, 5040, 12600, 25200, 50400], 38, 0.05, 2500, 15, [0, 0, 25, 10, 0], 35, BerryColor.Pink, 3.3, BerryFirmness.Hard, [ + 'This Berry is sweet with a hint of bitterness and has a lingering sweet scent. It is often dried and used to make tea.', + 'The scent of this Berry plant attracts wild Pokémon.', + ], new Aura(AuraType.Attract, [1.02, 1.04, 1.07]), ['Clefairy', 'Togepi', 'Ralts']); + this.berryData[BerryType.Snover] = new Berry(BerryType.Snover, [3600, 7200, 10800, 14400, 28800], 5, 0.01, 1250, 15, [0, 0, 20, 0, 10], 35, BerryColor.Green, 5, BerryFirmness.Soft, ['This berry grows around the waist of certain Snover.'], undefined, ['Snover (Berry)']); + //#endregion + //#region Fifth Generation + this.berryData[BerryType.Micle] = new Berry(BerryType.Micle, [3960, 7920, 15840, 31680, 63360], 1, 0.05, 2600, 20, [0, 40, 10, 0, 0], 60, BerryColor.Green, 4.1, BerryFirmness.Soft, [ + 'This Berry has a very dry flavor. It has the effect of making other food eaten at the same time taste sweet.', + 'The scent of this Berry plant repels wild Pokémon.', + ], new Aura(AuraType.Attract, [0.99, 0.97, 0.95]), ['Hoopa']); + this.berryData[BerryType.Custap] = new Berry(BerryType.Custap, [3240, 8280, 13320, 27360, 54720], 1, 0.05, 2700, 20, [0, 0, 40, 10, 0], 60, BerryColor.Red, 26.7, BerryFirmness.Super_Hard, [ + 'The flesh underneath the Custap Berry\'s tough skin is sweet and creamy soft.', + 'This inspires Pokémon to train harder.', + ], new Aura(AuraType.Xp, [1.005, 1.01, 1.015]), ['Burmy (No Coat)']); + this.berryData[BerryType.Jaboca] = new Berry(BerryType.Jaboca, [4320, 8640, 16560, 33480, 66960], 1, 0.05, 2800, 20, [0, 0, 0, 40, 10], 60, BerryColor.Yellow, 3.3, BerryFirmness.Soft, [ + 'The cluster of drupelets that make up this Berry pop rhythmically if the Berry is handled roughly.', + 'The sound of these Berries attracts rare wild Pokémon.', + ], new Aura(AuraType.Roaming, [1.005, 1.01, 1.015])); + this.berryData[BerryType.Rowap] = new Berry(BerryType.Rowap, [5760, 9000, 14040, 21240, 42480], 1, 0.05, 2900, 20, [10, 0, 0, 0, 40], 60, BerryColor.Blue, 5.2, BerryFirmness.Very_Soft, [ + 'In days of old, people worked the top-shaped pieces of this Berry free and used them as toys.', + 'These berries make catching efforts worth more.', + ], new Aura(AuraType.Ev, [1.005, 1.01, 1.015])); + this.berryData[BerryType.Kee] = new Berry(BerryType.Kee, [4680, 9360, 18360, 36360, 72720], 1, 0.05, 3000, 20, [30, 30, 10, 10, 10], 60, BerryColor.Yellow, 5.7, BerryFirmness.Very_Hard, ['This Berry remains poisonous until fully ripened. Once ripe it has a spicy and sweet complex flavor.']); + this.berryData[BerryType.Maranga] = new Berry(BerryType.Maranga, [5040, 10080, 20160, 40320, 80640], 1, 0.05, 8000, 20, [10, 10, 30, 30, 10], 60, BerryColor.Blue, 19.4, BerryFirmness.Very_Hard, ['This Berry resembles the Durin Berry, though its spikes are less pronounced. It is quite delicious when roasted.']); + this.berryData[BerryType.Liechi] = new Berry(BerryType.Liechi, [21600, 43200, 86400, 172800, 345600], 0.5, 0, 10000, 20, [30, 10, 30, 0, 0], 40, BerryColor.Red, 11.1, BerryFirmness.Very_Hard, ['This Berry is surrounded by mystery. It is rumored to be imbued with the power of the sea.'], undefined, ['Manaphy']); + this.berryData[BerryType.Ganlon] = new Berry(BerryType.Ganlon, [21600, 43200, 86400, 172800, 345600], 0.5, 0, 10000, 20, [0, 30, 10, 30, 0], 40, BerryColor.Purple, 3.3, BerryFirmness.Very_Hard, ['This Berry is surrounded by mystery. It is rumored to be imbued with the power of the land.']); + this.berryData[BerryType.Salac] = new Berry(BerryType.Salac, [21600, 43200, 86400, 172800, 345600], 0.5, 0, 10000, 20, [0, 0, 30, 10, 30], 40, BerryColor.Green, 9.5, BerryFirmness.Very_Hard, ['This Berry is surrounded by mystery. It is rumored to be imbued with the power of the sky.']); + this.berryData[BerryType.Petaya] = new Berry(BerryType.Petaya, [10800, 21600, 43200, 86400, 432000], 0.5, 0, 15000, 20, [30, 0, 0, 30, 10], 40, BerryColor.Pink, 23.7, BerryFirmness.Very_Hard, [ + 'This Berry is surrounded by mystery. It is rumored to be imbued with the power of all living things.', + 'This power revitalizes and prevents other berries from withering.', + ], undefined, ['Mew']); + this.berryData[BerryType.Apicot] = new Berry(BerryType.Apicot, [10800, 21600, 43200, 86400, 432000], 0.5, 0, 15000, 20, [10, 30, 0, 0, 30], 40, BerryColor.Blue, 7.5, BerryFirmness.Hard, ['This is a very, very mystifying Berry. There is no telling how it can be used, or what may happen if it is used.']); + this.berryData[BerryType.Lansat] = new Berry(BerryType.Lansat, [10800, 21600, 43200, 86400, 432000], 0.5, 0, 15000, 20, [30, 10, 30, 10, 30], 50, BerryColor.Red, 9.7, BerryFirmness.Soft, ['This is said to be a legendary Berry. Holding it supposedly brings great joy.']); + this.berryData[BerryType.Starf] = new Berry(BerryType.Starf, [10800, 21600, 43200, 86400, 432000], 0.5, 0, 15000, 20, [30, 10, 30, 10, 30], 50, BerryColor.Green, 15.3, BerryFirmness.Super_Hard, ['This Berry is considered a mirage. It was said to be so strong that it had to be abandoned at the world\'s edge.'], new Aura(AuraType.Shiny, [1.005, 1.01, 1.015]), ['Jirachi']); + this.berryData[BerryType.Enigma] = new Berry(BerryType.Enigma, [10800, 21600, 43200, 86400, 604800], 0.5, 0, 15000, 20, [40, 10, 0, 0, 0], 60, BerryColor.Purple, 15.5, BerryFirmness.Hard, ['A completely enigmatic Berry. It apparently has the power of the stars that fill the night sky.'], undefined, ['Detective Pikachu']); + this.berryData[BerryType.Hopo] = new Berry(BerryType.Hopo, [10800, 21600, 43200, 86400, 604800], 1, 0, 15000, 25, [15, 40, 35, 30, 25], 50, BerryColor.Gold, 5.8, BerryFirmness.Very_Soft, ['A truly mythical Berry native to harsh northern lands. It was first created by a Pokémon believed to have shaped the world.']); + //#endregion + //#endregion + //#region Mutations + /** + * NOTE: ONLY ADD NEW MUTATIONS AT THE END OF THE LIST. MUTATION INDEX IS USED TO STORE HINT SEEN DATA + */ + //#region Second Generation + // Persim + this.mutations.push(new GrowNearBerryMutation(.02, BerryType.Persim, [ + BerryType.Pecha, + BerryType.Oran, + ])); + // Razz + this.mutations.push(new GrowNearBerryMutation(.019, BerryType.Razz, [ + BerryType.Cheri, + BerryType.Leppa, + ])); + // Bluk + this.mutations.push(new GrowNearBerryMutation(.018, BerryType.Bluk, [ + BerryType.Chesto, + BerryType.Leppa, + ])); + // Nanab + this.mutations.push(new GrowNearBerryMutation(.017, BerryType.Nanab, [ + BerryType.Pecha, + BerryType.Aspear, + ])); + // Wepear + this.mutations.push(new GrowNearBerryMutation(.016, BerryType.Wepear, [ + BerryType.Rawst, + BerryType.Oran, + ])); + // Pinap + this.mutations.push(new GrowNearBerryMutation(.015, BerryType.Pinap, [ + BerryType.Sitrus, + BerryType.Aspear, + ])); + // Figy + this.mutations.push(new GrowNearFlavorMutation(.009, BerryType.Figy, [[25, 80], [0, 5], [0, 5], [0, 5], [0, 5]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings get too spicy!', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Cheri](); + }, + })); + // Wiki + this.mutations.push(new GrowNearFlavorMutation(.008, BerryType.Wiki, [[0, 5], [25, 80], [0, 5], [0, 5], [0, 5]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings get too dry!', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Chesto](); + }, + })); + // Mago + this.mutations.push(new GrowNearFlavorMutation(.007, BerryType.Mago, [[0, 5], [0, 5], [25, 80], [0, 5], [0, 5]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings get too sweet!', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Pecha](); + }, + })); + // Aguav + this.mutations.push(new GrowNearFlavorMutation(.006, BerryType.Aguav, [[0, 5], [0, 5], [0, 5], [25, 80], [0, 5]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings get too bitter!', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Rawst](); + }, + })); + // Iapapa + this.mutations.push(new GrowNearFlavorMutation(.005, BerryType.Iapapa, [[0, 5], [0, 5], [0, 5], [0, 5], [25, 80]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings get too sour!', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Aspear](); + }, + })); + // Lum + this.mutations.push(new GrowNearBerryMutation(.001, BerryType.Lum, [ + BerryType.Cheri, + BerryType.Chesto, + BerryType.Pecha, + BerryType.Rawst, + BerryType.Aspear, + BerryType.Leppa, + BerryType.Oran, + BerryType.Sitrus, + ], { + hint: 'I\'ve heard that there\'s a legendary Berry that only appears when fully surrounded by unique ripe Berry plants!', + })); + //#endregion + //#region Third Generation + // Pomeg + this.mutations.push(new GrowNearBerryMutation(.0005, BerryType.Pomeg, [ + BerryType.Iapapa, + BerryType.Mago, + ])); + // Kelpsy + this.mutations.push(new GrowNearBerryMutation(.0005, BerryType.Kelpsy, [ + BerryType.Chesto, + BerryType.Persim, + ])); + // Qualot + this.mutations.push(new GrowNearFlavorMutation(.0005, BerryType.Qualot, [[10, 15], [0, 0], [10, 15], [0, 0], [10, 15]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings match its flavor profile! If I recall, it tasted a little spicy, a little sweet, and a little sour at the same time.', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Cheri]() && + App.game.farming.unlockedBerries[BerryType.Pecha]() && + App.game.farming.unlockedBerries[BerryType.Aspear](); + }, + })); + // Hondew + this.mutations.push(new GrowNearFlavorMutation(.0004, BerryType.Hondew, [[15, 15], [15, 15], [0, 0], [15, 15], [0, 0]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings match its flavor profile! If I recall, it tasted fairly spicy, dry, and bitter at the same time.', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Figy]() && + App.game.farming.unlockedBerries[BerryType.Wiki]() && + App.game.farming.unlockedBerries[BerryType.Aguav](); + }, + })); + // Grepa + this.mutations.push(new GrowNearBerryMutation(.0005, BerryType.Grepa, [ + BerryType.Aguav, + BerryType.Figy, + ])); + // Tamato + this.mutations.push(new EvolveNearBerryMutation(.0005, BerryType.Tamato, BerryType.Razz, [BerryType.Pomeg])); + // Cornn + this.mutations.push(new GrowNearBerryMutation(.0003, BerryType.Cornn, [ + BerryType.Leppa, + BerryType.Bluk, + BerryType.Wiki, + ])); + // Magost + this.mutations.push(new GrowNearBerryMutation(.0003, BerryType.Magost, [ + BerryType.Pecha, + BerryType.Nanab, + BerryType.Mago, + ])); + // Rabuta + this.mutations.push(new EvolveNearBerryMutation(.0003, BerryType.Rabuta, BerryType.Aspear, [BerryType.Aguav])); + // Nomel + this.mutations.push(new GrowNearBerryMutation(.0003, BerryType.Nomel, [BerryType.Pinap])); + // Spelon + this.mutations.push(new EvolveNearFlavorMutation(.0002, BerryType.Spelon, BerryType.Tamato, [[130, 160], [0, 80], [0, 80], [0, 80], [0, 80]], { + hint: 'I\'ve heard that a Tamato berry will change if its surroundings get extremely spicy!', + })); + // Pamtre + this.mutations.push(new EvolveNearFlavorMutation(.0002, BerryType.Pamtre, BerryType.Cornn, [[0, 80], [130, 160], [0, 80], [0, 80], [0, 80]], { + hint: 'I\'ve heard that a Cornn berry will change if its surroundings get extremely dry!', + })); + // Pamtre Overgrow + this.mutations.push(new GrowNearBerryMutation(.0004, BerryType.Pamtre, [BerryType.Pamtre], { showHint: false })); + // Watmel + this.mutations.push(new EvolveNearFlavorMutation(.0002, BerryType.Watmel, BerryType.Magost, [[0, 80], [0, 80], [130, 160], [0, 80], [0, 80]], { + hint: 'I\'ve heard that a Magost berry will change if its surroundings get extremely sweet!', + })); + // Durin + this.mutations.push(new EvolveNearFlavorMutation(.0002, BerryType.Durin, BerryType.Rabuta, [[0, 80], [0, 80], [0, 80], [130, 160], [0, 80]], { + hint: 'I\'ve heard that a Rabuta berry will change if its surroundings get extremely bitter!', + })); + // Belue + this.mutations.push(new EvolveNearFlavorMutation(.0002, BerryType.Belue, BerryType.Nomel, [[0, 80], [0, 80], [0, 80], [0, 80], [130, 160]], { + hint: 'I\'ve heard that a Nomel berry will change if its surroundings get extremely sour!', + })); + // Pinkan + this.mutations.push(new GrowNearBerryMutation(.0005, BerryType.Pinkan, [ + BerryType.Pecha, + BerryType.Persim, + BerryType.Nanab, + BerryType.Mago, + BerryType.Qualot, + BerryType.Magost, + BerryType.Watmel, + ], { + hint: 'I\'ve heard that there\'s a special Pink Berry that only appears when surrounded by a bunch of different types of Pink Berries!', + unlockReq: function () { + return App.game.quests.getQuestLine('Team Rocket\'s Pinkan Theme Park').state() > QuestLineState.inactive; + }, + })); + //#endregion + //#region Fourth Generation + // Occa + this.mutations.push(new GrowNearBerryMutation(.0001, BerryType.Occa, [ + BerryType.Razz, + BerryType.Figy, + BerryType.Tamato, + BerryType.Spelon, + ])); + // Occa Parasite + this.mutations.push(new ParasiteMutation(.0004, BerryType.Occa)); + // Passho + this.mutations.push(new GrowNearBerryMutation(.0001, BerryType.Passho, [ + BerryType.Oran, + BerryType.Chesto, + BerryType.Kelpsy, + BerryType.Coba, + ])); + // Wacan + this.mutations.push(new GrowNearBerryMutation(.0001, BerryType.Wacan, [ + BerryType.Pinap, + BerryType.Iapapa, + BerryType.Qualot, + BerryType.Grepa, + ])); + // Rindo + this.mutations.push(new GrowNearFlavorMutation(.0001, BerryType.Rindo, [[10, 15], [0, 0], [0, 0], [15, 20], [0, 0]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings match its flavor profile! If I recall, it tasted a little spicy and fairly bitter at the same time.', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Aguav]() && + App.game.farming.unlockedBerries[BerryType.Cheri](); + }, + })); + // Rindo Overgrow + this.mutations.push(new GrowNearBerryMutation(.0004, BerryType.Rindo, [BerryType.Rindo], { showHint: false })); + // Yache + this.mutations.push(new EvolveNearBerryStrictMutation(.0001, BerryType.Yache, BerryType.Passho, {}, PlotStage.Seed, { + hint: 'I\'ve heard that growing a Passho Berry alone will cause it to change!', + })); + // Chople + this.mutations.push(new OakMutation(.0001, BerryType.Chople, BerryType.Spelon, OakItemType.Magma_Stone)); + // Kebia + this.mutations.push(new OakMutation(.0001, BerryType.Kebia, BerryType.Pamtre, OakItemType.Rocky_Helmet)); + // Kebia Parasite + this.mutations.push(new ParasiteMutation(.0004, BerryType.Kebia)); + // Shuca + this.mutations.push(new OakMutation(.0001, BerryType.Shuca, BerryType.Watmel, OakItemType.Sprinklotad)); + // Coba + this.mutations.push(new GrowNearFlavorMutation(.0001, BerryType.Coba, [[0, 0], [10, 15], [0, 0], [15, 20], [0, 0]], { + hint: 'I\'ve heard that a special Berry can appear if its surroundings match its flavor profile! If I recall, it tasted a little dry and fairly bitter at the same time.', + unlockReq: function () { + return App.game.farming.unlockedBerries[BerryType.Chesto]() && + App.game.farming.unlockedBerries[BerryType.Aguav](); + }, + })); + // Payapa + this.mutations.push(new GrowNearBerryMutation(.0001, BerryType.Payapa, [ + BerryType.Wiki, + BerryType.Bluk, + BerryType.Cornn, + BerryType.Pamtre, + ])); + // Tanga + let berryReqs = {}; + berryReqs[BerryType.Rindo] = 8; + this.mutations.push(new GrowNearBerryStrictMutation(.0001, BerryType.Tanga, berryReqs, { + hint: 'I\'ve heard that a special Berry can appear after being surrounded by Rindo Berries!', + })); + // Charti + this.mutations.push(new OakMutation(.0001, BerryType.Charti, BerryType.Cornn, OakItemType.Cell_Battery)); + // Kasib + // No mutation, will check withers + // Haban + this.mutations.push(new GrowNearBerryMutation(.0001, BerryType.Haban, [ + BerryType.Occa, + BerryType.Rindo, + BerryType.Passho, + BerryType.Wacan, + ])); + // Colbur + this.mutations.push(new GrowNearBerryMutation(.0001, BerryType.Colbur, [ + BerryType.Rabuta, + BerryType.Kasib, + BerryType.Payapa, + ])); + // Colbur Parasite + this.mutations.push(new ParasiteMutation(.0004, BerryType.Colbur)); + // Babiri + berryReqs = {}; + berryReqs[BerryType.Shuca] = 4; + berryReqs[BerryType.Charti] = 4; + this.mutations.push(new GrowNearBerryStrictMutation(.0001, BerryType.Babiri, berryReqs, { + hint: 'I\'ve heard that a special Berry can appear after being surrounded by Shuca and Charti Berries!', + })); + // Chilan + berryReqs = {}; + berryReqs[BerryType.Chople] = 3; + this.mutations.push(new EvolveNearBerryMinMutation(.0001, BerryType.Chilan, BerryType.Chople, berryReqs, { + hint: 'I\'ve heard that Chople Berries will turn into a different Berry if surrounded by more than two of their own kind.', + })); + // Roseli + this.mutations.push(new GrowNearBerryMutation(.0001, BerryType.Roseli, [ + BerryType.Mago, + BerryType.Nanab, + BerryType.Magost, + BerryType.Watmel, + ])); + // Snover + this.mutations.push(new FieldMutation(.00002, BerryType.Snover, [{ berry: BerryType.Babiri, amountRequired: 20 }], { + unlockReq: () => { var _a, _b; return ((_b = (_a = App.game) === null || _a === void 0 ? void 0 : _a.statistics) === null || _b === void 0 ? void 0 : _b.pokemonCaptured[PokemonHelper.getPokemonByName('Snover').id]()) > 0; }, + hint: 'I\'ve heard of a Berry that can appear in a field of Babiri when Snover are around.', + })); + //#endregion + //#region Fifth Generation + // Micle + this.mutations.push(new FieldFlavorMutation(.0003, BerryType.Micle, [0, 600, 0, 0, 0], { + hint: 'I\'ve heard of a Berry that only appears in the driest of fields.', + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Pamtre](), + })); + // Custap + this.mutations.push(new FieldFlavorMutation(.0003, BerryType.Custap, [0, 0, 600, 0, 0], { + hint: 'I\'ve heard of a Berry that only appears in the sweetest of fields.', + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Watmel](), + })); + // Jaboca + this.mutations.push(new FieldFlavorMutation(.0003, BerryType.Jaboca, [0, 0, 0, 600, 0], { + hint: 'I\'ve heard of a Berry that only appears in the most bitter of fields.', + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Durin](), + })); + // Rowap + this.mutations.push(new FieldFlavorMutation(.0003, BerryType.Rowap, [0, 0, 0, 0, 600], { + hint: 'I\'ve heard of a Berry that only appears in the most sour of fields.', + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Belue](), + })); + // Kee + this.mutations.push(new GrowNearBerryMutation(.0003, BerryType.Kee, [ + BerryType.Liechi, + BerryType.Ganlon, + ])); + // Maranga + this.mutations.push(new GrowNearBerryMutation(.0003, BerryType.Maranga, [ + BerryType.Salac, + BerryType.Petaya, + ])); + // Liechi + this.mutations.push(new FieldMutation(.00001, BerryType.Liechi, [{ berry: BerryType.Passho, amountRequired: 23 }], { + unlockReq: () => { var _a, _b; return ((_b = (_a = App.game) === null || _a === void 0 ? void 0 : _a.statistics) === null || _b === void 0 ? void 0 : _b.pokemonCaptured[PokemonHelper.getPokemonByName('Kyogre').id]()) > 0; }, + })); + // Ganlon + this.mutations.push(new FieldMutation(.00001, BerryType.Ganlon, [{ berry: BerryType.Shuca, amountRequired: 23 }], { + unlockReq: () => { var _a, _b; return ((_b = (_a = App.game) === null || _a === void 0 ? void 0 : _a.statistics) === null || _b === void 0 ? void 0 : _b.pokemonCaptured[PokemonHelper.getPokemonByName('Groudon').id]()) > 0; }, + })); + // Salac + this.mutations.push(new FieldMutation(.00001, BerryType.Salac, [{ berry: BerryType.Coba, amountRequired: 23 }], { + unlockReq: () => { var _a, _b; return ((_b = (_a = App.game) === null || _a === void 0 ? void 0 : _a.statistics) === null || _b === void 0 ? void 0 : _b.pokemonCaptured[PokemonHelper.getPokemonByName('Rayquaza').id]()) > 0; }, + })); + // Petaya + this.mutations.push(new PetayaMutation(.00001)); + // Apicot + this.mutations.push(new FieldMutation(.00001, BerryType.Apicot, [{ berry: BerryType.Chilan, amountRequired: 23 }], { + unlockReq: () => { var _a, _b; return ((_b = (_a = App.game) === null || _a === void 0 ? void 0 : _a.statistics) === null || _b === void 0 ? void 0 : _b.pokemonCaptured[PokemonHelper.getPokemonByName('Palkia').id]()) > 0; }, + })); + // Lansat + this.mutations.push(new FieldMutation(.00001, BerryType.Lansat, [{ berry: BerryType.Roseli, amountRequired: 23 }], { + unlockReq: () => { var _a, _b; return ((_b = (_a = App.game) === null || _a === void 0 ? void 0 : _a.statistics) === null || _b === void 0 ? void 0 : _b.pokemonCaptured[PokemonHelper.getPokemonByName('Dialga').id]()) > 0; }, + })); + // Starf + // No mutation, obtained by wandering shiny pokemon + // Enigma + this.mutations.push(new EnigmaMutation(.0001)); + // Enigma Mutations + this.mutations.push(new EvolveNearBerryMutation(.0004, BerryType.Liechi, BerryType.Passho, [BerryType.Enigma], { + showHint: false, + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Liechi](), + })); + this.mutations.push(new EvolveNearBerryMutation(.0004, BerryType.Ganlon, BerryType.Shuca, [BerryType.Enigma], { + showHint: false, + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Ganlon](), + })); + this.mutations.push(new EvolveNearBerryMutation(.0004, BerryType.Salac, BerryType.Coba, [BerryType.Enigma], { + showHint: false, + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Salac](), + })); + this.mutations.push(new EvolveNearBerryMutation(.0004, BerryType.Petaya, BerryType.Payapa, [BerryType.Enigma], { + showHint: false, + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Petaya](), + })); + this.mutations.push(new EvolveNearBerryMutation(.0004, BerryType.Apicot, BerryType.Chilan, [BerryType.Enigma], { + showHint: false, + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Apicot](), + })); + this.mutations.push(new EvolveNearBerryMutation(.0004, BerryType.Lansat, BerryType.Roseli, [BerryType.Enigma], { + showHint: false, + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Lansat](), + })); + this.mutations.push(new EvolveNearBerryMutation(.0004, BerryType.Starf, BerryType.Haban, [BerryType.Enigma], { + showHint: false, + unlockReq: () => App.game.farming.unlockedBerries[BerryType.Starf](), + })); + // Hopo + this.mutations.push(new FieldMutation(.00001, BerryType.Hopo, [ + { berry: BerryType.Lansat, amountRequired: 2 }, + { berry: BerryType.Apicot, amountRequired: 2 }, + { berry: BerryType.Micle, amountRequired: 4 }, + { berry: BerryType.Custap, amountRequired: 4 }, + { berry: BerryType.Jaboca, amountRequired: 4 }, + { berry: BerryType.Rowap, amountRequired: 4 }, + ], { + unlockReq: function () { + return App.game.quests.getQuestLine('Arceus: The Deified Pokémon').state() > QuestLineState.inactive; + }, + })); + // Empty Mutations for hints + // Kasib + this.mutations.push(new BlankMutation(0, BerryType.Kasib, { + hint: 'I\'ve heard of a Berry that only appears after a Berry plant has withered, but is repelled by Colbur plants.', + unlockReq: () => App.game.farming.highestUnlockedBerry() >= BerryType.Occa, + })); + // Starf + this.mutations.push(new BlankMutation(0, BerryType.Starf, { + hint: 'I\'ve heard of a Berry that only appears after a Shiny Pokémon wanders and is caught near open soil.', + unlockReq: () => App.game.farming.highestUnlockedBerry() >= BerryType.Occa, + })); + //#endregion + } + getGrowthMultiplier() { + let multiplier = 1; + multiplier *= App.game.oakItems.calculateBonus(OakItemType.Sprayduck); + return multiplier; + } + getReplantMultiplier() { + let multiplier = 1; + multiplier *= App.game.oakItems.calculateBonus(OakItemType.Sprinklotad); + return multiplier; + } + getMutationMultiplier() { + let multiplier = 1; + multiplier *= App.game.oakItems.calculateBonus(OakItemType.Squirtbottle); + return multiplier; + } + update(delta) { + const timeToReduce = delta; + const notifications = new Set(); + let change = false; + // Updating Berries + this.plotList.forEach(plot => { + if (plot.update(timeToReduce)) { + change = true; + } + if (plot.notifications) { + plot.notifications.forEach(n => notifications.add(n)); + plot.notifications = []; + } + }); + // Running Mutations + this.mutationCounter += GameConstants.TICK_TIME; + if (this.mutationCounter >= GameConstants.MUTATION_TICK) { + this.mutations.forEach(mutation => { + if (mutation.mutate()) { + GameHelper.incrementObservable(App.game.statistics.totalBerriesMutated, 1); + notifications.add(FarmNotificationType.Mutated); + change = true; + } + }); + this.mutationCounter = 0; + } + // Wandering Pokemon + this.wanderCounter += GameConstants.TICK_TIME; + let wanderPokemon; + const wanderList = []; + if (this.wanderCounter >= GameConstants.WANDER_TICK) { + for (let i = 0; i < App.game.farming.plotList.length; i++) { + const plot = App.game.farming.plotList[i]; + // generate or get rid of a wanderer + wanderPokemon = plot.generateWanderPokemon(); + if (wanderPokemon) { + wanderList.push(wanderPokemon); + notifications.add(FarmNotificationType.Wander); + } + } + this.wanderCounter = 0; + } + if (notifications.size) { + notifications.forEach((n) => this.handleNotification(n, wanderList)); + } + this.farmHands.tick(); + } + handleNotification(farmNotiType, wanderList) { + let message = ''; + let image = null; + let type = NotificationConstants.NotificationOption.success; + let sound = NotificationConstants.NotificationSound.Farming.ready_to_harvest; + let setting = NotificationConstants.NotificationSetting.Farming.ready_to_harvest; + switch (farmNotiType) { + case FarmNotificationType.Ripe: + message = 'A Berry is ready to harvest!'; + break; + case FarmNotificationType.AboutToWither: + message = 'A Berry plant is about to wither!'; + type = NotificationConstants.NotificationOption.warning; + sound = NotificationConstants.NotificationSound.Farming.berry_wither; + setting = NotificationConstants.NotificationSetting.Farming.about_to_wither; + break; + case FarmNotificationType.Withered: + message = 'A Berry plant has withered!'; + type = NotificationConstants.NotificationOption.warning; + sound = NotificationConstants.NotificationSound.Farming.berry_wither; + setting = NotificationConstants.NotificationSetting.Farming.berry_withered; + break; + case FarmNotificationType.Mutated: + message = 'A Berry plant has mutated!'; + sound = NotificationConstants.NotificationSound.Farming.berry_mutated; + setting = NotificationConstants.NotificationSetting.Farming.berry_mutated; + break; + case FarmNotificationType.Replanted: + message = 'A Berry has been replanted!'; + sound = NotificationConstants.NotificationSound.Farming.berry_replanted; + setting = NotificationConstants.NotificationSetting.Farming.berry_replanted; + break; + case FarmNotificationType.Dropped: + message = 'A Berry has been dropped!'; + sound = NotificationConstants.NotificationSound.Farming.berry_dropped; + setting = NotificationConstants.NotificationSetting.Farming.berry_dropped; + break; + case FarmNotificationType.MulchRanOut: + message = 'A plot has run out of mulch!'; + type = NotificationConstants.NotificationOption.warning; + sound = NotificationConstants.NotificationSound.Farming.mulch_ran_out; + setting = NotificationConstants.NotificationSetting.Farming.mulch_ran_out; + break; + case FarmNotificationType.Wander: + // Only notify for one wanderer, randomly picked, shiny priorized; there will rarely be more than one + const shinyList = wanderList.filter(w => w.shiny); + const displayWanderer = shinyList.length ? Rand.fromArray(shinyList) : Rand.fromArray(wanderList); + message = `A wild ${displayWanderer.name} has wandered onto the farm!`; + image = PokemonHelper.getImage(PokemonHelper.getPokemonByName(displayWanderer.name).id, displayWanderer.shiny); + type = displayWanderer.shiny ? NotificationConstants.NotificationOption.warning : NotificationConstants.NotificationOption.success; + sound = NotificationConstants.NotificationSound.Farming.wandering_pokemon; + setting = NotificationConstants.NotificationSetting.Farming.wandering_pokemon; + break; + } + Notifier.notify({ + message, + image, + type, + sound, + setting, + }); + } + multiplyPlotAuras(auraType) { + return this.plotList + .filter(p => p.emittingAura.type() === auraType) + .reduce((acc, p) => { var _a; return acc * ((_a = p.emittingAura.value()) !== null && _a !== void 0 ? _a : 1); }, 1); + } + addPlotAuras(auraType) { + return this.plotList + .filter(p => p.emittingAura.type() === auraType) + .reduce((acc, p) => { var _a; return acc + ((_a = p.emittingAura.value()) !== null && _a !== void 0 ? _a : 0); }, 0); + } + unlockPlot(index) { + if (this.allPlotsUnlocked()) { + return; + } + if (this.canBuyPlot(index)) { + const berryData = this.plotBerryCost(index); + GameHelper.incrementObservable(this.berryList[berryData.type], -berryData.amount); + const cost = this.plotFPCost(index); + App.game.wallet.loseAmount(new Amount(cost, GameConstants.Currency.farmPoint)); + this.plotList[index].isUnlocked = true; + this.unlockedPlotCount(this.plotList.filter(p => p.isUnlocked).length); + } + } + allPlotsUnlocked() { + return this.plotList.every(plot => plot.isUnlocked); + } + canBuyPlot(index) { + const berryData = this.plotBerryCost(index); + if (App.game.farming.berryList[berryData.type]() < berryData.amount) { + return false; + } + const cost = this.plotFPCost(index); + if (!App.game.wallet.hasAmount(new Amount(cost, GameConstants.Currency.farmPoint))) { + return false; + } + return true; + } + plotFPCost(index) { + const berryType = Farming.unlockMatrix[index]; + return 10 * Math.floor(Math.pow(berryType + 1, 2)); + } + plotBerryCost(index) { + const berryType = Farming.unlockMatrix[index]; + return { type: berryType, amount: 10 * (berryType + 1) }; + } + //#endregion + togglePlotSafeLock(index) { + this.plotList[index].isSafeLocked = !this.plotList[index].isSafeLocked; + } + plant(index, berry) { + const plot = this.plotList[index]; + if (!plot.isEmpty() || !plot.isUnlocked || !this.hasBerry(berry) || plot.isSafeLocked) { + return; + } + GameHelper.incrementObservable(this.berryList[berry], -1); + plot.plant(berry); + } + plantAll(berry) { + this.plotList.forEach((plot, index) => { + this.plant(index, berry); + }); + } + /** + * Harvest a plot at the given index + * @param index The index of the plot to harvest + */ + harvest(index) { + const plot = this.plotList[index]; + if (plot.berry === BerryType.None || plot.stage() != PlotStage.Berry || plot.isSafeLocked) { + return; + } + App.game.wallet.gainFarmPoints(this.berryData[plot.berry].farmValue); + const amount = plot.harvestAmount(); + this.gainBerry(plot.berry, amount); + App.game.oakItems.use(OakItemType.Sprayduck, this.berryData[plot.berry].exp); + GameHelper.incrementObservable(App.game.statistics.totalManualHarvests, 1); + player.lowerItemMultipliers(MultiplierDecreaser.Berry, this.berryData[plot.berry].exp); + plot.die(true); + } + /** + * Try to harvest all plots + */ + harvestAll() { + this.plotList.forEach((plot, index) => { + this.harvest(index); + }); + } + /** + * Handles using the Berry Shovel to remove a Berry plant + * @param index The plot index + */ + shovel(index) { + const plot = this.plotList[index]; + if (!plot.isUnlocked) { + return; + } + if (plot.isSafeLocked) { + return; + } + if (plot.isEmpty()) { + return; + } + if (plot.stage() == PlotStage.Berry) { + this.harvest(index); + return; + } + if (this.shovelAmt() <= 0) { + return; + } + plot.die(true); + GameHelper.incrementObservable(this.shovelAmt, -1); + GameHelper.incrementObservable(App.game.statistics.totalShovelsUsed, 1); + } + /** + * Handles using the Mulch Shovel to remove mulch from a plot + * @param index The plot index + */ + shovelMulch(index) { + const plot = this.plotList[index]; + if (!plot.isUnlocked || plot.isSafeLocked) { + return; + } + if (this.mulchShovelAmt() <= 0) { + return; + } + if (plot.clearMulch()) { + GameHelper.incrementObservable(this.mulchShovelAmt, -1); + GameHelper.incrementObservable(App.game.statistics.totalShovelsUsed, 1); + } + } + /** + * Adds mulch to a plot + * @param index The plot index + * @param mulch The MulchType to be added + * @param amount The amount of mulch to apply. Defaults to 1 + */ + addMulch(index, mulch, amount = 1) { + const plot = this.plotList[index]; + if (!this.canMulch(index, mulch)) { + return; + } + amount = Math.min(this.mulchList[mulch](), amount); + GameHelper.incrementObservable(this.mulchList[mulch], -amount); + GameHelper.incrementObservable(App.game.statistics.totalMulchesUsed, amount); + GameHelper.incrementObservable(App.game.statistics.mulchesUsed[mulch], amount); + plot.mulch = +mulch; + plot.mulchTimeLeft += GameConstants.MULCH_USE_TIME * amount; + } + /** + * Attempts to add mulch to all plots + * @param mulch The MulchType to be added + * @param amount The amount of mulch to apply to each plot. Defaults to 1 + */ + mulchAll(mulch, amount = 1) { + const mulchPlots = this.plotList.filter((_, index) => this.canMulch(index, mulch)); + amount *= mulchPlots.length; + amount = Math.min(this.mulchList[mulch](), amount); + const sharedMulch = Math.floor(amount / mulchPlots.length); + if (sharedMulch <= 0) { + return; + } + this.plotList.forEach((_, index) => { + this.addMulch(index, mulch, sharedMulch); + }); + } + canMulch(index, mulch) { + const plot = this.plotList[index]; + if (!plot.isUnlocked || !this.hasMulch(mulch) || plot.isSafeLocked) { + return false; + } + if (plot.mulch != MulchType.None && plot.mulch != mulch) { + return false; + } + return true; + } + /** + * Gives the player a random Berry from the first 8 types + * @param amount Amount of berries to give. Defaults to 1. + * @param disableNotification Set to true to not notify the player. Defaults to false. + */ + gainRandomBerry(amount = 1, disableNotification = false) { + const berry = GameHelper.getIndexFromDistribution(GameConstants.BerryDistribution); + if (!disableNotification) { + Notifier.notify({ + message: `You found ${GameHelper.anOrA(BerryType[berry])} ${BerryType[berry]} Berry!`, + image: FarmController.getBerryImage(berry), + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Items.route_item_found, + }); + } + this.gainBerry(berry, amount, false); + } + gainBerry(berry, amount = 1, farming = true) { + GameHelper.incrementObservable(this.berryList[berry], Math.floor(amount)); + if (amount > 0) { + this.unlockBerry(berry); + GameHelper.incrementObservable(App.game.statistics.totalBerriesObtained, amount); + GameHelper.incrementObservable(App.game.statistics.berriesObtained[berry], amount); + if (farming === true) { + GameHelper.incrementObservable(App.game.statistics.totalBerriesHarvested, amount); + GameHelper.incrementObservable(App.game.statistics.berriesHarvested[berry], amount); + } + } + } + hasBerry(berry) { + return this.berryList[berry]() > 0; + } + hasMulch(mulch) { + return this.mulchList[mulch]() > 0; + } + canAccess() { + return App.game.keyItems.hasKeyItem(KeyItemType.Wailmer_pail); + } + unlockBerry(berry) { + if (!this.unlockedBerries[berry]()) { + Notifier.notify({ + message: `You've discovered the ${BerryType[berry]} Berry!`, + image: FarmController.getBerryImage(berry), + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Farming.berry_discovered, + sound: NotificationConstants.NotificationSound.Farming.berry_discovered, + }); + App.game.logbook.newLog(LogBookTypes.NEW, createLogContent.registeredBerry({ berry: BerryType[berry] })); + this.unlockedBerries[berry](true); + } + } + /** + * Checks whether a Berry plant exists on the farm + * @param berry The Berry type + * @param stage The stage of the Berry plant. Defaults to PlotStage.Berry + */ + berryInFarm(berry, stage = PlotStage.Berry, ignoreFrozen = false) { + return this.plotList.some(plot => plot.berry == berry && plot.stage() >= stage && (!ignoreFrozen || plot.mulch !== MulchType.Freeze_Mulch)); + } + toJSON() { + return { + berryList: this.berryList.map(ko.unwrap), + unlockedBerries: this.unlockedBerries.map(ko.unwrap), + mulchList: this.mulchList.map(ko.unwrap), + plotList: this.plotList.map(plot => plot.toJSON()), + shovelAmt: this.shovelAmt(), + mulchShovelAmt: this.mulchShovelAmt(), + mutations: this.mutations.map(mutation => mutation.toJSON()), + farmHands: this.farmHands.toJSON(), + }; + } + fromJSON(json) { + if (json == null) { + return; + } + const savedBerries = json.berryList; + if (savedBerries == null) { + this.berryList = this.defaults.berryList.map((v) => ko.observable(v)); + } + else { + savedBerries.forEach((value, index) => { + this.berryList[index](value); + }); + } + const savedUnlockedBerries = json.unlockedBerries; + if (savedUnlockedBerries == null) { + this.unlockedBerries = this.defaults.unlockedBerries.map((v) => ko.observable(v)); + } + else { + savedUnlockedBerries.forEach((value, index) => { + this.unlockedBerries[index](value); + }); + } + const savedMulches = json.mulchList; + if (savedMulches == null) { + this.mulchList = this.defaults.mulchList.map((v) => ko.observable(v)); + } + else { + savedMulches.forEach((value, index) => { + this.mulchList[index](value); + }); + } + const savedPlots = json.plotList; + if (savedPlots == null) { + this.plotList = this.defaults.plotList; + } + else { + savedPlots.forEach((value, index) => { + const plot = new Plot(false, BerryType.None, 0, MulchType.None, 0, index); + plot.fromJSON(value); + this.plotList[index] = plot; + }); + } + this.unlockedPlotCount(this.plotList.filter(p => p.isUnlocked).length); + const shovelAmt = json.shovelAmt; + if (shovelAmt == null) { + this.shovelAmt = ko.observable(this.defaults.shovelAmt); + } + else { + this.shovelAmt(shovelAmt); + } + const mulchShovelAmt = json.mulchShovelAmt; + if (mulchShovelAmt == null) { + this.mulchShovelAmt = ko.observable(this.defaults.mulchShovelAmt); + } + else { + this.mulchShovelAmt(mulchShovelAmt); + } + const mutations = json.mutations; + if (mutations) { + this.mutations.forEach((mutation, i) => mutation.fromJSON(mutations[i])); + } + this.farmHands.fromJSON(json.farmHands); + } + static getGeneration(gen) { + const genBounds = Farming.genBounds; + const minBound = genBounds[gen - 1] || 0; + const maxBound = genBounds[gen] || Infinity; + return App.game.farming.berryData.filter(berry => berry.type >= minBound && berry.type < maxBound).map(berry => berry.type); + } + static getColor(color) { + return App.game.farming.berryData.filter(berry => berry.color === color).map(berry => berry.type); + } + static getFirmness(firmness) { + return App.game.farming.berryData.filter(berry => berry.firmness === firmness).map(berry => berry.type); + } + auraDisplay(berry, stage) { + return `×${App.game.farming.berryData[berry].aura.auraMultipliers[stage].toLocaleString('en-US', { minimumFractionDigits: 1, maximumFractionDigits: 3 })}`; + } + handleWanderer(plot) { + if (!plot.canCatchWanderer()) { + return; + } + const wanderer = plot.wanderer; + const pokemonData = PokemonHelper.getPokemonByName(wanderer.name); + const berry = App.game.farming.berryData[plot.wanderer.berry]; + const farmPoints = Math.floor(berry.farmValue / (4 + berry.growthTime[PlotStage.Bloom] / 1800)); + const shinyModifier = wanderer.shiny ? GameConstants.WANDER_SHINY_FP_MODIFIER : 1; + App.game.wallet.gainFarmPoints(farmPoints * shinyModifier); + const pokeball = App.game.pokeballs.calculatePokeballToUse(pokemonData.id, wanderer.shiny, false, EncounterType.wanderer); + if (pokeball !== GameConstants.Pokeball.None) { + wanderer.pokeball(pokeball); + wanderer.catching(true); + App.game.pokeballs.usePokeball(pokeball); + // Halved catch time in farm, it does not matter in the balance + setTimeout(() => this.attemptCatchWanderer(plot), App.game.pokeballs.calculateCatchTime(pokeball) / 2); + } + else { + this.wandererIsFleeing(plot); + } + } + attemptCatchWanderer(plot) { + const wanderer = plot.wanderer; + const catchChance = GameConstants.clipNumber(wanderer.catchRate + + App.game.pokeballs.getCatchBonus(wanderer.pokeball(), { pokemon: wanderer.name, encounterType: EncounterType.wanderer }) + + App.game.oakItems.calculateBonus(OakItemType.Magic_Ball) + + (plot.mulch === MulchType.Gooey_Mulch ? GameConstants.GOOEY_MULCH_CATCH_BONUS : 0), 0, 100); + if (Rand.chance(catchChance / 100)) { // Successfully caught + App.game.oakItems.use(OakItemType.Magic_Ball); + App.game.party.gainPokemonByName(wanderer.name, wanderer.shiny); + // EV + const partyPokemon = App.game.party.getPokemonByName(wanderer.name); + const wandererEPGain = App.game.pokeballs.getEPBonus(wanderer.pokeball()) + * GameConstants.BASE_EP_YIELD + * (Berry.isBaseWanderer(wanderer.name) ? GameConstants.BASE_WANDERER_EP_MODIFIER : GameConstants.WANDERER_EP_MODIFIER); + partyPokemon.effortPoints += App.game.party.calculateEffortPoints(partyPokemon, wanderer.shiny, undefined, wandererEPGain); + // DT + const fakedRoute = FarmController.wandererToRoute(wanderer.name); + Battle.gainTokens(fakedRoute.number, fakedRoute.region, wanderer.pokeball()); + // Check for Starf berry generation + if (wanderer.shiny) { + const emptyPlots = App.game.farming.plotList.filter(plot => plot.isUnlocked && plot.isEmpty()); + // No Starf generation if no empty plots :( + if (emptyPlots.length) { + const chosenPlot = emptyPlots[Rand.floor(emptyPlots.length)]; + chosenPlot.plant(BerryType.Starf); + App.game.farming.unlockBerry(BerryType.Starf); + } + } + plot.wanderer = undefined; + return; + } + else if (wanderer.shiny) { // Failed to catch, Shiny + App.game.logbook.newLog(LogBookTypes.ESCAPED, App.game.party.alreadyCaughtPokemonByName(wanderer.name, true) + ? createLogContent.escapedShinyDupe({ pokemon: wanderer.name }) + : createLogContent.escapedShiny({ pokemon: wanderer.name })); + } + else if (!App.game.party.alreadyCaughtPokemonByName(wanderer.name)) { // Failed to catch, Uncaught + App.game.logbook.newLog(LogBookTypes.ESCAPED, createLogContent.escapedWild({ pokemon: wanderer.name })); + } + plot.wanderer.catching(false); + this.wandererIsFleeing(plot); + } + wandererIsFleeing(plot) { + if (!plot.wanderer) { + return; + } + plot.wanderer.fleeing(true); + setTimeout(() => { + plot.wanderer = undefined; + }, 250); + } +} +//#region Plot Unlocking +Farming.unlockMatrix = [ + BerryType.Kelpsy, BerryType.Mago, BerryType.Persim, BerryType.Wepear, BerryType.Qualot, + BerryType.Wiki, BerryType.Aspear, BerryType.Cheri, BerryType.Leppa, BerryType.Aguav, + BerryType.Nanab, BerryType.Rawst, BerryType.None, BerryType.Chesto, BerryType.Razz, + BerryType.Pomeg, BerryType.Sitrus, BerryType.Pecha, BerryType.Oran, BerryType.Pinap, + BerryType.Grepa, BerryType.Figy, BerryType.Bluk, BerryType.Iapapa, BerryType.Hondew, +]; +Farming.genBounds = [8, 20, 36, 54, Infinity]; +Farming.sizeUnitConverter = { + [SizeUnits.cm]: (num) => `${num.toFixed(1)} cm`, + [SizeUnits.inch]: (num) => `${(num / 2.54).toFixed(1)}\u2033`, // inches +}; +class Plot { + constructor(isUnlocked, berry, age, mulch, mulchTimeLeft, index) { + this.index = index; + this.saveKey = ''; + this.defaults = { + isUnlocked: false, + berry: BerryType.None, + age: 0, + mulch: MulchType.None, + mulchTimeLeft: 0, + isSafeLocked: false, + }; + this._isUnlocked = ko.observable(isUnlocked); + this._isSafeLocked = ko.observable(false); + this._berry = ko.observable(berry).extend({ numeric: 0 }); + this._lastPlanted = ko.observable(berry).extend({ numeric: 0 }); + this._age = ko.observable(age); + this._mulch = ko.observable(mulch).extend({ numeric: 0 }); + this._mulchTimeLeft = ko.observable(mulchTimeLeft).extend({ numeric: 3 }); + this._wanderer = ko.observable(undefined); + this.emittingAura = { + type: ko.pureComputed(() => { + var _a, _b, _c; + if (this.stage() < PlotStage.Taller || this.mulch === MulchType.Freeze_Mulch) { + return null; + } + return (_c = (_b = (_a = this.berryData) === null || _a === void 0 ? void 0 : _a.aura) === null || _b === void 0 ? void 0 : _b.auraType) !== null && _c !== void 0 ? _c : null; + }).extend({ rateLimit: 50 }), + value: ko.pureComputed(() => { + var _a; + if (!((_a = this.berryData) === null || _a === void 0 ? void 0 : _a.aura)) { + return null; + } + const boost = this.auraBoost(); + const value = this.berryData.aura.getAuraValue(this.stage()); + return value > 1 || this.berry === BerryType.Micle ? value * boost : value / boost; + }).extend({ rateLimit: 50 }), + }; + this.calcFormattedStageTimeLeft = ((includeGrowthMultiplier) => { + if (this.berry === BerryType.None) { + return ''; + } + const growthTime = this.berryData.growthTime.find(t => this.age < t); + const timeLeft = growthTime - this.age; + const growthMultiplier = includeGrowthMultiplier + ? App.game.farming.getGrowthMultiplier() * this.getGrowthMultiplier() + : 1; + return GameConstants.formatTime(Math.ceil(timeLeft / growthMultiplier)); + }); + this.formattedStageTimeLeft = ko.pureComputed(() => { + return this.calcFormattedStageTimeLeft(true); + }); + this.formattedBaseStageTimeLeft = ko.pureComputed(() => { + return this.calcFormattedStageTimeLeft(false); + }); + this.calcFormattedTimeLeft = ((includeGrowthMultiplier) => { + if (this.berry === BerryType.None) { + return ''; + } + let timeLeft = 0; + if (this.age < this.berryData.growthTime[3]) { + timeLeft = this.berryData.growthTime[3] - this.age; + } + else { + timeLeft = this.berryData.growthTime[4] - this.age; + } + const growthMultiplier = includeGrowthMultiplier + ? App.game.farming.getGrowthMultiplier() * this.getGrowthMultiplier() + : 1; + return GameConstants.formatTime(Math.ceil(timeLeft / growthMultiplier)); + }); + this.formattedTimeLeft = ko.pureComputed(() => { + return this.calcFormattedTimeLeft(true); + }); + this.formattedBaseTimeLeft = ko.pureComputed(() => { + return this.calcFormattedTimeLeft(false); + }); + this.formattedMulchTimeLeft = ko.pureComputed(() => { + if (this.mulch === MulchType.None) { + return ''; + } + return GameConstants.formatTime(this.mulchTimeLeft); + }); + this.auraGrowth = ko.pureComputed(() => { + return this.multiplyNeighbourAura(AuraType.Growth); + }); + this.auraHarvest = ko.pureComputed(() => { + return this.multiplyNeighbourAura(AuraType.Harvest); + }); + this.auraMutation = ko.pureComputed(() => { + return this.multiplyNeighbourAura(AuraType.Mutation); + }); + this.auraReplant = ko.pureComputed(() => { + return this.multiplyNeighbourAura(AuraType.Replant); + }); + this.auraDeath = ko.pureComputed(() => { + return this.berry === BerryType.Kasib ? 1 : this.maxNeighbourAura(AuraType.Death); + }); + this.auraDecay = ko.pureComputed(() => { + return this.multiplyNeighbourAura(AuraType.Decay); + }); + this.auraBoost = ko.pureComputed(() => { + return this.berry === BerryType.Lum ? 1 : this.maxNeighbourAura(AuraType.Boost); + }); + this.formattedAuras = ko.pureComputed(() => { + const auraStr = []; + if (this.auraGrowth() !== 1) { + auraStr.push(`Growth: ×${this.auraGrowth().toFixed(2)}`); + } + if (this.auraHarvest() !== 1) { + auraStr.push(`Harvest: ×${this.auraHarvest().toFixed(2)}`); + } + if (this.auraMutation() !== 1) { + auraStr.push(`Mutation: ×${this.auraMutation().toFixed(2)}`); + } + if (this.auraReplant() !== 1) { + auraStr.push(`Replant: ×${this.auraReplant().toFixed(2)}`); + } + if (this.auraDeath() !== 1) { + auraStr.push(`Death: ×${this.auraDeath().toFixed(2)}`); + } + if (this.auraDecay() !== 1) { + auraStr.push(`Decay: ×${this.auraDecay().toFixed(2)}`); + } + if (this.auraBoost() !== 1) { + auraStr.push(`Boost: ×${this.auraBoost().toFixed(2)}`); + } + return auraStr.join('
    '); + }); + this.isEmpty = ko.pureComputed(() => { + return this.berry === BerryType.None; + }); + this.stage = ko.pureComputed(() => { + if (this.berry === BerryType.None) { + return PlotStage.Seed; + } + return this.berryData.growthTime.findIndex(t => this.age <= t); + }); + this.tooltip = ko.pureComputed(() => { + const tooltip = []; + // Time + if (this.berry !== BerryType.None) { + tooltip.push(`${BerryType[this.berry]}`); + const timeBoostType = Settings.getSetting('farmBoostDisplay').observableValue(); + // Petaya Effect + if (App.game.farming.berryInFarm(BerryType.Petaya, PlotStage.Berry, true) && this.berry !== BerryType.Petaya && this.stage() == PlotStage.Berry) { + tooltip.push('∞ until death'); + if (timeBoostType) { + tooltip.push(`(altered from ${this.formattedBaseStageTimeLeft()})`); + } + // Normal Time + } + else { + const timeType = Settings.getSetting('farmDisplay').observableValue(); + const growthMultiplierNumber = App.game.farming.getGrowthMultiplier() * this.getGrowthMultiplier(); + const altered = growthMultiplierNumber !== 1; + let timetip; + let formattedBaseTime; + if (timeType === 'nextStage') { + const formattedTime = this.formattedStageTimeLeft(); + formattedBaseTime = this.formattedBaseStageTimeLeft(); + switch (this.stage()) { + case PlotStage.Seed: + timetip = `${formattedTime} until sprout`; + break; + case PlotStage.Sprout: + timetip = `${formattedTime} until grown`; + break; + case PlotStage.Taller: + timetip = `${formattedTime} until bloom`; + break; + case PlotStage.Bloom: + timetip = `${formattedTime} until ripe`; + break; + case PlotStage.Berry: + timetip = `${formattedTime} until death`; + break; + } + } + else { + const formattedTime = this.formattedTimeLeft(); + formattedBaseTime = this.formattedBaseTimeLeft(); + switch (this.stage()) { + case PlotStage.Seed: + case PlotStage.Sprout: + case PlotStage.Taller: + case PlotStage.Bloom: + timetip = `${formattedTime} until ripe`; + break; + case PlotStage.Berry: + timetip = `${formattedTime} until death`; + break; + } + } + tooltip.push(timetip); + if (altered && timeBoostType) { + tooltip.push(`(altered from ${formattedBaseTime})`); + } + } + } + // Aura + if (this.emittingAura.type() !== null) { + tooltip.push('Aura Emitted:'); + tooltip.push(`${AuraType[this.emittingAura.type()]}: ×${this.emittingAura.value().toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`); + } + const auraStr = this.formattedAuras(); + if (auraStr) { + tooltip.push('Aura Received:'); + tooltip.push(auraStr); + } + // Mulch + if (this.mulch !== MulchType.None) { + const mulchTime = this.formattedMulchTimeLeft(); + tooltip.push('Mulch'); + tooltip.push(`${MulchType[this.mulch].replace('_Mulch', '')} : ${mulchTime}`); + } + // Wanderer + if (this.wanderer) { + tooltip.push(`A wild ${PokemonHelper.displayName(this.wanderer.name)()} is wandering around`); + } + return tooltip.join('
    '); + }); + this.notifications = []; + } + /** + * Handles updating the berry plant + * @param seconds Number of seconds to add to the plants age + * @returns Whether the plot stage has changed this update + */ + update(seconds) { + // Updating Berry + let change = false; + if (this.berry !== BerryType.None) { + const growthTime = seconds * App.game.farming.getGrowthMultiplier() * this.getGrowthMultiplier(); + const oldAge = this.age; + this.age += growthTime; + // Checking for Petaya Berries + if (App.game.farming.berryInFarm(BerryType.Petaya, PlotStage.Berry, true) && this.berry !== BerryType.Petaya) { + this.age = Math.min(this.age, this.berryData.growthTime[3] + 1); + } + const updatedStage = this.stageUpdated(oldAge, this.age); + if (updatedStage !== PlotStage.Seed) { + change = true; + } + if (updatedStage === PlotStage.Berry) { + this.notifications.push(FarmNotificationType.Ripe); + change = true; + } + if (!this._hasWarnedAboutToWither && this.age + 15 > this.berryData.growthTime[4]) { + this.notifications.push(FarmNotificationType.AboutToWither); + this._hasWarnedAboutToWither = true; + } + if (this.age > this.berryData.growthTime[4]) { + this.die(); + change = true; + } + } + // Updating Mulch + if (this.mulch !== MulchType.None) { + this.mulchTimeLeft = Math.max(this.mulchTimeLeft - seconds, 0); + if (this.mulchTimeLeft === 0) { + this.notifications.push(FarmNotificationType.MulchRanOut); + this.mulch = MulchType.None; + } + } + return change; + } + stageUpdated(oldAge, newAge) { + const oldStage = this.berryData.growthTime.findIndex(t => oldAge < t); + const newStage = this.berryData.growthTime.findIndex(t => newAge < t); + if (oldStage !== newStage) { + return newStage; + } + return PlotStage.Seed; + } + /** + * Handles planting a berry on the plot + * @param berry The BerryType + */ + plant(berry) { + this.berry = berry; + this.lastPlanted = berry; + this.age = 0; + this.notifications = []; + this._hasWarnedAboutToWither = false; + } + /** + * Returns how many berries will be harvested + */ + harvestAmount() { + return Math.floor(Math.max(1, this.berryData.harvestAmount * this.getHarvestMultiplier())); + } + /** + * Handles killing the berry plant + * @param harvested Whether this death was due to the player harvesting manually, or by withering + */ + die(harvested = false) { + var _a; + (_a = this.wanderer) === null || _a === void 0 ? void 0 : _a.distract(); + if (!harvested) { + // Withered Berry plant drops half of the berries + const amount = Math.max(1, Math.ceil(this.harvestAmount() / 2)); + if (amount) { + App.game.farming.gainBerry(this.berry, amount); + this.notifications.push(FarmNotificationType.Dropped); + } + // Check for Banetteite drop if Kasib died + if (this.berry == BerryType.Kasib) { + if (player.highestRegion() >= GameConstants.Region.kalos && App.game.party.alreadyCaughtPokemonByName('Banette') && !player.hasMegaStone(GameConstants.MegaStoneType.Banettite)) { + if (Rand.chance(0.05)) { + player.gainMegaStone(GameConstants.MegaStoneType.Banettite); + } + } + } + // Check if berry replants itself + const replantChance = Math.min(1, this.berryData.replantRate * App.game.farming.getReplantMultiplier() * this.getReplantMultiplier()); + if (Rand.chance(replantChance)) { + this.age = 0; + this.notifications.push(FarmNotificationType.Replanted); + App.game.oakItems.use(OakItemType.Sprinklotad); + GameHelper.incrementObservable(App.game.statistics.totalBerriesReplanted, 1); + return; + } + this.notifications.push(FarmNotificationType.Withered); + // Check for Kasib berry mutation/replant chance + if (App.game.farming.highestUnlockedBerry() >= BerryType.Occa) { + if (!App.game.farming.berryInFarm(BerryType.Colbur)) { + if (Rand.chance(0.05)) { + this.notifications.push(FarmNotificationType.Mutated); + this.berry = BerryType.Kasib; + this.age = 0; + App.game.farming.unlockBerry(BerryType.Kasib); + return; + } + } + } + } + // Reset plant + this.berry = BerryType.None; + this.age = 0; + } + generateWanderPokemon() { + // Ticking the wanderer + if (this.wanderer) { + if (this.wanderer.tick()) { + this.wanderer = undefined; + } + return undefined; + } + // Check if plot is eligible for wandering Pokemon + if (!this.isUnlocked || this.berry === BerryType.None || this.stage() !== PlotStage.Berry) { + return undefined; + } + // Chance to generate wandering Pokemon + if (Rand.chance(GameConstants.WANDER_RATE * App.game.farming.externalAuras[AuraType.Attract]())) { + // Get a random Pokemon from the list of possible encounters + const wanderer = PokemonFactory.generateWandererData(this); + this.wanderer = wanderer; + // Add to log book + if (wanderer.shiny) { + App.game.logbook.newLog(LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemonByName(wanderer.name, true) + ? createLogContent.shinyWanderDupe({ pokemon: wanderer.name }) + : createLogContent.shinyWander({ pokemon: wanderer.name })); + } + else { + App.game.logbook.newLog(LogBookTypes.WANDER, createLogContent.wildWander({ pokemon: wanderer.name })); + } + return wanderer; + } + return undefined; + } + /** + * Gets the growth multiplier for this plot + */ + getGrowthMultiplier() { + var _a; + let multiplier = (_a = { + [MulchType.Boost_Mulch]: GameConstants.BOOST_MULCH_MULTIPLIER, + [MulchType.Amaze_Mulch]: GameConstants.AMAZE_MULCH_GROWTH_MULTIPLIER, + [MulchType.Freeze_Mulch]: GameConstants.FREEZE_MULCH_MULTIPLIER, + }[this.mulch]) !== null && _a !== void 0 ? _a : 1; + if (this.stage() !== PlotStage.Berry) { + multiplier *= this.auraGrowth(); + } + else { + multiplier *= this.auraDecay(); + // Handle Death Aura + if (this.berry !== BerryType.Kasib) { + multiplier *= this.auraDeath(); + } + } + return multiplier; + } + /** + * Gets the harvest multiplier for this plot + */ + getHarvestMultiplier() { + let multiplier = 1; + if (this.mulch === MulchType.Rich_Mulch) { + multiplier = GameConstants.RICH_MULCH_MULTIPLIER; + } + else if (this.mulch === MulchType.Amaze_Mulch) { + multiplier = GameConstants.AMAZE_MULCH_PRODUCE_MULTIPLIER; + } + multiplier *= this.auraHarvest(); + return multiplier; + } + /** + * Gets the replant multiplier for this plot + */ + getReplantMultiplier() { + let multiplier = 1; + if (this.mulch === MulchType.Rich_Mulch) { + multiplier = GameConstants.RICH_MULCH_MULTIPLIER; + } + else if (this.mulch === MulchType.Amaze_Mulch) { + multiplier = GameConstants.AMAZE_MULCH_PRODUCE_MULTIPLIER; + } + multiplier *= this.auraReplant(); + return multiplier; + } + /** + * Gets the mutation multiplier for this plot + */ + getMutationMultiplier() { + let multiplier = 1; + if (this.mulch === MulchType.Surprise_Mulch) { + multiplier = GameConstants.SURPRISE_MULCH_MULTIPLIER; + } + else if (this.mulch === MulchType.Amaze_Mulch) { + multiplier = GameConstants.AMAZE_MULCH_MUTATE_MULTIPLIER; + } + multiplier *= this.auraMutation(); + return multiplier; + } + multiplyNeighbourAura(auraType) { + return this.neighbours() + .filter(p => p.emittingAura.type() === auraType) + .reduce((acc, plot) => { var _a; return acc * ((_a = plot.emittingAura.value()) !== null && _a !== void 0 ? _a : 1); }, 1); + } + maxNeighbourAura(auraType) { + return Math.max(1, ...this.neighbours().filter(p => p.emittingAura.type() === auraType).map(p => { var _a; return (_a = p.emittingAura.value()) !== null && _a !== void 0 ? _a : 1; })); + } + /** + * returns true if the plot had mulch. + */ + clearMulch() { + const wasMulched = this.mulch != MulchType.None; + if (wasMulched) { + this.mulch = MulchType.None; + this.mulchTimeLeft = 0; + } + return wasMulched; + } + fromJSON(json) { + var _a, _b, _c, _d, _e, _f, _g, _h; + if (json == null) { + return; + } + this.isUnlocked = (_a = json.isUnlocked) !== null && _a !== void 0 ? _a : this.defaults.isUnlocked; + this.berry = (_b = json.berry) !== null && _b !== void 0 ? _b : this.defaults.berry; + this.age = (_c = json.age) !== null && _c !== void 0 ? _c : this.defaults.age; + this.mulch = (_d = json.mulch) !== null && _d !== void 0 ? _d : this.defaults.mulch; + this.mulchTimeLeft = (_e = json.mulchTimeLeft) !== null && _e !== void 0 ? _e : this.defaults.mulchTimeLeft; + this.lastPlanted = (_g = (_f = json.lastPlanted) !== null && _f !== void 0 ? _f : json.berry) !== null && _g !== void 0 ? _g : this.defaults.berry; + this.isSafeLocked = (_h = json.isSafeLocked) !== null && _h !== void 0 ? _h : this.defaults.isSafeLocked; + this.wanderer = WandererPokemon.fromJSON(json.wanderer); + } + toJSON() { + var _a; + return { + isUnlocked: this.isUnlocked, + berry: this.berry, + lastPlanted: this.lastPlanted, + age: this.age, + mulch: this.mulch, + mulchTimeLeft: this.mulchTimeLeft, + isSafeLocked: this.isSafeLocked, + wanderer: (_a = this.wanderer) === null || _a === void 0 ? void 0 : _a.toJSON(), + }; + } + /** + * Finds the plot indices that are around the plot in a 3x3 square + * @param index The plot index + */ + static findNearPlots(index) { + const plots = []; + const posX = index % GameConstants.FARM_PLOT_WIDTH; + const posY = (index - posX) / GameConstants.FARM_PLOT_HEIGHT; + for (let y = posY - 1; y <= posY + 1; y++) { + for (let x = posX - 1; x <= posX + 1; x++) { + if (y < 0 || y > GameConstants.FARM_PLOT_HEIGHT - 1 || x < 0 || x > GameConstants.FARM_PLOT_WIDTH - 1) { + continue; + } + if (y === posY && x === posX) { + continue; + } + const id = y * GameConstants.FARM_PLOT_HEIGHT + x; + plots.push(id); + } + } + return plots; + } + neighbours() { + return Plot.findNearPlots(this.index).map(i => App.game.farming.plotList[i]); + } + canCatchWanderer() { + return this.wanderer && !this.wanderer.catching() && !this.wanderer.fleeing(); + } + /** + * Finds the plot indices that are directly next to the plot (aka a plus sign) + * @param index The plot index + */ + static findPlusPlots(index, filter) { + const posX = index % GameConstants.FARM_PLOT_WIDTH; + const posY = (index - posX) / GameConstants.FARM_PLOT_HEIGHT; + const possiblePlots = [[posY - 1, posX], [posY, posX - 1], [posY, posX + 1], [posY + 1, posX]]; + return possiblePlots.filter(([y, x]) => { + return y >= 0 && y < GameConstants.FARM_PLOT_HEIGHT && x >= 0 && x < GameConstants.FARM_PLOT_WIDTH; + }).map(([y, x]) => y * GameConstants.FARM_PLOT_HEIGHT + x); + } + get berryData() { + return App.game.farming.berryData[this.berry]; + } + // Knockout getters + get isUnlocked() { + return this._isUnlocked(); + } + set isUnlocked(value) { + this._isUnlocked(value); + } + get isSafeLocked() { + return this._isSafeLocked(); + } + set isSafeLocked(value) { + this._isSafeLocked(value); + } + get berry() { + return this._berry(); + } + set berry(berry) { + this._berry(berry); + } + get lastPlanted() { + return this._lastPlanted(); + } + set lastPlanted(berry) { + this._lastPlanted(berry); + } + get age() { + return this._age(); + } + set age(value) { + this._age(value); + } + get mulch() { + return this._mulch(); + } + set mulch(value) { + this._mulch(value); + } + get mulchTimeLeft() { + return this._mulchTimeLeft(); + } + set mulchTimeLeft(value) { + this._mulchTimeLeft(value); + } + get wanderer() { + return this._wanderer(); + } + set wanderer(wanderer) { + this._wanderer(wanderer); + } +} +class WandererPokemon { + constructor(name, berry, catchRate, shiny = false, distractTime = 0) { + this.name = name; + this.berry = berry; + this.catchRate = catchRate; + this.shiny = shiny; + this.catching = ko.observable(false); + this.pokeball = ko.observable(GameConstants.Pokeball.None); + this.distractTime = ko.observable(distractTime); + this.fleeing = ko.observable(false); + } + // If distracted for long enough, flees + tick() { + if (!this.distractTime() || this.catching() || this.fleeing()) { + return false; + } + GameHelper.incrementObservable(this.distractTime, GameConstants.WANDER_TICK); + if (this.distractTime() >= 5 * GameConstants.MINUTE) { + return true; + } + return false; + } + // Happens when plot.dies() is used + distract() { + GameHelper.incrementObservable(this.distractTime, 1); + } + static fromJSON(wanderer) { + if (wanderer) { + return new WandererPokemon(wanderer.name, wanderer.berry, wanderer.catchRate, wanderer.shiny, wanderer.distractTime); + } + return undefined; + } + toJSON() { + const json = { name: this.name, berry: this.berry, catchRate: this.catchRate, shiny: this.shiny, distractTime: this.distractTime() }; + return json; + } +} +class Aura { + constructor(auraType, auraMultipliers) { + this.auraType = auraType; + this.auraMultipliers = auraMultipliers; + } + getAuraValue(stage) { + if (!stage || stage < PlotStage.Taller) { + return 1; + } + return this.auraMultipliers[stage - 2]; + } +} +class Mutation { + constructor(mutationChance, mutatedBerry, options) { + var _a; + this._mutationChance = mutationChance; + this.mutatedBerry = mutatedBerry; + this._hint = options === null || options === void 0 ? void 0 : options.hint; + this._unlockReq = options === null || options === void 0 ? void 0 : options.unlockReq; + this.showHint = (_a = options === null || options === void 0 ? void 0 : options.showHint) !== null && _a !== void 0 ? _a : true; + this._hintSeen = ko.observable(false); + } + toJSON() { + return this.hintSeen; + } + fromJSON(hintSeen) { + this.hintSeen = !!hintSeen; + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + if (!this._unlockReq) { + return true; + } + return this._unlockReq(); + } + /** + * Handles getting the hint for this mutation for the Kanto Berry Master + */ + get hint() { + if (!this.showHint) { + return ''; + } + if (this._hint) { + return this._hint; + } + return ''; + } + /** + * Handles getting the mutation chance + * @param idx The plot index + */ + mutationChance(idx) { + return this._mutationChance; + } + /** + * Update tag for mutations. Returns true if this mutation will occur + */ + mutate() { + if (!this.unlocked) { + return false; + } + const plots = this.getMutationPlots(); + if (!plots.length) { + return false; + } + let mutated = false; + plots.forEach((idx) => { + const willMutate = Rand.chance(this.mutationChance(idx) * App.game.farming.getMutationMultiplier() * App.game.farming.plotList[idx].getMutationMultiplier()); + if (!willMutate) { + return; + } + this.handleMutation(idx); + App.game.oakItems.use(OakItemType.Squirtbottle); + mutated = true; + }); + return mutated; + } + get hintSeen() { + return this._hintSeen(); + } + set hintSeen(bool) { + this._hintSeen(bool); + } +} +/// +/** + * A Blank Mutation to be used to store hint data. + * This is mostly because the Mutation framework controls the hints, but some mutations are outside of the Mutation framework + */ +class BlankMutation extends Mutation { + getMutationPlots() { + return []; + } + handleMutation(index) { + return; + } +} +/// +/** + * Mutation that occurs on an empty Plot + */ +class GrowMutation extends Mutation { + constructor(mutationChance, mutatedBerry, options) { + super(mutationChance, mutatedBerry, options); + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const plots = []; + App.game.farming.plotList.forEach((plot, idx) => { + if (!plot.isUnlocked) { + return; + } + if (!plot.isEmpty()) { + return; + } + plots.push(idx); + }); + return plots; + } + /** + * Handles updating the farm with the mutation + * @param index The plot index to mutate + */ + handleMutation(index) { + const plot = App.game.farming.plotList[index]; + plot.berry = this.mutatedBerry; + plot.age = 0; + plot.notifications = []; + App.game.farming.unlockBerry(this.mutatedBerry); + } +} +/// +/** + * Mutation to produce the Enigma Berry + */ +class EnigmaMutation extends GrowMutation { + constructor(mutationChance) { + super(mutationChance, BerryType.Enigma, { + unlockReq: function () { + return EnigmaMutation.getReqs().every(req => App.game.farming.unlockedBerries[req]()); + }, + }); + this.hintsSeen = Array(4).fill(false).map(val => ko.observable(val)); + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const plots = super.getMutationPlots(); + const reqs = EnigmaMutation.getReqs(); + return plots.filter((idx) => { + const nearPlots = Plot.findPlusPlots(idx); + if (nearPlots.length !== 4) { + return false; + } + return nearPlots.every((idx, n) => { + const plot = App.game.farming.plotList[idx]; + if (!plot.isUnlocked) { + return false; + } + if (plot.isEmpty()) { + return false; + } + if (plot.stage() !== PlotStage.Berry) { + return false; + } + if (plot.berry !== reqs[n]) { + return false; + } + return true; + }); + }); + } + /** + * Returns a list of 4 Berry types to cause the mutation + */ + static getReqs() { + SeededRand.seed(+player.trainerId); + // Getting possible Berries + // Only Gen 3 and 4 Berries so there isn't as big of a growth discrepancy (e.g. Cheri and Haban) + let berryTypes = Farming.getGeneration(2).concat(Farming.getGeneration(3)); + // Remove parasite Berries, as having four sides for mutation requirements means parasite + // mutations can make it difficult to have all four plants fully grown. + // Also remove Babiri since they'll stop mutations + berryTypes = berryTypes.filter(berry => { + return ![BerryType.Occa, BerryType.Kebia, BerryType.Colbur, BerryType.Babiri].includes(berry); + }); + return [...new Array(4)].map((_) => SeededRand.fromArray(berryTypes)); + } + get hintIndex() { + SeededRand.seedWithDate(new Date()); + return SeededRand.floor(4); + } + /** + * Handles getting the hint for this mutation for the Kanto Berry Master + */ + get partialHint() { + const idx = this.hintIndex; + return `There's a mysterious berry that requires ${this.getHint(idx)}.`; + } + getHint(idx) { + let direction = ''; + switch (idx) { + case 0: + direction = 'north'; + break; + case 1: + direction = 'west'; + break; + case 2: + direction = 'east'; + break; + case 3: + direction = 'south'; + } + return `a ${BerryType[EnigmaMutation.getReqs()[idx]]} Berry to the ${direction}`; + } + /** + * Handles getting the full hint for the BerryDex + */ + get hint() { + const hints = []; + const unlocked = App.game.farming.unlockedBerries[this.mutatedBerry](); + this.hintsSeen.forEach((hintSeen, idx) => { + if (!hintSeen() && !unlocked) { + return false; + } + hints.push(this.getHint(idx)); + }); + let tempHint = `There's a mysterious berry that requires ${hints.join(', ').replace(/, ([\w\s]+)$/, ' and $1')}`; + if (hints.length === 0) { + tempHint += 'a specific configuration of Berries'; + } + tempHint += (hints.length !== 4) ? '. However, there\'s still something missing...' : '.'; + return tempHint; + } + toJSON() { + return this.hintsSeen.map(h => h()); + } + fromJSON(hintsSeen) { + if (!hintsSeen || typeof hintsSeen !== 'object') { + return; + } + hintsSeen.forEach((value, index) => { + if (value) { + this.hintSeen = true; + } + this.hintsSeen[index](value); + }); + } +} +/// +/** + * Mutation that occurs on a Berry plant that is PlotStage.Taller or older. + */ +class EvolveMutation extends Mutation { + constructor(mutationChance, mutatedBerry, originalBerry, options) { + super(mutationChance, mutatedBerry, options); + this.originalBerry = originalBerry; + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const plots = []; + App.game.farming.plotList.forEach((plot, idx) => { + if (!plot.isUnlocked) { + return; + } + if (plot.isEmpty()) { + return; + } + if (plot.stage() < PlotStage.Taller) { + return; + } + if (this.originalBerry && plot.berry !== this.originalBerry) { + return; + } + // Babiri Berries can't mutate + if (plot.berry === BerryType.Babiri) { + return; + } + plots.push(idx); + }); + return plots; + } + /** + * Handles updating the farm with the mutation. + * Mutations will keep the new Berry plant in the same stage as it was previously + * @param index The plot index to mutate + */ + handleMutation(index) { + const plot = App.game.farming.plotList[index]; + const currentStage = plot.stage(); + let newAge = 0; + if (currentStage !== PlotStage.Seed) { + newAge = App.game.farming.berryData[this.mutatedBerry].growthTime[currentStage - 1] + 1; + } + plot.berry = this.mutatedBerry; + plot.age = newAge; + plot.notifications = []; + App.game.farming.unlockBerry(this.mutatedBerry); + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + // Check for unlocked original berry + if (this.originalBerry && !App.game.farming.unlockedBerries[this.originalBerry]()) { + return false; + } + return super.unlocked; + } +} +/// +/** + * Mutation that requires a specific environment near a Berry plot. + */ +class EvolveNearMutation extends EvolveMutation { + constructor(mutationChance, mutatedBerry, originalBerry, options) { + super(mutationChance, mutatedBerry, originalBerry, options); + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const plots = super.getMutationPlots(); + return plots.filter((idx) => { + const nearPlots = Plot.findNearPlots(idx); + return this.nearPlotsFitRequirements(nearPlots); + }); + } +} +/// +/** + * Mutation that requires at least some amount of specific Berry plants near an empty plot. + * The required Berry plants must be in the Berry stage for mutations to occur. + */ +class EvolveNearBerryMinMutation extends EvolveNearMutation { + constructor(mutationChance, mutatedBerry, originalBerry, berryReqs, options) { + super(mutationChance, mutatedBerry, originalBerry, options); + this.berryReqs = berryReqs; + } + /** + * Determines if the plots near fit the requirements + * @param plots The list of nearby plots + */ + nearPlotsFitRequirements(plots) { + const currentReqs = {}; + plots.forEach((idx) => { + const plot = App.game.farming.plotList[idx]; + if (plot.stage() !== PlotStage.Berry) { + return; + } + if (!currentReqs[plot.berry]) { + currentReqs[plot.berry] = 1; + } + else { + currentReqs[plot.berry] += 1; + } + }); + return Object.keys(this.berryReqs).every(key => currentReqs[key] !== undefined && currentReqs[key] >= this.berryReqs[key]); + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + for (const berry of Object.keys(this.berryReqs)) { + if (!App.game.farming.unlockedBerries[berry]()) { + return false; + } + } + return super.unlocked; + } +} +/// +/** + * Mutation that requires specific Berry plants near a Berry plot. + * The required Berry plants must be in the Berry stage for mutations to occur. + */ +class EvolveNearBerryMutation extends EvolveNearMutation { + constructor(mutationChance, mutatedBerry, originalBerry, berryReqs, options) { + super(mutationChance, mutatedBerry, originalBerry, options); + this.berryReqs = berryReqs; + } + /** + * Determines if the plots near fit the requirements + * @param plots The list of nearby plots + */ + nearPlotsFitRequirements(plots) { + return this.berryReqs.every((req) => { + return plots.some((plot) => { + return this.checkRequirement(plot, req); + }); + }); + } + /** + * Checks an individual plot for a Berry requirement + */ + checkRequirement(index, berryReq) { + const plot = App.game.farming.plotList[index]; + if (!plot.isUnlocked) { + return false; + } + if (plot.berry !== berryReq) { + return false; + } + if (plot.stage() !== PlotStage.Berry) { + return false; + } + return true; + } + get hint() { + if (super.hint) { + return super.hint; + } + const berryType = this.originalBerry !== undefined ? BerryType[this.originalBerry] : 'some'; + if (this.berryReqs.length === 0) { + return `I've heard that ${berryType} Berries can spontaneously change!`; + } + let str = `I've heard that growing ${berryType} Berries`; + str += ` near ${this.berryReqs.map(b => BerryType[b]).join(', ').replace(/, ([\w\s]+)$/, ' and $1')} Berries`; + str += ' can cause it to change!'; + return str; + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + // Check for Berry requirements + if (!this.berryReqs.every(req => App.game.farming.unlockedBerries[req]())) { + return false; + } + return super.unlocked; + } +} +/// +/** + * Mutation that requires very specific Berry plants near an empty plot. + * The required Berry plants must be in the Berry stage for mutations to occur. + */ +class EvolveNearBerryStrictMutation extends EvolveNearMutation { + constructor(mutationChance, mutatedBerry, originalBerry, berryReqs, neighborStageReq, options) { + super(mutationChance, mutatedBerry, originalBerry, options); + this.berryReqs = berryReqs; + this.neighborStageReq = neighborStageReq; + } + /** + * Determines if the plots near fit the requirements + * @param plots The list of nearby plots + */ + nearPlotsFitRequirements(plots) { + const currentReqs = {}; + plots.forEach((idx) => { + const plot = App.game.farming.plotList[idx]; + if (!plot.isUnlocked) { + return; + } + if (plot.isEmpty()) { + return; + } + if (plot.stage() < this.neighborStageReq) { + return; + } + if (!currentReqs[plot.berry]) { + currentReqs[plot.berry] = 1; + } + else { + currentReqs[plot.berry] += 1; + } + }); + return GameHelper.shallowEqual(this.berryReqs, currentReqs); + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + for (const berry of Object.keys(this.berryReqs)) { + if (!App.game.farming.unlockedBerries[berry]()) { + return false; + } + } + return super.unlocked; + } +} +/// +/** + * Mutation that requires specific flavored Berry plants near a Berry plot + * Will check the surround plots for the flavors of the nearby Berry plants. Must be in the range of the flavorReqs + */ +class EvolveNearFlavorMutation extends EvolveNearMutation { + /** + * Constructor for a FlavorMutation + * @param mutationChance The chance of the mutation occuring + * @param mutatedBerry The mutated BerryType + * @param flavorReqs The flavor requirements for the mutation to occur + * @param options The additional MutationOptions + */ + constructor(mutationChance, mutatedBerry, originalBerry, flavorReqs, options) { + super(mutationChance, mutatedBerry, originalBerry, options); + this.flavorRatio = [0.5, 0.75, 1]; // Determines how much flavor a Berry plant has before fully mature. + this.flavorReqs = flavorReqs; + } + /** + * Determines if the plots near fit the requirements + * @param plots The list of nearby plots + */ + nearPlotsFitRequirements(plots) { + const nearFlavors = [0, 0, 0, 0, 0]; + plots.forEach(idx => { + const plot = App.game.farming.plotList[idx]; + if (!plot.isUnlocked) { + return; + } + if (plot.isEmpty()) { + return; + } + if (plot.stage() < PlotStage.Taller) { + return; + } + const berryFlavors = App.game.farming.berryData[plot.berry].flavors.map(x => x.value * this.flavorRatio[plot.stage() - 2]); + for (let j = 0; j < 5; j++) { + nearFlavors[j] += berryFlavors[j]; + } + }); + return this.flavorReqs.every((value, idx) => value[0] <= nearFlavors[idx] && nearFlavors[idx] <= value[1]); + } +} +/// +/** + * Mutation that requires a total amount of flavor in the field + */ +class FieldFlavorMutation extends GrowMutation { + constructor(mutationChance, mutatedBerry, fieldFlavor, options) { + super(mutationChance, mutatedBerry, options); + this.flavorRatio = [0.5, 0.75, 1]; // Determines how much flavor a Berry plant has before fully mature. + this.fieldFlavor = fieldFlavor; + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const emptyPlots = super.getMutationPlots(); + const nearFlavors = [0, 0, 0, 0, 0]; + App.game.farming.plotList.forEach((plot, idx) => { + if (!plot.isUnlocked) { + return; + } + if (plot.isEmpty()) { + return; + } + if (plot.stage() < PlotStage.Taller) { + return; + } + const berryFlavors = App.game.farming.berryData[plot.berry].flavors.map(x => x.value * this.flavorRatio[plot.stage() - 2]); + for (let j = 0; j < 5; j++) { + nearFlavors[j] += berryFlavors[j]; + } + }); + const reqMatched = this.fieldFlavor.every((value, idx) => value <= nearFlavors[idx]); + if (reqMatched) { + return emptyPlots; + } + return []; + } +} +/// +/** + * Mutation that requires a number of Berry plants in the farm + */ +class FieldMutation extends GrowMutation { + constructor(mutationChance, mutatedBerry, fieldBerries, options) { + super(mutationChance, mutatedBerry, options); + this.fieldBerries = fieldBerries; + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const emptyPlots = super.getMutationPlots(); + const fieldPlots = Array(this.fieldBerries.length).fill(0); + App.game.farming.plotList.forEach((plot, idx) => { + if (!plot.isUnlocked) { + return; + } + if (plot.isEmpty()) { + return; + } + this.fieldBerries.forEach((fb, index) => { + if (plot.berry === fb.berry && plot.stage() === PlotStage.Berry) { + fieldPlots[index] += 1; + } + }); + }); + if (fieldPlots.every((fp, index) => fp >= this.fieldBerries[index].amountRequired)) { + return emptyPlots; + } + return []; + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + // Check for Berry requirements + if (this.fieldBerries.some((fb) => !App.game.farming.unlockedBerries[fb.berry]())) { + return false; + } + return super.unlocked; + } + /** + * Handles getting the hint for this mutation for the Kanto Berry Master + */ + get hint() { + if (super.hint) { + return super.hint; + } + const berries = this.fieldBerries.map((fb) => BerryType[fb.berry]).join(', '); + return `Legends tell of a mysterious Berry that only appears in a field of ${berries} Berries.`; + } +} +/// +/** + * Mutation that requires a specific environment near an empty plot. + */ +class GrowNearMutation extends GrowMutation { + constructor(mutationChance, mutatedBerry, options) { + super(mutationChance, mutatedBerry, options); + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const plots = super.getMutationPlots(); + return plots.filter((idx) => { + const nearPlots = Plot.findNearPlots(idx); + return this.nearPlotsFitRequirements(nearPlots); + }); + } +} +/// +/** + * Mutation that requires specific Berry plants near an empty plot. + * The required Berry plants must be in the Berry stage for mutations to occur. + */ +class GrowNearBerryMutation extends GrowNearMutation { + constructor(mutationChance, mutatedBerry, berryReqs, options) { + super(mutationChance, mutatedBerry, options); + this.berryReqs = berryReqs; + } + /** + * Determines if the plots near fit the requirements + * @param plots The list of nearby plots + */ + nearPlotsFitRequirements(plots) { + return this.berryReqs.every((req) => { + return plots.some((plot) => { + return this.checkRequirement(plot, req); + }); + }); + } + /** + * Checks an individual plot for a Berry requirement + */ + checkRequirement(index, berryReq) { + const plot = App.game.farming.plotList[index]; + if (!plot.isUnlocked) { + return false; + } + if (plot.berry !== berryReq) { + return false; + } + if (plot.stage() !== PlotStage.Berry) { + return false; + } + return true; + } + /** + * Handles getting the hint for this mutation for the Kanto Berry Master + */ + get hint() { + if (super.hint) { + return super.hint; + } + if (this.berryReqs.length === 1) { + return `I've heard that growing ${BerryType[this.berryReqs[0]]} Berries can spread a new Berry into nearby empty plots!`; + } + if (this.berryReqs.length >= 2) { + return `I've heard that growing ${this.berryReqs.map(b => BerryType[b]).join(', ').replace(/, ([\w\s]+)$/, ' and $1')} Berries near each other will produce something interesting!`; + } + return ''; + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + // Check for Berry requirements + if (!this.berryReqs.every(req => App.game.farming.unlockedBerries[req]())) { + return false; + } + return super.unlocked; + } +} +/// +/** + * Mutation that requires very specific Berry plants near an empty plot. + * The required Berry plants must be in the Berry stage for mutations to occur. + */ +class GrowNearBerryStrictMutation extends GrowNearMutation { + constructor(mutationChance, mutatedBerry, berryReqs, options) { + super(mutationChance, mutatedBerry, options); + this.berryReqs = berryReqs; + } + /** + * Determines if the plots near fit the requirements + * @param plots The list of nearby plots + */ + nearPlotsFitRequirements(plots) { + const currentReqs = {}; + plots.forEach((idx) => { + const plot = App.game.farming.plotList[idx]; + if (!plot.isUnlocked) { + return; + } + if (plot.isEmpty()) { + return; + } + if (plot.stage() !== PlotStage.Berry) { + return; + } + if (!currentReqs[plot.berry]) { + currentReqs[plot.berry] = 1; + } + else { + currentReqs[plot.berry] += 1; + } + }); + return GameHelper.shallowEqual(this.berryReqs, currentReqs); + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + for (const berry of Object.keys(this.berryReqs)) { + if (!App.game.farming.unlockedBerries[berry]()) { + return false; + } + } + return super.unlocked; + } +} +/// +/** + * Mutation that requires specific flavored Berry plants near an empty plot + * Will check the surround plots for the flavors of the nearby Berry plants. Must be in the range of the flavorReqs + */ +class GrowNearFlavorMutation extends GrowNearMutation { + /** + * Constructor for a FlavorMutation + * @param mutationChance The chance of the mutation occuring + * @param mutatedBerry The mutated BerryType + * @param flavorReqs The flavor requirements for the mutation to occur + * @param options The additional MutationOptions + */ + constructor(mutationChance, mutatedBerry, flavorReqs, options) { + super(mutationChance, mutatedBerry, options); + this.flavorRatio = [0.5, 0.75, 1]; // Determines how much flavor a Berry plant has before fully mature. + this.flavorReqs = flavorReqs; + } + /** + * Determines if the plots near fit the requirements + * @param plots The list of nearby plots + */ + nearPlotsFitRequirements(plots) { + const nearFlavors = [0, 0, 0, 0, 0]; + plots.forEach(idx => { + const plot = App.game.farming.plotList[idx]; + if (!plot.isUnlocked) { + return; + } + if (plot.isEmpty()) { + return; + } + if (plot.stage() < PlotStage.Taller) { + return; + } + const berryFlavors = App.game.farming.berryData[plot.berry].flavors.map(x => x.value * this.flavorRatio[plot.stage() - 2]); + for (let j = 0; j < 5; j++) { + nearFlavors[j] += berryFlavors[j]; + } + }); + return this.flavorReqs.every((value, idx) => value[0] <= nearFlavors[idx] && nearFlavors[idx] <= value[1]); + } + /** + * Handles getting the mutation chance. + * Will decrease the mutation chance if the mutatedBerry already exists around this one. + * @param idx The plot index + */ + mutationChance(idx) { + const sameBerries = Plot.findNearPlots(idx).filter(plotIndex => { + return App.game.farming.plotList[plotIndex].berry === this.mutatedBerry; + }).length; + return super.mutationChance(idx) * Math.pow(4, -sameBerries); + } +} +/// +/** + * Mutation that applies to a current Berry plant based on the active state of Oak Items + */ +class OakMutation extends EvolveMutation { + constructor(mutationChance, mutatedBerry, originalBerry, oakItem, options) { + super(mutationChance, mutatedBerry, originalBerry, options); + this.oakItem = oakItem; + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const plots = super.getMutationPlots(); + return plots.filter((idx) => { + const plot = App.game.farming.plotList[idx]; + return this.plotFitRequirements(plot, idx); + }); + } + /** + * Checks whether a plot fits the requirements for a mutation + * @param plot The Plot + * @param idx The Plot index + */ + plotFitRequirements(plot, idx) { + if (!App.game.oakItems.isActive(this.oakItem)) { + return false; + } + if (this.originalBerry && plot.berry !== this.originalBerry) { + return false; + } + return true; + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + // Check Oak Item unlock status + if (!App.game.oakItems.isUnlocked(this.oakItem)) { + return false; + } + return super.unlocked; + } + /** + * Handles getting the hint for this mutation for the Kanto Berry Master + */ + get hint() { + if (super.hint) { + return super.hint; + } + return `I've heard that using the ${App.game.oakItems.itemList[this.oakItem].displayName} can cause ${BerryType[this.originalBerry]} Berries to change!`; + } +} +/// +/** + * Parasite Mutation + */ +class ParasiteMutation extends EvolveNearBerryMutation { + constructor(mutationChance, berry) { + super(mutationChance, berry, undefined, [berry], { showHint: false }); + } + /** + * Determines which plots can mutate. Excludes the parasite berry + * @return The plot indices that can mutate + */ + getMutationPlots() { + const plots = super.getMutationPlots(); + return plots.filter((idx) => { + return App.game.farming.plotList[idx].berry !== this.mutatedBerry; + }); + } +} +/// +/** + * Mutation for the Petaya Berry. Requires all 18 typed Berries to be in the field. + */ +class PetayaMutation extends GrowMutation { + constructor(mutationChance, options) { + super(mutationChance, BerryType.Petaya, options); + } + /** + * Determines which plots can mutate + * @return The plot indices that can mutate + */ + getMutationPlots() { + const emptyPlots = super.getMutationPlots(); + const fieldPlots = {}; + App.game.farming.plotList.forEach((plot, idx) => { + if (!plot.isUnlocked) { + return; + } + if (plot.isEmpty()) { + return; + } + if (plot.stage() !== PlotStage.Berry) { + return; + } + if (!fieldPlots[plot.berry]) { + fieldPlots[plot.berry] = 1; + } + else { + fieldPlots[plot.berry] += 1; + } + }); + const requiredBerries = Farming.getGeneration(3); + if (requiredBerries.every(berry => fieldPlots[berry])) { + return emptyPlots; + } + return []; + } + /** + * Determines whether the player can even cause this mutation + */ + get unlocked() { + // Check for Berry requirements + const requiredBerries = Farming.getGeneration(3); + if (!requiredBerries.every(berry => App.game.farming.unlockedBerries[berry]())) { + return false; + } + return super.unlocked; + } + /** + * Handles getting the hint for this mutation for the Kanto Berry Master + */ + get hint() { + if (super.hint) { + return super.hint; + } + return 'Legends tell of a mysterious Berry that only appears while surrounded by all types of Berries.'; + } +} +class TownContent { + addParent(parent) { + this.parent = parent; + } + areaStatus() { + return this.isUnlocked() ? areaStatus.completed : areaStatus.locked; + } + isUnlocked() { + return this.requirements.every(requirement => requirement.isCompleted()); + } + clears() { + return undefined; + } + isVisible() { + if (this.requirements.some(r => r instanceof DevelopmentRequirement || (r instanceof MultiRequirement && r.requirements.some(r2 => r2 instanceof DevelopmentRequirement)))) { + return this.isUnlocked(); + } + return true; + } + protectedOnclick() { + var _a; + if (!this.isVisible()) { + return; + } + const reqsList = []; + (_a = this.requirements) === null || _a === void 0 ? void 0 : _a.forEach(requirement => { + if (!requirement.isCompleted()) { + reqsList.push(requirement.hint()); + } + }); + if (reqsList.length) { + Notifier.notify({ + message: `You don't have access yet.\n${reqsList.join('\n')}`, + type: NotificationConstants.NotificationOption.warning, + }); + } + else { + this.onclick(); + } + } + constructor(requirements = []) { + this.tooltip = undefined; + this.requirements = requirements; + } +} +class DockTownContent extends TownContent { + cssClass() { + return 'btn btn-info'; + } + isVisible() { + return player.highestRegion() > 0; + } + onclick() { + MapHelper.openShipModal(); + } + text() { + return 'Dock'; + } +} +class BattleFrontierTownContent extends TownContent { + cssClass() { + return 'btn btn-primary'; + } + onclick() { + App.game.battleFrontier.enter(); + } + text() { + return 'Enter Battle Frontier'; + } +} +class NextRegionTownContent extends TownContent { + cssClass() { + return 'btn btn-warning'; + } + isVisible() { + return MapHelper.ableToTravel(); + } + onclick() { + $('#nextRegionModal').modal('show'); + } + text() { + return `Travel to ${GameConstants.camelCaseToString(GameConstants.Region[player.highestRegion() + 1])}`; + } +} +class MoveToDungeon extends TownContent { + constructor(dungeon, visibleRequirement = undefined) { + super([]); + this.dungeon = dungeon; + this.visibleRequirement = visibleRequirement; + } + cssClass() { + return 'btn btn-secondary'; + } + text() { + return this.dungeon.name; + } + isVisible() { + var _a, _b; + return (_b = (_a = this.visibleRequirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true; + } + onclick() { + MapHelper.moveToTown(this.dungeon.name); + } + isUnlocked() { + return TownList[this.dungeon.name].isUnlocked(); + } + areaStatus() { + return areaStatus[MapHelper.calculateTownCssClass(this.dungeon.name)]; + } + clears() { + if (!QuestLineHelper.isQuestLineCompleted('Tutorial Quests')) { + return undefined; + } + return App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(this.dungeon.name)](); + } +} +class MoveToTown extends TownContent { + constructor(townName, visibleRequirement = undefined, includeAreaStatus = true) { + super([]); + this.townName = townName; + this.visibleRequirement = visibleRequirement; + this.includeAreaStatus = includeAreaStatus; + } + cssClass() { + return 'btn btn-secondary'; + } + text() { + return this.townName; + } + isVisible() { + var _a, _b; + return (_b = (_a = this.visibleRequirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true; + } + onclick() { + MapHelper.moveToTown(this.townName); + } + isUnlocked() { + return TownList[this.townName].isUnlocked(); + } + areaStatus() { + if (this.includeAreaStatus) { + return areaStatus[MapHelper.calculateTownCssClass(this.townName)]; + } + else { + return areaStatus.completed; + } + } +} +class AccessGym extends TownContent { + // only use for gyms that disappear from a town + constructor(gym, requirement) { + super([]); + this.gym = gym; + this.requirement = requirement; + } + cssClass() { + return this.gym.cssClass(); + } + text() { + return this.gym.buttonText; + } + isVisible() { + var _a, _b; + return (_b = (_a = this.requirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true; + } + onclick() { + GymRunner.startGym(this.gym); + } +} +class WeatherAppTownContent extends TownContent { + cssClass() { + return 'btn btn-secondary'; + } + isVisible() { + return WeatherApp.isUnlocked(); + } + onclick() { + WeatherApp.openWeatherAppModal(); + } + text() { + return 'Open the Castform App'; + } +} +/// +/// +/// +/// +/// +/// +/** + * Gym class. + */ +class Gym extends TownContent { + cssClass() { + if (App.game.badgeCase.hasBadge(this.badgeReward)) { + return 'btn btn-success'; + } + return 'btn btn-secondary'; + } + text() { + return this.buttonText; + } + isVisible() { + var _a, _b, _c; + if ((_a = this.optionalArgs) === null || _a === void 0 ? void 0 : _a.hideUntilUnlocked) { + return this.isUnlocked(); + } + else if ((_b = this.optionalArgs) === null || _b === void 0 ? void 0 : _b.visibleRequirement) { + return (_c = this.optionalArgs.visibleRequirement) === null || _c === void 0 ? void 0 : _c.isCompleted(); + } + else { + return super.isVisible(); + } + } + onclick() { + GymRunner.startGym(this); + } + areaStatus() { + if (!this.isUnlocked()) { + return areaStatus.locked; + } + else if (!App.game.badgeCase.hasBadge(this.badgeReward)) { + return areaStatus.incomplete; + } + else if (this.isThereQuestAtLocation()) { + return areaStatus.questAtLocation; + } + else if (!this.isAchievementsComplete()) { + return areaStatus.missingAchievement; + } + return areaStatus.completed; + } + clears() { + return App.game.statistics.gymsDefeated[GameConstants.getGymIndex(this.town)](); + } + constructor(leaderName, town, pokemons, badgeReward, moneyReward, defeatMessage, requirements = [], rewardFunction = () => { }, { quest = true, achievement = true, champion = false, } = {}, optionalArgs = {}) { + super(requirements); + this.leaderName = leaderName; + this.pokemons = pokemons; + this.badgeReward = badgeReward; + this.moneyReward = moneyReward; + this.defeatMessage = defeatMessage; + this.rewardFunction = rewardFunction; + this.optionalArgs = optionalArgs; + this.tooltip = 'Battle Gym Leaders to earn badges'; + this.flags = { + quest: true, + achievement: true, + champion: false, + }; + this.town = town; + this.flags.quest = quest; + this.flags.achievement = achievement; + this.flags.champion = champion; + if (optionalArgs.displayName) { + this.buttonText = optionalArgs.displayName; + } + else if (!town.includes('Elite') && !town.includes('Champion') && !town.includes('Supreme')) { + this.buttonText = `${leaderName}'s Gym`; + } + else { + this.buttonText = town; + } + } + isAchievementsComplete() { + const gymIndex = GameConstants.getGymIndex(this.town); + return AchievementHandler.achievementList.every(achievement => { + return !(achievement.property instanceof ClearGymRequirement && achievement.property.gymIndex === gymIndex && !achievement.isCompleted()); + }); + } + isThereQuestAtLocation() { + return App.game.quests.currentQuests().some(q => { + return q instanceof DefeatGymQuest && q.gymTown == this.town; + }); + } + static getLeaderByBadge(badge) { + for (const item in GymList) { + const gym = GymList[item]; + if (BadgeEnums[gym.badgeReward] == BadgeEnums[BadgeEnums[badge]]) { + return gym.leaderName; + } + } + return 'Brock'; + } + firstWinReward() { + // Give the player this gyms badge + App.game.badgeCase.gainBadge(this.badgeReward); + // Show the badge modal + $('#receiveBadgeModal').modal('show'); + // Run the first time reward function + this.rewardFunction(); + } + autoRestartReward() { + const [modifier] = GameConstants.GymAutoRepeatRewardTiers.find(([, threshold]) => this.clears() >= threshold); + return this.moneyReward * modifier; + } + get imagePath() { + var _a; + return `assets/images/npcs/${(_a = this.imageName) !== null && _a !== void 0 ? _a : this.leaderName}.png`; + } + getPokemonList() { + return this.pokemons.filter((p) => p.requirements.every((r => r.isCompleted()))); + } + get imageName() { + return this.optionalArgs.imageName; + } + get displayName() { + return this.optionalArgs.displayName; + } + get autoRestartTooltip() { + var _a; + let tooltip = 'Auto Restart Gym
    '; + const clears = (_a = this.clears()) !== null && _a !== void 0 ? _a : 0; + const cost = clears >= 100 ? 0 : this.moneyReward * 2; + if (cost === 0) { + tooltip += 'Cost: Free!
    '; + } + else { + tooltip += `Cost: ${cost.toLocaleString('en-US')} per battle
    `; + } + tooltip += '
    10 Clears - Unlock auto-gym
    '; + tooltip += `100 Clears - Free auto-gym`; + GameConstants.GymAutoRepeatRewardTiers.slice(0, -1).reverse().forEach(([modifier, threshold]) => { + tooltip += `
    ${threshold.toLocaleString()} + Clears - ${modifier.toLocaleString('en-US', { style: 'percent' })} reward`; + }); + if (clears < 250) { + tooltip += '

    You will not receive Pokédollars for clearing the gym.'; + } + return tooltip; + } +} +/// +class GymBattle extends Battle { + static pokemonAttack() { + if (GymRunner.running()) { + super.pokemonAttack(); + } + } + static clickAttack() { + if (GymRunner.running()) { + super.clickAttack(); + } + } + /** + * Award the player with exp, and go to the next pokemon + */ + static defeatPokemon() { + this.enemyPokemon().defeat(true); + // Make gym "route" regionless + App.game.breeding.progressEggsBattle(this.gym.badgeReward * 3 + 1, GameConstants.Region.none); + this.index(this.index() + 1); + if (this.index() >= this.gym.getPokemonList().length) { + GymRunner.gymWon(this.gym); + } + else { + this.generateNewEnemy(); + } + player.lowerItemMultipliers(MultiplierDecreaser.Battle); + } + /** + * Reset the counter. + */ + static generateNewEnemy() { + this.counter = 0; + this.enemyPokemon(PokemonFactory.generateGymPokemon(this.gym, this.index())); + } +} +GymBattle.index = ko.observable(0); +GymBattle.totalPokemons = ko.observable(0); +GymBattle.pokemonsDefeatedComputable = ko.pureComputed(() => { + return GymBattle.index(); +}); +GymBattle.pokemonsUndefeatedComputable = ko.pureComputed(() => { + return GymBattle.totalPokemons() - GymBattle.index(); +}); +const GymList = {}; +// Kanto Gyms +GymList['Pewter City'] = new Gym('Brock', 'Pewter City', [ + new GymPokemon('Geodude', 693, 12), + new GymPokemon('Onix', 1399, 14), +], BadgeEnums.Boulder, 250, 'I took you for granted, and so I lost. As proof of your victory, I confer on you this... the official Pokémon League BoulderBadge.', [new RouteKillRequirement(10, GameConstants.Region.kanto, 2)]); +GymList['Cerulean City'] = new Gym('Misty', 'Cerulean City', [ + new GymPokemon('Staryu', 4000, 18), + new GymPokemon('Starmie', 6800, 21), +], BadgeEnums.Cascade, 500, 'Wow! You\'re too much, all right! You can have the CascadeBadge to show that you beat me.', [new RouteKillRequirement(10, GameConstants.Region.kanto, 4)], () => { + App.game.quests.getQuestLine('Team Rocket').beginQuest(0, undefined, true); +}); +GymList['Vermilion City'] = new Gym('Lt. Surge', 'Vermilion City', [ + new GymPokemon('Voltorb', 10780, 21), + new GymPokemon('Pikachu', 13540, 18), + new GymPokemon('Raichu', 15675, 24), +], BadgeEnums.Thunder, 1000, 'Now that\'s a shocker! You\'re the real deal, kid! Fine, then, take the ThunderBadge!', [ + new TemporaryBattleRequirement('Blue 3'), + new GymBadgeRequirement(BadgeEnums.Cascade), +]); +GymList['Celadon City'] = new Gym('Erika', 'Celadon City', [ + new GymPokemon('Victreebel', 38810, 29), + new GymPokemon('Tangela', 30340, 24), + new GymPokemon('Vileplume', 36400, 29), +], BadgeEnums.Rainbow, 1500, 'Oh! I concede defeat. You are remarkably strong. I must confer on you the RainbowBadge.', [new RouteKillRequirement(10, GameConstants.Region.kanto, 7)]); +GymList['Saffron City'] = new Gym('Sabrina', 'Saffron City', [ + new GymPokemon('Kadabra', 23040, 38), + new GymPokemon('Mr. Mime', 25600, 37), + new GymPokemon('Venomoth', 28400, 38), + new GymPokemon('Alakazam', 35380, 43), +], BadgeEnums.Marsh, 2500, 'This loss shocks me! But a loss is a loss. I admit I didn\'t work hard enough to win. You earned the MarshBadge.', [new QuestLineStepCompletedRequirement('Team Rocket', 3)]); +GymList['Fuchsia City'] = new Gym('Koga', 'Fuchsia City', [ + new GymPokemon('Koffing', 30780, 37), + new GymPokemon('Muk', 32460, 39), + new GymPokemon('Koffing', 36430, 37), + new GymPokemon('Weezing', 37430, 43), +], BadgeEnums.Soul, 3500, 'Humph! You have proven your worth! Here! Take the Soul Badge!', [ + new OneFromManyRequirement([ + new RouteKillRequirement(10, GameConstants.Region.kanto, 18), + new RouteKillRequirement(10, GameConstants.Region.kanto, 15), + ]), +], () => { + App.game.keyItems.gainKeyItem(KeyItemType.Safari_ticket, true); + App.game.quests.getQuestLine('Mining Expedition').beginQuest(0, undefined, true); +}); +GymList['Cinnabar Island'] = new Gym('Blaine', 'Cinnabar Island', [ + new GymPokemon('Growlithe', 37430, 42), + new GymPokemon('Ponyta', 42340, 40), + new GymPokemon('Rapidash', 45230, 42), + new GymPokemon('Arcanine', 50290, 47), +], BadgeEnums.Volcano, 5000, 'I have burned down to nothing! Not even ashes remain! You have earned the VolcanoBadge.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Pokémon Mansion'))], () => { + App.game.quests.getQuestLine('Bill\'s Errand').beginQuest(0, undefined, true); +}); +GymList['Viridian City'] = new Gym('Giovanni', 'Viridian City', [ + new GymPokemon('Rhyhorn', 45230, 45), + new GymPokemon('Dugtrio', 47530, 42), + new GymPokemon('Nidoqueen', 48740, 44), + new GymPokemon('Nidoking', 48350, 45), + new GymPokemon('Rhyhorn', 55000, 50), +], BadgeEnums.Earth, 6000, 'Ha! That was a truly intense fight. You have won! As proof, here is the Earth Badge!', [ + new GymBadgeRequirement(BadgeEnums.Thunder), + new GymBadgeRequirement(BadgeEnums.Rainbow), + new GymBadgeRequirement(BadgeEnums.Marsh), + new QuestLineCompletedRequirement('Bill\'s Errand'), +], () => { + App.game.keyItems.gainKeyItem(KeyItemType.Gem_case, true); + App.game.quests.getQuestLine('Persons of Interest').beginQuest(0, undefined, true); +}, undefined, { imageName: 'Team Rocket Boss Giovanni' }); +// Kanto Elite 4 +GymList['Elite Lorelei'] = new Gym('Lorelei', 'Elite Lorelei', [ + new GymPokemon('Dewgong', 45330, 52), + new GymPokemon('Cloyster', 48300, 51), + new GymPokemon('Slowbro', 52000, 52), + new GymPokemon('Jynx', 57000, 54), + new GymPokemon('Lapras', 60250, 54), +], BadgeEnums.Elite_Lorelei, 7500, '...Things shouldn\'t be this way!', [new GymBadgeRequirement(BadgeEnums.Earth)], undefined, undefined, { battleBackground: 'Ice' }); +GymList['Elite Bruno'] = new Gym('Bruno', 'Elite Bruno', [ + new GymPokemon('Onix', 45330, 51), + new GymPokemon('Hitmonchan', 48300, 53), + new GymPokemon('Hitmonlee', 52000, 53), + new GymPokemon('Onix', 57000, 54), + new GymPokemon('Machamp', 60250, 56), +], BadgeEnums.Elite_Bruno, 7500, 'Why? How could I lose?', [new GymBadgeRequirement(BadgeEnums.Elite_Lorelei)], undefined, undefined, { battleBackground: 'Cave' }); +GymList['Elite Agatha'] = new Gym('Agatha', 'Elite Agatha', [ + new GymPokemon('Gengar', 45330, 54), + new GymPokemon('Golbat', 48300, 54), + new GymPokemon('Haunter', 52000, 53), + new GymPokemon('Arbok', 57000, 56), + new GymPokemon('Gengar', 60250, 58), +], BadgeEnums.Elite_Agatha, 7500, 'Oh, my! You\'re something special, child!', [new GymBadgeRequirement(BadgeEnums.Elite_Bruno)], undefined, undefined, { battleBackground: 'Graveyard' }); +GymList['Elite Lance'] = new Gym('Lance', 'Elite Lance', [ + new GymPokemon('Gyarados', 48300, 56), + new GymPokemon('Dragonair', 52000, 54), + new GymPokemon('Dragonair', 57000, 54), + new GymPokemon('Aerodactyl', 60250, 58), + new GymPokemon('Dragonite', 66000, 60), +], BadgeEnums.Elite_Lance, 7500, 'That\'s it! I hate to admit it, but you are a Pokémon master!', [new GymBadgeRequirement(BadgeEnums.Elite_Agatha)], undefined, undefined, { battleBackground: 'GemCave' }); +// Kanto Champion +GymList['Champion Blue'] = new Gym('Blue', 'Champion Blue', [ + new GymPokemon('Pidgeot', 52340, 59), + new GymPokemon('Alakazam', 56320, 57), + new GymPokemon('Rhydon', 58340, 59), + new GymPokemon('Exeggutor', 57520, 59, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Gyarados', 65340, 61, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Charizard', 70000, 63, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Arcanine', 57520, 59, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Exeggutor', 65340, 61, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Blastoise', 70000, 63, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Gyarados', 57520, 59, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Arcanine', 65340, 61, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Venusaur', 70000, 63, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Gyarados', 57520, 59, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), + new GymPokemon('Arcanine', 65340, 61, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), + new GymPokemon('Venusaur', 70000, 63, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), +], BadgeEnums.Elite_KantoChampion, 10000, 'NO! That can\'t be! You beat me at my best! After all that work to become the League Champ? My reign is over already? It\'s not fair!', [new GymBadgeRequirement(BadgeEnums.Elite_Lance)], () => { }, { champion: true }, { battleBackground: 'GemCave' }); +//Johto Gyms +GymList['Violet City'] = new Gym('Falkner', 'Violet City', [ + new GymPokemon('Pidgey', 108000, 7), + new GymPokemon('Pidgeotto', 112000, 9), +], BadgeEnums.Zephyr, 250, '...Darn! My Dad\'s cherished bird Pokémon... All right. Take this. It\'s the official Pokémon League Zephyr Badge.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Sprout Tower'))]); +GymList['Azalea Town'] = new Gym('Bugsy', 'Azalea Town', [ + new GymPokemon('Metapod', 103000, 14), + new GymPokemon('Kakuna', 101500, 14), + new GymPokemon('Scyther', 119000, 16), +], BadgeEnums.Hive, 500, 'Whoa, amazing! You\'re an expert on Pokémon! My research isn\'t complete yet. Ok, you win. Take this Badge.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Slowpoke Well'))]); +GymList['Goldenrod City'] = new Gym('Whitney', 'Goldenrod City', [ + new GymPokemon('Clefairy', 130000, 18), + new GymPokemon('Miltank', 170000, 20), +], BadgeEnums.Plain, 1000, '...Sniff... What? What do you want? A badge? Oh, right. I forgot. Here\'s the Plain Badge.', [new RouteKillRequirement(10, GameConstants.Region.johto, 34)]); +GymList['Ecruteak City'] = new Gym('Morty', 'Ecruteak City', [ + new GymPokemon('Gastly', 127000, 21), + new GymPokemon('Haunter', 128000, 21), + new GymPokemon('Gengar', 132000, 25), + new GymPokemon('Haunter', 130000, 23), +], BadgeEnums.Fog, 1500, 'I\'m not good enough yet... All right. This Badge is yours.', [new GymBadgeRequirement(BadgeEnums.Plain)], () => { + App.game.quests.getQuestLine('Team Rocket Again').beginQuest(0, undefined, true); + App.game.quests.getQuestLine('The Sick Ampharos').beginQuest(0, undefined, true); +}); +GymList['Cianwood City'] = new Gym('Chuck', 'Cianwood City', [ + new GymPokemon('Primeape', 177000, 27), + new GymPokemon('Poliwrath', 183000, 30), +], BadgeEnums.Storm, 2500, 'Wha? Huh? I lost? How about that! You\'re worthy of the Storm Badge!', [new QuestLineStepCompletedRequirement('The Sick Ampharos', 2)]); +GymList['Olivine City'] = new Gym('Jasmine', 'Olivine City', [ + new GymPokemon('Magnemite', 177000, 30), + new GymPokemon('Magnemite', 178000, 30), + new GymPokemon('Steelix', 182000, 35), +], BadgeEnums.Mineral, 3500, '...You are a better trainer than me, in both skill and kindness. In accordance with League rules, I confer upon you this Badge.', [new QuestLineCompletedRequirement('The Sick Ampharos')]); +GymList['Mahogany Town'] = new Gym('Pryce', 'Mahogany Town', [ + new GymPokemon('Seel', 190000, 27), + new GymPokemon('Dewgong', 192500, 29), + new GymPokemon('Piloswine', 196000, 31), +], BadgeEnums.Glacier, 4000, 'Ah, I am impressed by your prowess. With your strong will, I know you will overcome all life\'s obstacles. You are worthy of this Badge!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Team Rocket\'s Hideout'))]); +GymList['Blackthorn City'] = new Gym('Clair', 'Blackthorn City', [ + new GymPokemon('Dragonair', 205000, 37), + new GymPokemon('Dragonair', 205000, 37), + new GymPokemon('Dragonair', 218000, 37), + new GymPokemon('Kingdra', 220000, 40), +], BadgeEnums.Rising, 5000, 'Here, this is the Rising Badge... Hurry up! Take it!', [new GymBadgeRequirement(BadgeEnums.Glacier)]); +//Johto Elite 4 +GymList['Elite Will'] = new Gym('Will', 'Elite Will', [ + new GymPokemon('Xatu', 245330, 40), + new GymPokemon('Exeggutor', 248300, 41), + new GymPokemon('Slowbro', 252000, 41), + new GymPokemon('Jynx', 257000, 41), + new GymPokemon('Xatu', 260250, 42), +], BadgeEnums.Elite_Will, 7500, 'Even though I was defeated, I won\'t change my course. I will continue battling until I stand above all Trainers! Now move on and experience the true ferocity of the Elite Four.', [new TemporaryBattleRequirement('Silver 5')]); +GymList['Elite Koga'] = new Gym('Koga2', 'Elite Koga', [ + new GymPokemon('Ariados', 245330, 40), + new GymPokemon('Venomoth', 248300, 41), + new GymPokemon('Forretress', 252000, 43), + new GymPokemon('Muk', 257000, 42), + new GymPokemon('Crobat', 260250, 44), +], BadgeEnums.Elite_Koga, 7500, 'I subjected you to everything I could muster. But my efforts failed. I must hone my skills. Go on to the next room, and put your abilities to the test!', [new GymBadgeRequirement(BadgeEnums.Elite_Will)], undefined, undefined, { displayName: 'Elite Koga' }); +GymList['Elite Bruno2'] = new Gym('Bruno2', 'Elite Bruno2', [ + new GymPokemon('Hitmontop', 245330, 42), + new GymPokemon('Hitmonlee', 248300, 42), + new GymPokemon('Hitmonchan', 252000, 42), + new GymPokemon('Onix', 257000, 43), + new GymPokemon('Machamp', 260250, 46), +], BadgeEnums.Elite_Bruno2, 7500, 'Having lost, I have no right to say anything… Go face your next challenge!', [new GymBadgeRequirement(BadgeEnums.Elite_Koga)], undefined, undefined, { displayName: 'Elite Bruno' }); +GymList['Elite Karen'] = new Gym('Karen', 'Elite Karen', [ + new GymPokemon('Umbreon', 248300, 42), + new GymPokemon('Vileplume', 252000, 42), + new GymPokemon('Murkrow', 257000, 44), + new GymPokemon('Gengar', 260250, 45), + new GymPokemon('Houndoom', 266000, 47), +], BadgeEnums.Elite_Karen, 7500, 'Strong Pokémon. Weak Pokémon. That is only the selfish perception of people. Truly skilled Trainers should try to win with the Pokémon they love best. I like your style. You understand what\'s important. Go on — — the Champion is waiting.', [new GymBadgeRequirement(BadgeEnums.Elite_Bruno2)]); +// Johto Champion +GymList['Champion Lance'] = new Gym('Lance2', 'Champion Lance', [ + new GymPokemon('Gyarados', 258300, 44), + new GymPokemon('Dragonite', 262000, 47), + new GymPokemon('Charizard', 264000, 46), + new GymPokemon('Aerodactyl', 260250, 46), + new GymPokemon('Dragonite', 270000, 47), + new GymPokemon('Dragonite', 270000, 50), +], BadgeEnums.Elite_JohtoChampion, 7500, '…It\'s over. But it\'s an odd feeling. I\'m not angry that I lost. In fact, I feel happy. Happy that I witnessed the rise of a great new Champion!', [new GymBadgeRequirement(BadgeEnums.Elite_Karen)], () => { }, { champion: true }); +// Hoenn Gyms +GymList['Rustboro City'] = new Gym('Roxanne', 'Rustboro City', [ + new GymPokemon('Geodude', 382900, 12), + new GymPokemon('Geodude', 382900, 12), + new GymPokemon('Nosepass', 410200, 15), +], BadgeEnums.Stone, 1000, 'So… I lost… It seems that I still have much more to learn… I understand. The Pokémon League\'s rules state that Trainers are to be given this if they defeat a Gym Leader. Please accept the official Pokémon League Stone Badge.', [new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion)]); +GymList['Dewford Town'] = new Gym('Brawly', 'Dewford Town', [ + new GymPokemon('Machop', 424000, 16), + new GymPokemon('Meditite', 424000, 16), + new GymPokemon('Makuhita', 444000, 19), +], BadgeEnums.Knuckle, 2000, 'Whoah, wow! You made a much bigger splash than I expected! You swamped me! Okay, you\'ve got me. Take this Gym Badge!', [new TemporaryBattleRequirement('May 2')]); +GymList['Mauville City'] = new Gym('Wattson', 'Mauville City', [ + new GymPokemon('Voltorb', 452000, 20), + new GymPokemon('Electrike', 448000, 20), + new GymPokemon('Magneton', 483000, 22), + new GymPokemon('Manectric', 448000, 24), +], BadgeEnums.Dynamo, 3000, 'Wahahahah! Fine, I lost! You ended up giving me a thrill! Take this Badge!', [new TemporaryBattleRequirement('Wally 1')], () => { + App.game.quests.getQuestLine('Land vs. Water').beginQuest(0, undefined, true); +}); +GymList['Lavaridge Town'] = new Gym('Flannery', 'Lavaridge Town', [ + new GymPokemon('Numel', 472000, 24), + new GymPokemon('Slugma', 472000, 24), + new GymPokemon('Camerupt', 492000, 26), + new GymPokemon('Torkoal', 524000, 29), +], BadgeEnums.Heat, 4000, 'Oh... I guess I was trying too hard... I... I\'ve only recently become a Gym Leader. I tried too hard to be someone I\'m not. I have to do things my natural way. If I don\'t, my Pokémon will be confused. Thanks for teaching me that. For that, you deserve this.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Jagged Pass'))]); +GymList['Petalburg City'] = new Gym('Norman', 'Petalburg City', [ + new GymPokemon('Spinda', 490000, 27), + new GymPokemon('Vigoroth', 530000, 27), + new GymPokemon('Linoone', 560000, 29), + new GymPokemon('Slaking', 596000, 31), +], BadgeEnums.Balance, 5000, '… I… I can\'t… I can\'t believe it. I lost to you? But, rules are rules! Here, take this.', [ + new GymBadgeRequirement(BadgeEnums.Knuckle), + new GymBadgeRequirement(BadgeEnums.Heat), +]); +GymList['Fortree City'] = new Gym('Winona', 'Fortree City', [ + new GymPokemon('Swablu', 605000, 29), + new GymPokemon('Tropius', 650000, 29), + new GymPokemon('Pelipper', 630000, 30), + new GymPokemon('Skarmory', 667000, 31), + new GymPokemon('Altaria', 669000, 33), +], BadgeEnums.Feather, 6000, 'Never before have I seen a Trainer command Pokémon with more grace than I... In recognition of your prowess, I present to you this Gym Badge.', [new TemporaryBattleRequirement('Kecleon 1')]); +GymList['Mossdeep City'] = new Gym('Tate & Liza', 'Mossdeep City', [ + new GymPokemon('Claydol', 702000, 41), + new GymPokemon('Xatu', 703000, 41), + new GymPokemon('Lunatone', 702000, 42), + new GymPokemon('Solrock', 703000, 42), +], BadgeEnums.Mind, 8000, 'What? Our combination... was shattered! It can\'t be helped. You\'ve won... So, in recognition, take this Gym Badge.', [new RouteKillRequirement(10, GameConstants.Region.hoenn, 125)]); +GymList['Sootopolis City'] = new Gym('Juan', 'Sootopolis City', [ + new GymPokemon('Luvdisc', 798000, 41), + new GymPokemon('Whiscash', 813000, 41), + new GymPokemon('Sealeo', 823400, 43), + new GymPokemon('Crawdaunt', 842000, 43), + new GymPokemon('Kingdra', 865000, 46), +], BadgeEnums.Rain, 10000, 'Ahahaha, excellent! Very well, you are the winner. From you, I sense the brilliant shine of skill that will overcome all. However, compared with me or even Wallace, you are lacking in elegance. Perhaps I should make you a loan of my outfit? ... Hahaha, I merely jest! Rather than my clothes, I shall reward you with this, the Rain Badge.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Sky Pillar'))]); +// Hoenn Elite 4 +GymList['Elite Sidney'] = new Gym('Sidney', 'Elite Sidney', [ + new GymPokemon('Mightyena', 972000, 46), + new GymPokemon('Shiftry', 980000, 48), + new GymPokemon('Cacturne', 1002000, 46), + new GymPokemon('Crawdaunt', 1015000, 48), + new GymPokemon('Absol', 1020000, 49), +], BadgeEnums.Elite_Sidney, 15000, 'Well, listen to what this loser has to say. You\'ve got what it takes to go far. Now, go on to the next room and enjoy your next battle!', [ + new GymBadgeRequirement(BadgeEnums.Feather), + new TemporaryBattleRequirement('Wally 2'), +]); +GymList['Elite Phoebe'] = new Gym('Phoebe', 'Elite Phoebe', [ + new GymPokemon('Dusclops', 1036700, 48), + new GymPokemon('Banette', 1038000, 49), + new GymPokemon('Sableye', 1052000, 50), + new GymPokemon('Banette', 1038000, 49), + new GymPokemon('Dusclops', 1063000, 51), +], BadgeEnums.Elite_Phoebe, 15000, 'There\'s a definite bond between you and your Pokémon, too. I didn\'t recognize it, so it\'s only natural that I lost. Yup, I\'d like to see how far your bond will carry you. Go ahead, move to the next room.', [new GymBadgeRequirement(BadgeEnums.Elite_Sidney)]); +GymList['Elite Glacia'] = new Gym('Glacia', 'Elite Glacia', [ + new GymPokemon('Sealeo', 1082000, 50), + new GymPokemon('Glalie', 1072000, 50), + new GymPokemon('Sealeo', 1086000, 52), + new GymPokemon('Glalie', 1076000, 52), + new GymPokemon('Walrein', 1100000, 53), +], BadgeEnums.Elite_Glacia, 15000, 'Advance to the next room. And there, confirm the truly fearsome side of the Pokémon League.', [new GymBadgeRequirement(BadgeEnums.Elite_Phoebe)]); +GymList['Elite Drake'] = new Gym('Drake', 'Elite Drake', [ + new GymPokemon('Shelgon', 1064000, 52), + new GymPokemon('Altaria', 1072000, 54), + new GymPokemon('Kingdra', 1076000, 53), + new GymPokemon('Flygon', 1076000, 53), + new GymPokemon('Salamence', 1157000, 55), +], BadgeEnums.Elite_Drake, 15000, 'You deserve every credit for coming this far as a Trainer of Pokémon. You do seem to know what is needed. Yes, what a Trainer needs is a virtuous heart. Pokémon touch the good hearts of Trainers and learn good from wrong. They touch the good hearts of Trainers and grow strong. Go! Go onwards! The Champion is waiting!', [new GymBadgeRequirement(BadgeEnums.Elite_Glacia)]); +// Hoenn Champion +GymList['Champion Wallace'] = new Gym('Wallace', 'Champion Wallace', [ + new GymPokemon('Wailord', 1202000, 57), + new GymPokemon('Tentacruel', 1164000, 55), + new GymPokemon('Ludicolo', 1184000, 56), + new GymPokemon('Whiscash', 1172000, 56), + new GymPokemon('Gyarados', 1163000, 56), + new GymPokemon('Milotic', 1182000, 58), +], BadgeEnums.Elite_HoennChampion, 16000, 'I, the Champion, fall in defeat… That was wonderful work. You were elegant, infuriatingly so. And yet it was utterly glorious! Kudos to you! You are a truly noble Pokémon Trainer!', [new GymBadgeRequirement(BadgeEnums.Elite_Drake)], () => { }, { champion: true }); +// Orange league gyms +GymList['Mikan Island'] = new Gym('Cissy', 'Mikan Island', [ + new GymPokemon('Seadra', 2307500, 24), + new GymPokemon('Blastoise', 2307500, 24), +], BadgeEnums['Coral-Eye'], 740, 'I can see why you made it so far in the Indigo League, and I bet you\'ll do pretty well in the Orange League.\n' + + 'This is the Coral-Eye Badge of the Mikan Gym, to prove that you won your match!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Tanoby Ruins'))]); +GymList['Navel Island'] = new Gym('Danny', 'Navel Island', [ + new GymPokemon('Geodude', 923000, 24), + new GymPokemon('Nidoqueen', 923000, 24), + new GymPokemon('Machoke', 923000, 24), + new GymPokemon('Scyther', 923000, 24), + new GymPokemon('Electrode', 923000, 24), +], BadgeEnums.Sea_Ruby, 740, 'You and the others were great.\nNow I\'d like to give you and your fellow challengers something you really deserve. The Sea Ruby badge. It\'s yours.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Lost Cave'))]); +GymList['Trovita Island'] = new Gym('Rudy', 'Trovita Island', [ + new GymPokemon('Electabuzz', 1538333, 24), + new GymPokemon('Exeggutor', 1538333, 24), + new GymPokemon('Starmie', 1538333, 24), +], BadgeEnums.Spike_Shell, 740, 'Nice job, guys. Here are your Spike Shell badges, guys.', [new RouteKillRequirement(10, GameConstants.Region.kanto, 41)]); +GymList['Kumquat Island'] = new Gym('Luana', 'Kumquat Island', [ + new GymPokemon('Alakazam', 2307500, 24), + new GymPokemon('Marowak', 2307500, 24), +], BadgeEnums.Jade_Star, 740, //TODO +'You did a fine job.\nAnd now, as Kumquat Island gym leader, and a member of the Orange Crew, I happily present this token of your victory.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Icefall Cave'))]); +// Orange league champion +GymList['Supreme Gym Leader Drake'] = new Gym('Supreme Gym Leader Drake', 'Supreme Gym Leader Drake', [ + new GymPokemon('Ditto', 899520, 38), + new GymPokemon('Onix', 899520, 39), + new GymPokemon('Gengar', 899520, 40), + new GymPokemon('Venusaur', 899520, 40), + new GymPokemon('Electabuzz', 899520, 41), + new GymPokemon('Dragonite', 1124400, 37), +], BadgeEnums.Elite_OrangeChampion, 4800, 'You really deserve that trophy. You\'re a great Pokémon trainer.', [ + new GymBadgeRequirement(BadgeEnums['Coral-Eye']), + new GymBadgeRequirement(BadgeEnums.Sea_Ruby), + new GymBadgeRequirement(BadgeEnums.Spike_Shell), + new GymBadgeRequirement(BadgeEnums.Jade_Star), +]); +// Orre Gyms +GymList['Cipher Admin Ein'] = new Gym('Cipher Admin Ein', 'Cipher Admin Ein', [ + new GymPokemon('Crobat', 12099520, 48), + new GymPokemon('Pelipper', 12099520, 49), + new GymPokemon('Rhydon', 12099520, 50), + new GymPokemon('Starmie', 12099520, 49), + new GymPokemon('Manectric', 12099520, 50), +], BadgeEnums.Elite_F_Disk, 10000, 'Urrrgh… What unbelievable power…', [new QuestLineCompletedRequirement('Shadows in the Desert')], undefined, undefined, { displayName: 'Challenge Ein' }); +GymList['Cipher Admin Miror B.'] = new Gym('Cipher Admin Miror B', 'Cipher Admin Miror B.', [ + new GymPokemon('Ludicolo', 11599520, 44), + new GymPokemon('Ludicolo', 11599520, 45), + new GymPokemon('Loudred', 11599520, 46), + new GymPokemon('Golduck', 11599520, 45), + new GymPokemon('Armaldo', 11599520, 43), +], BadgeEnums.Elite_L_Disk, 10000, 'I\'m an awesome dancer… But I can\'t win in battles!', [new QuestLineCompletedRequirement('Shadows in the Desert')], undefined, undefined, { displayName: 'Challenge Miror B.' }); +GymList['Cipher Admin Dakim'] = new Gym('Cipher Admin Dakim', 'Cipher Admin Dakim', [ + new GymPokemon('Claydol', 11999520, 46), + new GymPokemon('Forretress', 11999520, 45), + new GymPokemon('Flygon', 11999520, 46), + new GymPokemon('Whiscash', 11999520, 46), + new GymPokemon('Houndoom', 11999520, 47), +], BadgeEnums.Elite_R_Disk, 10000, 'This can\'t be! The mighty Dakim loses again?', [new QuestLineCompletedRequirement('Shadows in the Desert')], undefined, undefined, { displayName: 'Challenge Dakim' }); +GymList['Cipher Admin Venus'] = new Gym('Cipher Admin Venus', 'Cipher Admin Venus', [ + new GymPokemon('Bellossom', 12299520, 47), + new GymPokemon('Misdreavus', 12299520, 47), + new GymPokemon('Raichu', 12299520, 48), + new GymPokemon('Wigglytuff', 12299520, 48), + new GymPokemon('Milotic', 12299520, 48), +], BadgeEnums.Elite_U_Disk, 10000, 'I shall forget that I ever battled with you. Yes, that\'s what I\'ll do. Ohohohoh!', [new QuestLineCompletedRequirement('Shadows in the Desert')], undefined, undefined, { displayName: 'Challenge Venus' }); +GymList['Cipher Admin Lovrina'] = new Gym(//Kalos E4 difficulty, plus 10% per Orre Colosseum boss +'Cipher Admin Lovrina', 'Cipher Admin Lovrina', [ + new GymPokemon('Shuckle', 30994948, 100), + new GymPokemon('Milotic', 30994948, 100), + new GymPokemon('Wobbuffet', 30994948, 100), + new GymPokemon('Blissey', 30994948, 100), + new GymPokemon('Misdreavus', 30994948, 100), + new GymPokemon('Meganium', 30994948, 100), +], BadgeEnums.Elite_ColosseumLovrina, 100000, 'I was so impressed by your toughness! Because you are so tough, I\'ll let you be the first member in my fan club! Doesn\'t that so make your day?', [new QuestLineCompletedRequirement('Gale of Darkness')], undefined, undefined, { displayName: 'Challenge Lovrina' }); +GymList['Cipher Admin Snattle'] = new Gym('Cipher Admin Snattle', 'Cipher Admin Snattle', [ + new GymPokemon('Electrode', 34094443, 100), + new GymPokemon('Gengar', 34094443, 100), + new GymPokemon('Muk', 34094443, 100), + new GymPokemon('Glalie', 34094443, 100), + new GymPokemon('Regirock', 34094443, 100), + new GymPokemon('Regice', 34094443, 100), +], BadgeEnums.Elite_ColosseumSnattle, 70000, 'In the near future, when I become the Governor of Orre, I shall appoint you as my official secretary. Let that be a motivation for you to constantly better your skills!', [new GymBadgeRequirement(BadgeEnums.Elite_ColosseumLovrina)], undefined, undefined, { displayName: 'Challenge Snattle' }); +GymList['Cipher Admin Gorigan'] = new Gym('Cipher Admin Gorigan', 'Cipher Admin Gorigan', [ + new GymPokemon('Salamence', 37503887, 100), + new GymPokemon('Granbull', 37503887, 100), + new GymPokemon('Arcanine', 37503887, 100), + new GymPokemon('Tauros', 37503887, 100), + new GymPokemon('Hitmontop', 37503887, 100), + new GymPokemon('Gyarados', 37503887, 100), +], BadgeEnums.Elite_ColosseumGorigan, 85000, 'You\'re some kind of special! You\'re worthy of sharing my camaraderie as a friend.', [new GymBadgeRequirement(BadgeEnums.Elite_ColosseumSnattle)], undefined, undefined, { displayName: 'Challenge Gorigan' }); +GymList['Cipher Admin Ardos'] = new Gym('Cipher Admin Ardos', 'Cipher Admin Ardos', [ + new GymPokemon('Sceptile', 41254276, 100), + new GymPokemon('Charizard', 41254276, 100), + new GymPokemon('Gengar', 41254276, 100), + new GymPokemon('Aerodactyl', 41254276, 100), + new GymPokemon('Tauros', 41254276, 100), + new GymPokemon('Starmie', 41254276, 100), +], BadgeEnums.Elite_ColosseumArdos, 100000, 'In all of Orre, I\'ve never seen a Pokémon Trainer of your caliber. You appear to be the biggest threat to Cipher. To make sure my underlings watch you with caution, I give you the title “Cipher\'s Biggest Enemy.”', [new GymBadgeRequirement(BadgeEnums.Elite_ColosseumGorigan)], undefined, undefined, { displayName: 'Challenge Ardos' }); +GymList['Cipher Admin Eldes'] = new Gym('Cipher Admin Eldes', 'Cipher Admin Eldes', [ + new GymPokemon('Latios', 45379704, 100), + new GymPokemon('Latias', 45379704, 100), + new GymPokemon('Gengar', 45379704, 100), + new GymPokemon('Metagross', 45379704, 100), + new GymPokemon('Snorlax', 45379704, 100), + new GymPokemon('Tauros', 45379704, 100), +], BadgeEnums.Elite_ColosseumEldes, 128000, 'I\'m satisfied that I was able to battle to my heart\'s content. I would like to confer on you the title “Eldes\'s Top Rival.”', [new GymBadgeRequirement(BadgeEnums.Elite_ColosseumArdos)], undefined, undefined, { displayName: 'Challenge Eldes' }); +//Sinnoh Gyms +GymList['Oreburgh City'] = new Gym('Roark', 'Oreburgh City', [ + new GymPokemon('Geodude', 1338000, 12), + new GymPokemon('Onix', 1342000, 12), + new GymPokemon('Cranidos', 1342000, 14), +], BadgeEnums.Coal, 250, 'This is embarrassing... I went and lost to a Trainer who didn\'t have a single Gym Badge... But that\'s tough. You were strong, and I was weak. That\'s all there is. According to Pokémon League rules, I have to give you our Gym Badge since you\'ve beaten me, the Leader. Heres your official Pokémon League Coal Badge.', [new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion)], () => { + App.game.quests.getQuestLine('A New World').beginQuest(0, undefined, true); +}); +GymList['Eterna City'] = new Gym('Gardenia', 'Eterna City', [ + new GymPokemon('Turtwig', 1433000, 20), + new GymPokemon('Cherrim (Overcast)', 1437500, 20), + new GymPokemon('Roserade', 1439000, 22), +], BadgeEnums.Forest, 400, 'I might\'ve said it before, but you\'re really tough! Wasn\'t it hard for you to raise your Pokémon to be so good? I guess that\'s a measure of how much you love your Pokémon. In recognition of that, I proudly grant you this!"', [new GymBadgeRequirement(BadgeEnums.Coal)]); +GymList['Hearthome City'] = new Gym('Fantina', 'Hearthome City', [ + new GymPokemon('Duskull', 1450000, 24), + new GymPokemon('Haunter', 1480000, 24), + new GymPokemon('Mismagius', 1480000, 26), +], BadgeEnums.Relic, 740, 'I am dumbfounded! So very, very strong! You, your Pokémon, so strong! Your power is admirable! I shall honor it with this Gym Badge!"', [new GymBadgeRequirement(BadgeEnums.Forest)]); +GymList['Veilstone City'] = new Gym('Maylene', 'Veilstone City', [ + new GymPokemon('Meditite', 1537000, 28), + new GymPokemon('Machoke', 1538000, 29), + new GymPokemon('Lucario', 1540000, 32), +], BadgeEnums.Cobble, 1200, '...OK. You win. That was a tough loss. I learned a lot from it. Please, accept this Gym Badge.', [new GymBadgeRequirement(BadgeEnums.Relic)]); +GymList['Pastoria City'] = new Gym('Crasher Wake', 'Pastoria City', [ + new GymPokemon('Gyarados', 1687000, 33), + new GymPokemon('Quagsire', 1693000, 34), + new GymPokemon('Floatzel', 1693000, 37), +], BadgeEnums.Fen, 2500, 'It seems the undertow pulled me under... But I had a great time battling with you! You\'ve earned this!', [new TemporaryBattleRequirement('Barry 4')]); +GymList['Canalave City'] = new Gym('Byron', 'Canalave City', [ + new GymPokemon('Magneton', 1767000, 37), + new GymPokemon('Steelix', 1772000, 38), + new GymPokemon('Bastiodon', 1768000, 41), +], BadgeEnums.Mine, 4800, 'You were strong enough to take down my prized team of Pokémon. In recognition of that power, I give you this: the Mine Badge!', [new TemporaryBattleRequirement('Barry 5')]); +GymList['Snowpoint City'] = new Gym('Candice', 'Snowpoint City', [ + new GymPokemon('Sneasel', 1872500, 40), + new GymPokemon('Piloswine', 1876000, 40), + new GymPokemon('Abomasnow', 1870000, 42), + new GymPokemon('Froslass', 1870000, 44), +], BadgeEnums.Icicle, 8000, 'Wow! You\'re great! You\'ve earned my respect! I think your focus and will bowled us over totally. Oh, that\'s right! I\'m supposed to give you this!', [new GymBadgeRequirement(BadgeEnums.Mine)]); +GymList['Sunyshore City'] = new Gym('Volkner', 'Sunyshore City', [ + new GymPokemon('Jolteon', 1965000, 46), + new GymPokemon('Raichu', 1965000, 46), + new GymPokemon('Luxray', 1978000, 48), + new GymPokemon('Electivire', 1980000, 50), +], BadgeEnums.Beacon, 12000, '...Hehehe. Hahahah! ...That was the most fun I\'ve had in a battle since...I don\'t know when! It\'s also made me excited to know you and your team will keep battling to greater heights! This is your eighth Gym Badge. You\'ve earned this!', [new GymBadgeRequirement(BadgeEnums.Icicle)]); +//Sinnoh Elite 4 +GymList['Elite Aaron'] = new Gym('Aaron', 'Elite Aaron', [ + new GymPokemon('Yanmega', 2545330, 49), + new GymPokemon('Scizor', 2548300, 49), + new GymPokemon('Vespiquen', 2552000, 50), + new GymPokemon('Heracross', 2557000, 51), + new GymPokemon('Drapion', 2560250, 53), +], BadgeEnums.Elite_Aaron, 18000, 'I lost with the most beautiful and toughest of the bug Pokémon... We lost because I wasn\'t good enough... That\'s it! Back to training camp! Let\'s hear it for me! No... That was wrong... Anyway... Go on to the next room! Three Trainers are waiting for you. They are all tougher than me.', [new TemporaryBattleRequirement('Barry 6')]); +GymList['Elite Bertha'] = new Gym('Bertha', 'Elite Bertha', [ + new GymPokemon('Whiscash', 2645330, 50), + new GymPokemon('Gliscor', 2648300, 53), + new GymPokemon('Hippowdon', 2652000, 52), + new GymPokemon('Golem', 2657000, 52), + new GymPokemon('Rhyperior', 2660250, 55), +], BadgeEnums.Elite_Bertha, 18000, 'You\'re quite something, youngster. I like how you and your Pokémon earned the win by working as one. That\'s what makes you so strong. Ahahaha! I think that you can go as far as you want.', [new GymBadgeRequirement(BadgeEnums.Elite_Aaron)]); +GymList['Elite Flint'] = new Gym('Flint', 'Elite Flint', [ + new GymPokemon('Houndoom', 2845330, 52), + new GymPokemon('Flareon', 2848300, 55), + new GymPokemon('Rapidash', 2852000, 53), + new GymPokemon('Infernape', 2857000, 55), + new GymPokemon('Magmortar', 2860250, 57), +], BadgeEnums.Elite_Flint, 18000, '.........Keep going...I know your spirit burns hot. Your whole team does.', [new GymBadgeRequirement(BadgeEnums.Elite_Bertha)]); +GymList['Elite Lucian'] = new Gym('Lucian', 'Elite Lucian', [ + new GymPokemon('Mr. Mime', 3048300, 53), + new GymPokemon('Espeon', 3052000, 55), + new GymPokemon('Bronzong', 3057000, 54), + new GymPokemon('Alakazam', 3060250, 56), + new GymPokemon('Gallade', 3066000, 59), +], BadgeEnums.Elite_Lucian, 18000, 'Congratulations. You have beaten the Elite Four. However, that doesn\'t mean you\'re done with the Pokémon league. There remains the Champion. I should warn you—the Champion is far stronger than the Elite Four. Now, go on. Step through the doorway to your final battle.', [new GymBadgeRequirement(BadgeEnums.Elite_Flint)]); +// Sinnoh Champion +GymList['Champion Cynthia'] = new Gym('Cynthia', 'Champion Cynthia', [ + new GymPokemon('Spiritomb', 3458300, 58), + new GymPokemon('Roserade', 3462000, 58), + new GymPokemon('Togekiss', 3464000, 60), + new GymPokemon('Lucario', 3460250, 60), + new GymPokemon('Milotic', 3470000, 58), + new GymPokemon('Garchomp', 3570000, 62), +], BadgeEnums.Elite_SinnohChampion, 32000, 'That was excellent. Truly, an outstanding battle. You gave the support your Pokémon needed to maximize their power. And you guided them with certainty to secure victory. You have both passion and calculating coolness. Together, you and your Pokémon can overcome any challenge that may come your way. Those are the impressions I got from our battle. I\'m glad I got to take part in the crowning of Sinnoh\'s new Champion!', [new GymBadgeRequirement(BadgeEnums.Elite_Lucian)], () => { }, { champion: true }); +//Unova Gyms +GymList['Aspertia City'] = new Gym('Cheren', 'Aspertia City', [ + new GymPokemon('Patrat', 3458300, 58), + new GymPokemon('Pidove', 3462000, 58), + new GymPokemon('Lillipup', 3464000, 58), +], BadgeEnums.Basic, 500, 'That battle has made me feel really glad you were my first challenger as a Gym Leader… I give you this in honor of the strength you and your Pokémon showed!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Floccesy Ranch'))]); +GymList['Virbank City'] = new Gym('Roxie', 'Virbank City', [ + new GymPokemon('Koffing', 3658300, 58), + new GymPokemon('Grimer', 3662000, 58), + new GymPokemon('Whirlipede', 3664000, 58), +], BadgeEnums.Toxic, 800, 'Sigh! What are you doing losing, Roxie?! Well…I guess that means you\'re strong! This stinks, but I gave it everything I had, and I feel revitalized and refreshed now! Here! Proof that you beat me!', [new GymBadgeRequirement(BadgeEnums.Basic)], () => { + App.game.quests.getQuestLine('Hollow Truth and Ideals').beginQuest(0, undefined, true); +}); +GymList['Castelia City'] = new Gym('Burgh', 'Castelia City', [ + new GymPokemon('Dwebble', 3858300, 58), + new GymPokemon('Shelmet', 3862000, 58), + new GymPokemon('Karrablast', 3964000, 58), + new GymPokemon('Leavanny', 4064000, 58), +], BadgeEnums.Insect, 1500, 'Oh hoo… You are very strong indeed! I guess it\'s no surprise I lost. Here! Take this Insect Badge! I think it\'ll suit you!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Castelia Sewers'))]); +GymList['Nimbasa City'] = new Gym('Elesa', 'Nimbasa City', [ + new GymPokemon('Emolga', 4258300, 58), + new GymPokemon('Flaaffy', 4262000, 58), + new GymPokemon('Joltik', 4464000, 58), + new GymPokemon('Zebstrika', 4464000, 58), +], BadgeEnums.Bolt, 2600, 'Well… Now you… you\'re an even more wonderful Trainer than I expected. Your sweet fighting style swept me off my feet! Take this!', [new GymBadgeRequirement(BadgeEnums.Insect)]); +GymList['Driftveil City'] = new Gym('Clay', 'Driftveil City', [ + new GymPokemon('Krokorok', 4658300, 58), + new GymPokemon('Sandslash', 4662000, 58), + new GymPokemon('Onix', 4864000, 58), + new GymPokemon('Excadrill', 5064000, 58), +], BadgeEnums.Quake, 4800, 'Phew… You\'re really somethin\'! Li\'l whippersnapper Trainers who pack a real punch keep showin\' up one after another. Mrmph. Here! Take this!', [new GymBadgeRequirement(BadgeEnums.Bolt)]); +GymList['Mistralton City'] = new Gym('Skyla', 'Mistralton City', [ + new GymPokemon('Swoobat', 5458300, 58), + new GymPokemon('Skarmory', 6062000, 58), + new GymPokemon('Sigilyph', 5664000, 58), + new GymPokemon('Swanna', 5864000, 58), +], BadgeEnums.Jet, 7600, 'You\'re an amazing Pokémon Trainer. My Pokémon and I are happy because for the first time in quite a while--about two years, I\'d say--we could fight with our full strength. This is an official League Gym Badge. But this is just a stepping-stone.', [new GymBadgeRequirement(BadgeEnums.Quake)]); +GymList['Opelucid City'] = new Gym('Drayden', 'Opelucid City', [ + new GymPokemon('Druddigon', 6558300, 58), + new GymPokemon('Flygon', 6662000, 58), + new GymPokemon('Altaria', 6464000, 58), + new GymPokemon('Haxorus', 6964000, 58), +], BadgeEnums.Legend, 14000, 'Wonderful. I\'m grateful that we had a chance to meet and battle. It reminded me that Pokémon battles are about working with others to meet our challenges together.', [new GymBadgeRequirement(BadgeEnums.Jet)]); +GymList['Humilau City'] = new Gym('Marlon', 'Humilau City', [ + new GymPokemon('Wailord', 7458300, 58), + new GymPokemon('Mantine', 7262000, 58), + new GymPokemon('Carracosta', 7064000, 58), + new GymPokemon('Jellicent', 7464000, 58), +], BadgeEnums.Wave, 27000, 'You don\'t just look strong, you\'re strong fo\' reals! Eh, I was swept away, too! Oh yeah, yo. I was so surprised that I forgot! I gotta give this to you!', [new GymBadgeRequirement(BadgeEnums.Legend)]); +//Unova Elite 4 +GymList['Elite Shauntal'] = new Gym('Shauntal', 'Elite Shauntal', [ + new GymPokemon('Cofagrigus', 10957000, 60), + new GymPokemon('Drifblim', 10957000, 60), + new GymPokemon('Golurk', 10957000, 60), + new GymPokemon('Banette', 10957000, 60), + new GymPokemon('Chandelure', 11960250, 62), +], BadgeEnums.Elite_Shauntal, 32000, 'My Pokémon and the challenger\'s Pokémon. Everyone battled even though they were hurt... Thank you.', [new GymBadgeRequirement(BadgeEnums.Wave)]); +GymList['Elite Marshal'] = new Gym('Marshal', 'Elite Marshal', [ + new GymPokemon('Throh', 10957000, 60), + new GymPokemon('Sawk', 10957000, 60), + new GymPokemon('Mienshao', 10957000, 60), + new GymPokemon('Lucario', 10957000, 60), + new GymPokemon('Conkeldurr', 11960250, 62), +], BadgeEnums.Elite_Marshal, 32000, 'Whew! Well done! As your battles continue, aim for even greater heights!', [new GymBadgeRequirement(BadgeEnums.Wave)]); +GymList['Elite Grimsley'] = new Gym('Grimsley', 'Elite Grimsley', [ + new GymPokemon('Liepard', 10945330, 60), + new GymPokemon('Scrafty', 10948300, 60), + new GymPokemon('Krookodile', 10952000, 60), + new GymPokemon('Absol', 10957000, 60), + new GymPokemon('Bisharp', 11960250, 62), +], BadgeEnums.Elite_Grimsley, 32000, 'Whether or not you get to fight at full strength, whether or not luck smiles on you--none of that matters. Only results matter. And a loss is a loss. See, victory shines like a bright light. And right now, you and your Pokémon are shining brilliantly.', [new GymBadgeRequirement(BadgeEnums.Wave)]); +GymList['Elite Caitlin'] = new Gym('Caitlin', 'Elite Caitlin', [ + new GymPokemon('Musharna', 10957000, 60), + new GymPokemon('Sigilyph', 10957000, 60), + new GymPokemon('Reuniclus', 10957000, 60), + new GymPokemon('Gothitelle', 10957000, 60), + new GymPokemon('Metagross', 11960250, 62), +], BadgeEnums.Elite_Caitlin, 32000, 'You and your Pokémon are both excellent and elegant. To have been able to battle against such a splendid team... My Pokémon and I learned a lot! I offer you my thanks.', [new GymBadgeRequirement(BadgeEnums.Wave)]); +// Unova Champion +GymList['Champion Iris'] = new Gym('Iris', 'Champion Iris', [ + new GymPokemon('Hydreigon', 12458300, 61), + new GymPokemon('Druddigon', 12462000, 61), + new GymPokemon('Archeops', 12464000, 61), + new GymPokemon('Aggron', 12460250, 61), + new GymPokemon('Lapras', 12470000, 61), + new GymPokemon('Haxorus', 14570000, 63), +], BadgeEnums.Elite_UnovaChampion, 64000, 'I\'m upset I couldn\'t win! But you know what? More than that, I\'m happy! I mean, come on. By having a serious battle, you and your Pokémon, and me and my Pokémon, we all got to know one another better than before! Yep, we sure did! OK, let\'s go!', [ + new GymBadgeRequirement(BadgeEnums.Elite_Shauntal), + new GymBadgeRequirement(BadgeEnums.Elite_Marshal), + new GymBadgeRequirement(BadgeEnums.Elite_Grimsley), + new GymBadgeRequirement(BadgeEnums.Elite_Caitlin), +], () => { }, { champion: true }); +//Kalos Gyms +GymList['Santalune City'] = new Gym('Viola', 'Santalune City', [ + new GymPokemon('Surskit', 13737400, 10), + new GymPokemon('Vivillon (Meadow)', 17395730, 12), +], BadgeEnums.Bug, 800, 'Young Trainer, you... No, it wasn\'t you alone. You and your Pokémon have shown me a whole new depth of field! Fantastic! Just fantastic!', [new RouteKillRequirement(10, GameConstants.Region.kalos, 3)]); +GymList['Cyllage City'] = new Gym('Grant', 'Cyllage City', [ + new GymPokemon('Amaura', 16937530, 25), + new GymPokemon('Tyrunt', 19837400, 25), +], BadgeEnums.Cliff, 1700, 'There are some things that seem out of reach no matter how hard you try. However, it\'s important that you never give up--no matter the opponent or the odds. I could tell from our battle that you and your Pokémon understand that. To commemorate such an impressive show of teamwork, please accept the Cliff Badge!', [new GymBadgeRequirement(BadgeEnums.Bug)]); +GymList['Shalour City'] = new Gym('Korrina', 'Shalour City', [ + new GymPokemon('Mienfoo', 21558300, 29), + new GymPokemon('Machoke', 22062000, 28), + new GymPokemon('Hawlucha', 22362000, 32), +], BadgeEnums.Rumble, 3800, 'Oh! I have been defeated! Alack, alay! Lady Korrina gave a terrible display! This is it. I must give up my title and admit that your strength far exceeds-- Just teasing! But here\'s your Badge. Boy, you\'ll be rolling in \'em soon!', [new TemporaryBattleRequirement('Calem 1')]); +GymList['Coumarine City'] = new Gym('Ramos', 'Coumarine City', [ + new GymPokemon('Jumpluff', 25508300, 30), + new GymPokemon('Weepinbell', 27562000, 31), + new GymPokemon('Gogoat', 29502000, 34), +], BadgeEnums.Plant, 5500, 'Yeh believe in yer Pokémon... And they believe in yeh, too... Mighty oaks from acorns grow. Go on, then. Yeh\'ve earned it. Here\'s yer own Plant Badge, sprout.', [new TemporaryBattleRequirement('Calem 2')]); +GymList['Lumiose City'] = new Gym('Clemont', 'Lumiose City', [ + new GymPokemon('Emolga', 30058300, 35), + new GymPokemon('Magneton', 31062000, 35), + new GymPokemon('Heliolisk', 32062000, 37), +], BadgeEnums.Voltage, 9000, 'Oh, Bonnie... When will you learn there\'s no shame in losing? I\'m glad whenever I get to learn something new thanks to strong challengers like you here.', [new QuestLineStepCompletedRequirement('A Beautiful World', 11)]); +GymList['Laverre City'] = new Gym('Valerie', 'Laverre City', [ + new GymPokemon('Mawile', 33058300, 38), + new GymPokemon('Mr. Mime', 36462000, 38), + new GymPokemon('Sylveon', 38062000, 42), +], BadgeEnums.Fairy, 16000, 'Yes... That was a fine battle. I shall reward you for this great victory. This is the Fairy Badge. It is yours now. Its beauty is captivating, is it not? ... ... ... ... ... ... Ah... Do forgive me. I was so captivated, I forgot for a moment that it is yours.', [new GymBadgeRequirement(BadgeEnums.Voltage)]); +GymList['Anistar City'] = new Gym('Olympia', 'Anistar City', [ + new GymPokemon('Sigilyph', 40058300, 44), + new GymPokemon('Slowking', 42062000, 45), + new GymPokemon('Meowstic', 44462000, 48), +], BadgeEnums.Psychic, 30000, 'Now, the Psychic Badge. A testament to your skill. Proof of your power.', [new TemporaryBattleRequirement('Calem 4')]); +GymList['Snowbelle City'] = new Gym('Wulfric', 'Snowbelle City', [ + new GymPokemon('Abomasnow', 46558300, 56), + new GymPokemon('Cryogonal', 47654830, 55), + new GymPokemon('Avalugg', 50062000, 59), +], BadgeEnums.Iceberg, 52000, 'Impressive! Your Pokémon fought with great courage. I can tell that you\'ve trained your Pokémon well.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Pokémon Village'))]); +//Kalos Elite 4 +GymList['Elite Malva'] = new Gym('Malva', 'Elite Malva', [ + new GymPokemon('Pyroar', 46492423, 63), + new GymPokemon('Torkoal', 46791055, 63), + new GymPokemon('Chandelure', 46794200, 63), + new GymPokemon('Talonflame', 47223450, 65), +], BadgeEnums.Elite_Malva, 64000, 'What news... So a new challenger has defeated Malva of the Elite Four!', [new GymBadgeRequirement(BadgeEnums.Iceberg)]); +GymList['Elite Siebold'] = new Gym('Siebold', 'Elite Siebold', [ + new GymPokemon('Clawitzer', 46492423, 63), + new GymPokemon('Gyarados', 47094530, 63), + new GymPokemon('Starmie', 47094530, 63), + new GymPokemon('Barbaracle', 47223450, 65), +], BadgeEnums.Elite_Siebold, 64000, 'I shall store my memory of you and your Pokémon forever away within my heart.', [new GymBadgeRequirement(BadgeEnums.Iceberg)]); +GymList['Elite Wikstrom'] = new Gym('Wikstrom', 'Elite Wikstrom', [ + new GymPokemon('Klefki', 46492423, 63), + new GymPokemon('Probopass', 47094530, 63), + new GymPokemon('Scizor', 47094530, 63), + new GymPokemon('Aegislash (Shield)', 47223450, 65), +], BadgeEnums.Elite_Wikstrom, 64000, 'Glorious! The trust that you share with your honorable Pokémon surpasses even mine!', [new GymBadgeRequirement(BadgeEnums.Iceberg)]); +GymList['Elite Drasna'] = new Gym('Drasna', 'Elite Drasna', [ + new GymPokemon('Dragalge', 46492423, 63), + new GymPokemon('Druddigon', 47094530, 63), + new GymPokemon('Altaria', 47094530, 63), + new GymPokemon('Noivern', 47223450, 65), +], BadgeEnums.Elite_Drasna, 64000, 'Oh, dear me. That sure was a quick battle... I do hope you\'ll come back again sometime!', [new GymBadgeRequirement(BadgeEnums.Iceberg)]); +// Kalos Champion +GymList['Champion Diantha'] = new Gym('Diantha', 'Champion Diantha', [ + new GymPokemon('Hawlucha', 40365050, 64), + new GymPokemon('Tyrantrum', 41691225, 65), + new GymPokemon('Aurorus', 41691225, 65), + new GymPokemon('Gourgeist (Average)', 41767141, 65), + new GymPokemon('Goodra', 42027136, 66), + new GymPokemon('Mega Gardevoir', 42371780, 68), +], BadgeEnums.Elite_KalosChampion, 128000, 'Witnessing the noble spirits of you and your Pokémon in battle has really touched my heart...', [ + new GymBadgeRequirement(BadgeEnums.Elite_Malva), + new GymBadgeRequirement(BadgeEnums.Elite_Siebold), + new GymBadgeRequirement(BadgeEnums.Elite_Wikstrom), + new GymBadgeRequirement(BadgeEnums.Elite_Drasna), +], () => { }, { champion: true }); +//Alola Gyms +GymList['Iki Town'] = new Gym('Hala', 'Iki Town', [ + new GymPokemon('Machop', 62058739, 15), + new GymPokemon('Makuhita', 62058739, 15), + new GymPokemon('Crabrawler', 63069612, 16), +], BadgeEnums.Melemele_Stamp, 128000, 'The results come as no surprise to me. What a fine Trainer...and what fine Pokémon, too! Accept this Z-Crystal! It allows Trainers to share their power with their partner Pokémon!

    With this victory... you have cleared all of the trials of Melemele Island, the first of Alola\'s islands! The Melemele stamp is proof of your accomplishments.', [new MultiRequirement([new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 10), new TemporaryBattleRequirement('Hau 3')])], undefined, undefined, { displayName: 'Hala\'s Grand Trial' }); +GymList['Konikoni City'] = new Gym('Olivia', 'Konikoni City', [ + new GymPokemon('Anorith', 81530244, 27), + new GymPokemon('Lileep', 81530244, 27), + new GymPokemon('Lycanroc (Midnight)', 83170680, 28), +], BadgeEnums.Akala_Stamp, 128000, 'How lovely. Diamonds only sparkle after coal is pushed to its absolute limit. Here. The Rock-type Z-Crystal... The Rockium Z is all yours!

    I think your journey will hold many surprises. And I hope it holds many joys.', [new QuestLineStepCompletedRequirement('Symbiotic Relations', 8)], undefined, undefined, { displayName: 'Olivia\'s Grand Trial' }); +GymList['Malie City'] = new Gym('Nanu', 'Malie City', [ + new GymPokemon('Sableye', 101710296, 43), + new GymPokemon('Krokorok', 101710296, 43), + new GymPokemon('Alolan Persian', 103271750, 44), +], BadgeEnums.Ula_Ula_Stamp, 128000, 'Hmph... heh. Let me fix your team up for you. Here. This is yours.

    There. Congratulations or whatever. You\'ve officially finished your Ula\'ula trials. You\'ve got somewhere else to be, don\'t you? Try not to destroy the whole place.', [new TemporaryBattleRequirement('Gladion 2')], undefined, undefined, { displayName: 'Nanu\'s Grand Trial' }); +GymList['Exeggutor Island'] = new Gym('Hapu', 'Exeggutor Island', [ + new GymPokemon('Alolan Dugtrio', 85759429, 47, new QuestLineStepCompletedRequirement('Emissary of Light', 4, GameConstants.AchievementOption.less)), + new GymPokemon('Gastrodon (East)', 85759429, 47, new QuestLineStepCompletedRequirement('Emissary of Light', 4, GameConstants.AchievementOption.less)), + new GymPokemon('Flygon', 85759429, 47, new QuestLineStepCompletedRequirement('Emissary of Light', 4, GameConstants.AchievementOption.less)), + new GymPokemon('Mudsdale', 86977838, 48, new QuestLineStepCompletedRequirement('Emissary of Light', 4, GameConstants.AchievementOption.less)), + new GymPokemon('Golurk', 91233435, 53, new QuestLineStepCompletedRequirement('Emissary of Light', 4)), + new GymPokemon('Gastrodon (East)', 91233435, 53, new QuestLineStepCompletedRequirement('Emissary of Light', 4)), + new GymPokemon('Flygon', 91233435, 53, new QuestLineStepCompletedRequirement('Emissary of Light', 4)), + new GymPokemon('Mudsdale', 92529615, 54, new QuestLineStepCompletedRequirement('Emissary of Light', 4)), +], BadgeEnums.Poni_Stamp, 128000, 'You have succeeded in your final grand trial! That was enjoyable. Looks like I cannot beat you even when I am not holding back... Take your Ground-type Z-Crystal then... This Groundium Z is yours!

    Then go on with you two! Head straight through here and find the altar!', [new QuestLineCompletedRequirement('Emissary of Light')], undefined, undefined, { displayName: 'Hapu\'s Grand Trial' }); +//Alola Elite 4 +// modified from base HP, keep them roughly the same difficulty +// regular mons base HP: 91879987 +// ace pokemon base HP: 92856372 +GymList['Elite Molayne'] = new Gym('Molayne', 'Elite Molayne', [ + new GymPokemon('Klefki', 78883047, 56), + new GymPokemon('Bisharp', 84369882, 56), + new GymPokemon('Magnezone', 82982134, 56), + new GymPokemon('Metagross', 84733765, 56), + new GymPokemon('Alolan Dugtrio', 95774052, 57), +], BadgeEnums.Elite_Molayne, 64000, 'That Kukui... He certainly found an interesting Trainer for me to face!', [new GymBadgeRequirement(BadgeEnums.Poni_Stamp)]); +GymList['Elite Olivia'] = new Gym('Olivia', 'Elite Olivia', [ + new GymPokemon('Armaldo', 81025320, 56), + new GymPokemon('Cradily', 74381821, 56), + new GymPokemon('Gigalith', 140708180, 56), + new GymPokemon('Probopass', 85174188, 56), + new GymPokemon('Lycanroc (Midnight)', 150439372, 57), +], BadgeEnums.Elite_Olivia, 64000, 'I don\'t see the same look in your eyes that I saw when we first met on Akala Island. Have you had some experiences that you\'ll carry with you in your heart forever? Well, it\'s time for you to move on.', [new GymBadgeRequirement(BadgeEnums.Poni_Stamp)]); +GymList['Elite Acerola'] = new Gym('Acerola', 'Elite Acerola', [ + new GymPokemon('Banette', 94589428, 56), + new GymPokemon('Drifblim', 87179189, 56), + new GymPokemon('Dhelmise', 91179189, 56), + new GymPokemon('Froslass', 91691988, 56), + new GymPokemon('Palossand', 103277813, 57), +], BadgeEnums.Elite_Acerola, 64000, 'I\'m...I\'m speechless! You\'ve done me in!', [new GymBadgeRequirement(BadgeEnums.Poni_Stamp)]); +GymList['Elite Kahili'] = new Gym('Kahili', 'Elite Kahili', [ + new GymPokemon('Braviary', 86420587, 56), + new GymPokemon('Hawlucha', 109446185, 56), + new GymPokemon('Oricorio (Baile)', 103127826, 56), + new GymPokemon('Mandibuzz', 89123587, 56), + new GymPokemon('Toucannon', 91392090, 57), +], BadgeEnums.Elite_Kahili, 64000, 'It\'s frustrating to me as a member of the Elite Four, but it seems your strength is the real deal.', [new GymBadgeRequirement(BadgeEnums.Poni_Stamp)]); +// Alola Champion +GymList['Champion Hau'] = new Gym('Hau', 'Champion Hau', [ + new GymPokemon('Alolan Raichu', 91545555, 59), + new GymPokemon('Tauros', 89636471, 58), + new GymPokemon('Noivern', 89636471, 58), + new GymPokemon('Crabominable', 91545555, 59), + new GymPokemon('Flareon', 89636471, 58, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Primarina', 96725389, 60, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Vaporeon', 89636471, 58, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Decidueye', 96725389, 60, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Leafeon', 89636471, 58, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), + new GymPokemon('Incineroar', 96725389, 60, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), +], BadgeEnums.Champion_Stamp, 100000, 'We\'re gonna keep moving forward, by staying at full power all the time!', [ + new GymBadgeRequirement(BadgeEnums.Elite_Molayne), + new GymBadgeRequirement(BadgeEnums.Elite_Olivia), + new GymBadgeRequirement(BadgeEnums.Elite_Acerola), + new GymBadgeRequirement(BadgeEnums.Elite_Kahili), +], () => { }, { champion: true }); +// Magikarp Jump Gyms +GymList['Friend League'] = new Gym('Karson', // red cap +'Friend League', [new GymPokemon('Magikarp', 337500, 20)], BadgeEnums.Friend_League, 10000, 'Your Karp is really Magic!', [new RouteKillRequirement(10, GameConstants.Region.alola, 31)], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { imageName: 'Jump Champ Red' }); +GymList['Quick League'] = new Gym('Koichiro', // blue cap +'Quick League', [new GymPokemon('Magikarp Skelly', 675000, 20)], BadgeEnums.Quick_League, 10500, 'Looks like I flailed...', [new TemporaryBattleRequirement('Magikarp Jump Koylee')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { imageName: 'Jump Champ Blue' }); +GymList['Heavy League'] = new Gym('Kareign', // green cap +'Heavy League', [new GymPokemon('Magikarp Orange Two-Tone', 1687500, 20)], BadgeEnums.Heavy_League, 11000, 'Karpe Diem', [new TemporaryBattleRequirement('Magikarp Jump Karpen')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { + displayName: 'Kareign\'s Heavy League Gym', + imageName: 'Jump Champ Green', +}); +GymList['Great League'] = new Gym('Karbuck', // blue cap +'Great League', [new GymPokemon('Magikarp', 2700000, 20)], BadgeEnums.Great_League, 11500, 'Guess ya got me. Hook, line and sinker!', [new TemporaryBattleRequirement('Magikarp Jump Karpress')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { imageName: 'Jump Champ Blue' }); +GymList['Fast League'] = new Gym('Kareign 2', // green cap +'Fast League', [new GymPokemon('Magikarp Pink Dapples', 5062500, 20)], BadgeEnums.Fast_League, 12000, 'This life is not for me... I will become a Karpenter now...', [new TemporaryBattleRequirement('Magikarp Jump Karson')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { + displayName: 'Kareign\'s Fast League Gym', + imageName: 'Jump Champ Green', +}); +GymList['Luxury League'] = new Gym('Jump Champ', // red cap +'Luxury League', [new GymPokemon('Magikarp Pink Orca', 6750000, 20)], BadgeEnums.Luxury_League, 12500, 'Just wait \'til my Magikarp evolves and you will all see how great I am! Cries', [new TemporaryBattleRequirement('Magikarp Jump Karbuck')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { + displayName: 'Jump Champ\'s Luxury League Gym', + imageName: 'Jump Champ Red', +}); +GymList['Heal League'] = new Gym('Karami', // blue cap +'Heal League', [new GymPokemon('Magikarp Purple Bubbles', 10125000, 20)], BadgeEnums.Heal_League, 12500, 'I\'m getting more old than my rod...', [new TemporaryBattleRequirement('Magikarp Jump Karpella 2')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { imageName: 'Jump Champ Blue' }); +GymList['Ultra League'] = new Gym('Jump Champ 2', // red cap +'Ultra League', [new GymPokemon('Magikarp Brown Tiger', 13500000, 20)], BadgeEnums.Ultra_League, 12500, 'I knew I smelled something fishy...', [new TemporaryBattleRequirement('Magikarp Jump Koylee 2')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { + displayName: 'Jump Champ\'s Ultra League Gym', + imageName: 'Jump Champ Red', +}); +GymList['E4 League'] = new Gym('Jump Champ 3', // red cap +'E4 League', [new GymPokemon('Magikarp Orange Forehead', 20250000, 20)], BadgeEnums.E4_League, 12500, 'That jump really splashed!', [new TemporaryBattleRequirement('Magikarp Jump Karpella 3')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}, undefined, { + displayName: 'Jump Champ\'s Elite League Gym', + imageName: 'Jump Champ Red', +}); +GymList['Master League'] = new Gym('Magikarp', 'Master League', [new GymPokemon('Magikarp', 27000000, 20)], BadgeEnums.Master_League, 13000, 'Mayor Karp will be proud of you!', [new TemporaryBattleRequirement('Magikarp Jump Tykarp 2')], () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); +}); +//Galar Leaders +GymList.Turffield = new Gym('Milo', 'Turffield', [ + new GymPokemon('Gossifleur', 110892836, 19), + new GymPokemon('Eldegoss', 123214264, 20), +], BadgeEnums.Galar_Grass, 40000, 'The power of Grass has wilted... What an incredible Gym Challenger!', [new RouteKillRequirement(10, GameConstants.Region.galar, 13)]); +GymList.Hulbury = new Gym('Nessa', 'Hulbury', [ + new GymPokemon('Goldeen', 119044213, 22), + new GymPokemon('Arrokuda', 119044213, 23), + new GymPokemon('Gigantamax Drednaw', 122651613, 24), +], BadgeEnums.Galar_Water, 60000, 'I may proudly be the strongest member of this Gym, but I was totally washed away!', [new TemporaryBattleRequirement('Hop 4')]); +GymList.Motostoke = new Gym('Kabu', 'Motostoke', [ + new GymPokemon('Ninetales', 125012841, 25), + new GymPokemon('Arcanine', 125012841, 25), + new GymPokemon('Gigantamax Centiskorch', 132826144, 27), +], BadgeEnums.Galar_Fire, 60000, 'I\'m often regarded as the first real roadblock of the Gym Challenge, and yet you defeated me! Clearly, your talent surpassed my many years of experience. I still have much to learn!', [new TemporaryBattleRequirement('Marnie 1')]); +GymList['Stow-on-Side1'] = new Gym('Bea', 'Stow-on-Side1', [ + new GymPokemon('Hitmontop', 131352402, 34), + new GymPokemon('Pangoro', 131352402, 34), + new GymPokemon('Sirfetch\'d', 131352402, 35), + new GymPokemon('Gigantamax Machamp', 142075062, 36), +], BadgeEnums.Galar_Fighting, 80000, 'Your strength nearly made me want to turn and run in my bare feet.', [new TemporaryBattleRequirement('Hop 5')], +// Starts Galar story quest if both Stow-on-Side gyms are defeated. +() => { + if (App.game.badgeCase.hasBadge(BadgeEnums.Galar_Ghost)) { + App.game.quests.getQuestLine('The Darkest Day').beginQuest(0, undefined, true); + } +}, undefined, { displayName: 'Bea\'s Stow-on-Side Gym' }); +GymList['Stow-on-Side2'] = new Gym('Allister', 'Stow-on-Side2', [ + new GymPokemon('Galarian Yamask', 131352402, 34), + new GymPokemon('Mimikyu', 131352402, 34), + new GymPokemon('Cursola', 131352402, 35), + new GymPokemon('Gigantamax Gengar', 142075062, 36), +], BadgeEnums.Galar_Ghost, 80000, 'Maybe my mask... kept me from seeing just how strong you really are...', [new TemporaryBattleRequirement('Hop 5')], +// Starts Galar story quest if both Stow-on-Side gyms are defeated. +() => { + if (App.game.badgeCase.hasBadge(BadgeEnums.Galar_Fighting)) { + App.game.quests.getQuestLine('The Darkest Day').beginQuest(0, undefined, true); + } +}, undefined, { displayName: 'Allister\'s Stow-on-Side Gym' }); +GymList.Ballonlea = new Gym('Opal', 'Ballonlea', [ + new GymPokemon('Galarian Weezing', 135999999, 36), + new GymPokemon('Mawile', 135999999, 36), + new GymPokemon('Togekiss', 135999999, 37), + new GymPokemon('Gigantamax Alcremie', 147097917, 38), +], BadgeEnums.Galar_Fairy, 80000, 'Your pink is still lacking, but you\'re an excellent Trainer with some excellent Pokémon.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Glimwood Tangle'))]); +GymList.Circhester1 = new Gym('Gordie', 'Circhester1', [ + new GymPokemon('Barbaracle', 140246069, 40), + new GymPokemon('Shuckle', 140246069, 40), + new GymPokemon('Stonjourner', 140246069, 41), + new GymPokemon('Gigantamax Coalossal', 151694727, 42), +], BadgeEnums.Galar_Rock, 80000, 'I just want to climb into a hole... Well, I guess it\'d be more like falling from here.', [new RouteKillRequirement(10, GameConstants.Region.galar, 26)], undefined, undefined, { displayName: 'Gordie\'s Circhester Gym' }); +GymList.Circhester2 = new Gym('Melony', 'Circhester2', [ + new GymPokemon('Frosmoth', 140246069, 40), + new GymPokemon('Galarian Darmanitan', 140246069, 40), + new GymPokemon('Eiscue (Ice Face)', 140246069, 41, new WeatherRequirement([WeatherType.Clear, WeatherType.Overcast, WeatherType.Rain, WeatherType.Thunderstorm, WeatherType.Snow, WeatherType.Hail, WeatherType.Blizzard, WeatherType.Sandstorm, WeatherType.Fog, WeatherType.Windy])), + new GymPokemon('Eiscue (Noice Face)', 140246069, 41, new WeatherRequirement([WeatherType.Harsh_Sunlight])), + new GymPokemon('Gigantamax Lapras', 151694727, 42), +], BadgeEnums.Galar_Ice, 80000, 'I think you took breaking the ice a little too literally...', [new RouteKillRequirement(10, GameConstants.Region.galar, 26)], undefined, undefined, { displayName: 'Melony\'s Circhester Gym' }); +GymList.Spikemuth = new Gym('Piers', 'Spikemuth', [ + new GymPokemon('Scrafty', 145552675, 44), + new GymPokemon('Malamar', 145552675, 45), + new GymPokemon('Skuntank', 145552675, 45), + new GymPokemon('Obstagoon', 157434528, 46), +], BadgeEnums.Galar_Dark, 96000, 'Me an\' my team gave it our best. Let\'s meet up again for a battle some time...', [new TemporaryBattleRequirement('Marnie 2')]); +GymList.Hammerlocke = new Gym('Raihan', 'Hammerlocke', [ + new GymPokemon('Gigalith', 151276613, 46), + new GymPokemon('Flygon', 151276613, 47), + new GymPokemon('Sandaconda', 151276613, 46), + new GymPokemon('Gigantamax Duraludon', 163625773, 48), +], BadgeEnums.Galar_Dragon, 128000, 'I might have lost, but I still look good. Maybe I should snap a quick selfie...', [new GymBadgeRequirement(BadgeEnums.Galar_Dark)]); +GymList['Elite Trainer Marnie'] = new Gym('Marnie', 'Elite Trainer Marnie', [ + new GymPokemon('Liepard', 160047044, 47), + new GymPokemon('Toxicroak', 160047044, 47), + new GymPokemon('Scrafty', 160047044, 47), + new GymPokemon('Morpeko', 165478757, 48), + new GymPokemon('Gigantamax Grimmsnarl', 171568449, 49), +], BadgeEnums.Elite_Marnie, 150000, 'OK, so I lost... but I got to see a lot of the good points of you and your Pokémon!', [new RouteKillRequirement(10, GameConstants.Region.galar, 26)]); +GymList['Elite Gym Leader Bede'] = new Gym('Bede', 'Elite Gym Leader Bede', [ + new GymPokemon('Mawile', 160047044, 51), + new GymPokemon('Sylveon', 160047044, 51), + new GymPokemon('Gardevoir', 160047044, 51), + new GymPokemon('Galarian Rapidash', 165478757, 52), + new GymPokemon('Gigantamax Hatterene', 171568449, 53), +], BadgeEnums.Elite_Bede, 150000, 'I couldn\'t win, but at least I was able to show everyone how great Fairy types are.', [new GymBadgeRequirement(BadgeEnums.Elite_Marnie)], undefined, undefined, { imageName: 'Gym Leader Bede' }); +GymList['Elite Trainer Hop'] = new Gym('Hop', 'Elite Trainer Hop', [ + new GymPokemon('Dubwool', 173506298, 59), + new GymPokemon('Pincurchin', 168817428, 58), + new GymPokemon('Snorlax', 168817428, 58), + new GymPokemon('Corviknight', 179511126, 60), + new GymPokemon('Gigantamax Inteleon', 189335021, 59, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Gigantamax Rillaboom', 189335021, 59, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Gigantamax Cinderace', 189335021, 59, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], BadgeEnums.Elite_Hop, 200000, 'Thanks, mate. I\'m really glad you were the one here with me.', [new GymBadgeRequirement(BadgeEnums.Elite_Bede)]); +// Galar Champion +GymList['Champion Leon'] = new Gym('Leon', 'Champion Leon', [ + new GymPokemon('Aegislash (Shield)', 177587812, 62), + new GymPokemon('Dragapult', 177587812, 62), + new GymPokemon('Haxorus', 177587812, 63), + new GymPokemon('Seismitoad', 181534208, 64, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Cinderace', 187453801, 64, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Mr. Rime', 181534208, 64, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Inteleon', 187453801, 64, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Rhyperior', 181534208, 64, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), + new GymPokemon('Rillaboom', 187453801, 64, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), + new GymPokemon('Gigantamax Charizard', 197319950, 65), +], BadgeEnums.Elite_GalarChampion, 250000, 'My time as Champion is over... But what a champion time it\'s been! Thank you for the greatest battle I\'ve ever had!', [new QuestLineStepCompletedRequirement('The Darkest Day', 19)], () => { }, { champion: true }); +// Armor + Crown gyms +GymList['Elite Gym Leader Klara'] = new Gym('Klara', 'Elite Gym Leader Klara', [ + new GymPokemon('Galarian Slowking', 281126897, 68), + new GymPokemon('Galarian Weezing', 281126897, 68), + new GymPokemon('Drapion', 281126897, 68), + new GymPokemon('Scolipede', 287045163, 69), + new GymPokemon('Galarian Slowbro', 295923049, 70), +], BadgeEnums.Elite_ArmorPoison, 150000, 'Aww, come on! What a drag! But...I guess it was also kinda fun!', [new QuestLineCompletedRequirement('The Dojo\'s Armor')]); +GymList['Elite Gym Leader Avery'] = new Gym('Avery', 'Elite Gym Leader Avery', [ + new GymPokemon('Galarian Slowbro', 281126897, 68), + new GymPokemon('Swoobat', 281126897, 68), + new GymPokemon('Galarian Rapidash', 281126897, 68), + new GymPokemon('Alakazam', 287045163, 69), + new GymPokemon('Galarian Slowking', 295923049, 70), +], BadgeEnums.Elite_ArmorPsychic, 150000, 'More! I require more! Show me your Stored Power!', [new QuestLineCompletedRequirement('The Dojo\'s Armor')]); +GymList['Elite Dojo Matron Honey'] = new Gym('Honey', 'Elite Dojo Matron Honey', [ + new GymPokemon('Galarian Darmanitan', 238066328, 73), + new GymPokemon('Gallade', 238066328, 74), + new GymPokemon('Salazzle', 243078251, 73), + new GymPokemon('Togekiss', 243078251, 75), + new GymPokemon('Gigantamax Venusaur', 250596135, 75), + new GymPokemon('Gigantamax Blastoise', 250596135, 75), +], BadgeEnums.Elite_ArmorMatron, 250000, 'That was a delight! Nice battling, love!', [ + new MultiRequirement([ + new GymBadgeRequirement(BadgeEnums.Elite_ArmorPoison), + new GymBadgeRequirement(BadgeEnums.Elite_ArmorPsychic), + ]), +]); +GymList['Elite Dojo Master Mustard'] = new Gym('Mustard', 'Elite Dojo Master Mustard', [ + new GymPokemon('Mienshao', 243689942, 73), + new GymPokemon('Luxray', 243689942, 73), + new GymPokemon('Lycanroc (Midday)', 248820300, 75), + new GymPokemon('Kommo-o', 248820300, 75), + new GymPokemon('Gigantamax Urshifu (Single Strike)', 256515729, 75), + new GymPokemon('Gigantamax Urshifu (Rapid Strike)', 256515729, 75), +], BadgeEnums.Elite_ArmorChampion, 250000, 'That strength of yours doesn\'t bend easily!', [new GymBadgeRequirement(BadgeEnums.Elite_ArmorMatron)], undefined, undefined, { imageName: 'Mustard Elite' }); +GymList['Elite Trainer Peony'] = new Gym('Peony', 'Elite Trainer Peony', [ + new GymPokemon('Perrserker', 305387462, 74), + new GymPokemon('Bronzong', 299090814, 73), + new GymPokemon('Scizor', 299090814, 73), + new GymPokemon('Aggron', 305387462, 74), + new GymPokemon('Copperajah', 314832436, 74), +], BadgeEnums.Elite_CrownChampion, 250000, 'Gone and got stronger again, have you? Ah well! Hats off to you-in more ways than one!', [ + new MultiRequirement([ + new QuestLineCompletedRequirement('The Crown of Galar'), + new QuestLineCompletedRequirement('The Birds of the Dyna Tree'), + new QuestLineCompletedRequirement('The Ancient Golems'), + ]), +], undefined, undefined, { imageName: 'Peony Elite' }); +// Hisui Gyms +GymList['Grandtree Arena'] = new Gym('Lord of the Woods: Kleavor', 'Grandtree Arena', [new GymPokemon('Noble Kleavor', 76658268, 70)], BadgeEnums.Noble_Kleavor, 128000, 'You defeated Lord Kleavor once again!', [new DevelopmentRequirement()], undefined, undefined, { displayName: 'Lord Kleavor', imageName: '../pokemon/900.01' }); +GymList['Brava Arena'] = new Gym('Lady of the Ridge: Lilligant', 'Brava Arena', [new GymPokemon('Noble Lilligant', 76658268, 70)], BadgeEnums.Noble_Lilligant, 128000, 'You defeated Lady Lilligant once again!', [new DevelopmentRequirement()], undefined, undefined, { displayName: 'Lady Lilligant', imageName: '../pokemon/549.02' }); +GymList['Molten Arena'] = new Gym('Lord of the Isles: Arcanine', 'Molten Arena', [new GymPokemon('Noble Arcanine', 76658268, 70)], BadgeEnums.Noble_Arcanine, 128000, 'You defeated Lord Arcanine once again!', [new DevelopmentRequirement()], undefined, undefined, { displayName: 'Lord Arcanine', imageName: '../pokemon/59.02' }); +GymList['Moonview Arena'] = new Gym('Lord of the Hollow: Electrode', 'Moonview Arena', [new GymPokemon('Noble Electrode', 76658268, 70)], BadgeEnums.Noble_Electrode, 128000, 'You defeated Lord Electrode once again!', [new DevelopmentRequirement()], undefined, undefined, { displayName: 'Lord Electrode', imageName: '../pokemon/101.02' }); +GymList['Icepeak Arena'] = new Gym('Lord of the Tundra: Avalugg', 'Icepeak Arena', [new GymPokemon('Noble Avalugg', 76658268, 70)], BadgeEnums.Noble_Avalugg, 128000, 'You defeated Lord Avalugg once again!', [new DevelopmentRequirement()], undefined, undefined, { displayName: 'Lord Avalugg', imageName: '../pokemon/713.02' }); +GymList['Temple of Sinnoh'] = new Gym('Volo', 'Temple of Sinnoh', [ + new GymPokemon('Spiritomb', 348526193, 68), + new GymPokemon('Roserade', 348526193, 68), + new GymPokemon('Togekiss', 348526193, 68), + new GymPokemon('Hisuian Arcanine', 348526193, 68), + new GymPokemon('Lucario', 348526193, 68), + new GymPokemon('Garchomp', 348526193, 68), + new GymPokemon('Giratina (Altered)', 348526193, 70, new TemporaryBattleRequirement('Volo 3')), + new GymPokemon('Giratina (Origin)', 348526193, 70, new TemporaryBattleRequirement('Volo 3')), +], BadgeEnums.Azure, 128000, 'Why? Why you?! Why do you have the blessing of Arceus?!', [new DevelopmentRequirement()], () => { }, { champion: true }, { displayName: 'Pokémon Wielder Volo' }); +// Paldea Gyms +GymList.Cortondo = new Gym('Katy', 'Cortondo', [ + new GymPokemon('Nymble', 203123316, 14), + new GymPokemon('Tarountula', 203123316, 14), + new GymPokemon('Teddiursa', 203123316, 15), +], BadgeEnums.Bug_Gym, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList.Artazon = new Gym('Brassius', 'Artazon', [ + new GymPokemon('Petilil', 203123316, 16), + new GymPokemon('Smoliv', 203123316, 14), + new GymPokemon('Sudowoodo', 203123316, 17), +], BadgeEnums.Grass_Gym, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList.Levincia = new Gym('Iono', 'Levincia', [ + new GymPokemon('Wattrel', 203123316, 23), + new GymPokemon('Bellibolt', 203123316, 23), + new GymPokemon('Luxio', 203123316, 23), + new GymPokemon('Mismagius', 203123316, 24), +], BadgeEnums.Electric_Gym, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList.Cascarrafa = new Gym('Kofu', 'Cascarrafa', [ + new GymPokemon('Veluza', 203123316, 29), + new GymPokemon('Wugtrio', 203123316, 29), + new GymPokemon('Crabominable', 203123316, 30), +], BadgeEnums.Water_Gym, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList.Medali = new Gym('Larry', 'Medali', [ + new GymPokemon('Komala', 203123316, 35), + new GymPokemon('Dudunsparce (Two-Segment)', 203123316, 35), + new GymPokemon('Staraptor', 203123316, 36), +], BadgeEnums.Normal_Gym, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList.Montenevera = new Gym('Ryme', 'Montenevera', [ + new GymPokemon('Banette', 203123316, 41), + new GymPokemon('Mimikyu', 203123316, 41), + new GymPokemon('Houndstone', 203123316, 41), + new GymPokemon('Toxtricity (Low Key)', 203123316, 42), +], BadgeEnums.Ghost_Gym, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList.Alfornada = new Gym('Tulip', 'Alfornada', [ + new GymPokemon('Farigiraf', 203123316, 44), + new GymPokemon('Gardevoir', 203123316, 44), + new GymPokemon('Espathra', 203123316, 44), + new GymPokemon('Florges (Red)', 203123316, 45), +], BadgeEnums.Psychic_Gym, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList['Glaseado Mountain'] = new Gym('Grusha', 'Glaseado Mountain', [ + new GymPokemon('Frosmoth', 203123316, 47), + new GymPokemon('Beartic', 203123316, 47), + new GymPokemon('Cetitan', 203123316, 47), + new GymPokemon('Altaria', 203123316, 48), +], BadgeEnums.Ice_Gym, 250000, '', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Glaseado Mountain'))]); +GymList['Elite Rika'] = new Gym('Rika', 'Elite Rika', [ + new GymPokemon('Whiscash', 203123316, 57), + new GymPokemon('Camerupt', 203123316, 57), + new GymPokemon('Donphan', 203123316, 57), + new GymPokemon('Dugtrio', 203123316, 57), + new GymPokemon('Clodsire', 203123316, 58), +], BadgeEnums.Elite_Rika, 250000, '', [new GymBadgeRequirement(BadgeEnums.Bug_Gym), new GymBadgeRequirement(BadgeEnums.Grass_Gym), new GymBadgeRequirement(BadgeEnums.Electric_Gym), new GymBadgeRequirement(BadgeEnums.Water_Gym), new GymBadgeRequirement(BadgeEnums.Normal_Gym), new GymBadgeRequirement(BadgeEnums.Ghost_Gym), new GymBadgeRequirement(BadgeEnums.Psychic_Gym), new GymBadgeRequirement(BadgeEnums.Ice_Gym)]); +GymList['Elite Poppy'] = new Gym('Poppy', 'Elite Poppy', [ + new GymPokemon('Copperajah', 203123316, 58), + new GymPokemon('Magnezone', 203123316, 58), + new GymPokemon('Bronzong', 203123316, 58), + new GymPokemon('Corviknight', 203123316, 58), + new GymPokemon('Tinkaton', 203123316, 59), +], BadgeEnums.Elite_Poppy, 250000, '', [new GymBadgeRequirement(BadgeEnums.Elite_Rika)]); +GymList['Elite Larry'] = new Gym('Larry', 'Elite Larry', [ + new GymPokemon('Tropius', 203123316, 59), + new GymPokemon('Oricorio (Pom-Pom)', 203123316, 59), + new GymPokemon('Altaria', 203123316, 59), + new GymPokemon('Staraptor', 203123316, 59), + new GymPokemon('Flamigo', 203123316, 60), +], BadgeEnums.Elite_Larry, 250000, '', [new GymBadgeRequirement(BadgeEnums.Elite_Poppy)]); +GymList['Elite Hassel'] = new Gym('Hassel', 'Elite Hassel', [ + new GymPokemon('Noivern', 203123316, 60), + new GymPokemon('Haxorus', 203123316, 60), + new GymPokemon('Dragalge', 203123316, 60), + new GymPokemon('Flapple', 203123316, 60), + new GymPokemon('Baxcalibur', 203123316, 61), +], BadgeEnums.Elite_Hassel, 250000, '', [new GymBadgeRequirement(BadgeEnums.Elite_Larry)]); +GymList['Top Champion Geeta'] = new Gym('Geeta', 'Top Champion Geeta', [ + new GymPokemon('Espathra', 203123316, 61), + new GymPokemon('Gogoat', 203123316, 61), + new GymPokemon('Veluza', 203123316, 61), + new GymPokemon('Avalugg', 203123316, 61), + new GymPokemon('Kingambit', 203123316, 61), + new GymPokemon('Glimmora', 203123316, 62), +], BadgeEnums.Elite_PaldeaChampion, 250000, '', [new GymBadgeRequirement(BadgeEnums.Elite_Hassel)], () => { }, { champion: true }); +GymList['Champion Nemona'] = new Gym('Nemona', 'Champion Nemona', [ + new GymPokemon('Lycanroc (Midday)', 203123316, 65), + new GymPokemon('Goodra', 203123316, 65), + new GymPokemon('Dudunsparce (Three-Segment)', 203123316, 65), + new GymPokemon('Orthworm', 203123316, 65), + new GymPokemon('Pawmot', 203123316, 65), + new GymPokemon('Quaquaval', 203123316, 66, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Meowscarada', 203123316, 66, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Skeledirge', 203123316, 66, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), +], BadgeEnums.Elite_Nemona, 250000, '', [new GymBadgeRequirement(BadgeEnums.Elite_PaldeaChampion)], undefined, undefined, { hideUntilUnlocked: true }); +GymList['Segin Squad\'s Base'] = new Gym('Giacomo', 'Segin Squad\'s Base', [ + new GymPokemon('Pawniard', 203123316, 21), + new GymPokemon('Segin Starmobile', 203123316, 20), +], BadgeEnums.Dark_Star, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'Giacomo of Team Star' }); +GymList['Schedar Squad\'s Base'] = new Gym('Mela', 'Schedar Squad\'s Base', [ + new GymPokemon('Torkoal', 203123316, 27), + new GymPokemon('Schedar Starmobile', 203123316, 26), +], BadgeEnums.Fire_Star, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'Mela of Team Star' }); +GymList['Navi Squad\'s Base'] = new Gym('Atticus', 'Navi Squad\'s Base', [ + new GymPokemon('Skuntank', 203123316, 32), + new GymPokemon('Muk', 203123316, 32), + new GymPokemon('Revavroom', 203123316, 33), + new GymPokemon('Navi Starmobile', 203123316, 32), +], BadgeEnums.Poison_Star, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'Atticus of Team Star' }); +GymList['Ruchbah Squad\'s Base'] = new Gym('Ortega', 'Ruchbah Squad\'s Base', [ + new GymPokemon('Azumarill', 203123316, 50), + new GymPokemon('Wigglytuff', 203123316, 50), + new GymPokemon('Dachsbun', 203123316, 51), + new GymPokemon('Ruchbah Starmobile', 203123316, 50), +], BadgeEnums.Fairy_Star, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'Ortega of Team Star' }); +GymList['Caph Squad\'s Base'] = new Gym('Eri', 'Caph Squad\'s Base', [ + new GymPokemon('Toxicroak', 203123316, 55), + new GymPokemon('Passimian', 203123316, 55), + new GymPokemon('Lucario', 203123316, 55), + new GymPokemon('Annihilape', 203123316, 56), + new GymPokemon('Caph Starmobile', 203123316, 56), +], BadgeEnums.Fighting_Star, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'Eri of Team Star' }); +GymList['Director Clavell'] = new Gym('Clavell', 'Director Clavell', [ + new GymPokemon('Oranguru', 203123316, 60), + new GymPokemon('Abomasnow', 203123316, 60), + new GymPokemon('Polteageist', 203123316, 60), + new GymPokemon('Amoonguss', 203123316, 60, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Houndoom', 203123316, 60, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Gyarados', 203123316, 60, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Gyarados', 203123316, 60, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Amoonguss', 203123316, 60, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Houndoom', 203123316, 60, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Skeledirge', 203123316, 61, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Quaquaval', 203123316, 61, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Meowscarada', 203123316, 61, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), +], BadgeEnums.Elite_Clavell, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'Director Clavell', hideUntilUnlocked: true }); +GymList['Penny of Team Star'] = new Gym('Penny', 'Penny of Team Star', [ + new GymPokemon('Umbreon', 203123316, 62), + new GymPokemon('Vaporeon', 203123316, 62), + new GymPokemon('Jolteon', 203123316, 62), + new GymPokemon('Flareon', 203123316, 62), + new GymPokemon('Leafeon', 203123316, 62), + new GymPokemon('Sylveon', 203123316, 63), +], BadgeEnums.Elite_Penny, 250000, '', [new GymBadgeRequirement(BadgeEnums.Elite_Clavell)], undefined, undefined, { displayName: 'Penny of Team Star', hideUntilUnlocked: true }); +GymList['Stony Cliff Titan'] = new Gym('Stony Cliff Titan', 'Stony Cliff Titan', [new GymPokemon('Titan Klawf', 203123316, 16)], BadgeEnums.Rock_Titan, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { imageName: '../pokemon/950.01' }); +GymList['Open Sky Titan'] = new Gym('Open Sky Titan', 'Open Sky Titan', [new GymPokemon('Titan Bombirdier', 203123316, 20)], BadgeEnums.Flying_Titan, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { imageName: '../pokemon/962.01' }); +GymList['Lurking Steel Titan'] = new Gym('Lurking Steel Titan', 'Lurking Steel Titan', [new GymPokemon('Titan Orthworm', 203123316, 29)], BadgeEnums.Steel_Titan, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { imageName: '../pokemon/968.01' }); +GymList['Asado Desert'] = new Gym('Quaking Earth Titan', 'Asado Desert', [ + new GymPokemon('Titan Great Tusk', 203123316, 45), + new GymPokemon('Titan Iron Treads', 203123316, 45), +], BadgeEnums.Ground_Titan, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList['Casseroya Lake'] = new Gym('False Dragon Titan', 'Casseroya Lake', [ + new GymPokemon('Titan Dondozo', 203123316, 56), + new GymPokemon('Titan Tatsugiri', 203123316, 57), +], BadgeEnums.Dragon_Titan, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)]); +GymList['Pokémon Trainer Arven'] = new Gym('Arven', 'Pokémon Trainer Arven', [ + new GymPokemon('Greedent', 203123316, 58), + new GymPokemon('Cloyster', 203123316, 59), + new GymPokemon('Scovillain', 203123316, 60), + new GymPokemon('Toedscruel', 203123316, 61), + new GymPokemon('Garganacl', 203123316, 62), + new GymPokemon('Mabosstiff', 203123316, 63), +], BadgeEnums.Elite_Arven, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'Arven', hideUntilUnlocked: true }); +GymList['AI Sada'] = new Gym('AI Sada', 'AI Sada', [ + new GymPokemon('Slither Wing', 203123316, 66), + new GymPokemon('Scream Tail', 203123316, 66), + new GymPokemon('Brute Bonnet', 203123316, 66), + new GymPokemon('Flutter Mane', 203123316, 66), + new GymPokemon('Sandy Shocks', 203123316, 66), + new GymPokemon('Roaring Moon', 203123316, 67), +], BadgeEnums.Scarlet, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'AI Sada' }); +GymList['AI Turo'] = new Gym('AI Turo', 'AI Turo', [ + new GymPokemon('Iron Moth', 203123316, 66), + new GymPokemon('Iron Bundle', 203123316, 66), + new GymPokemon('Iron Hands', 203123316, 66), + new GymPokemon('Iron Jugulis', 203123316, 66), + new GymPokemon('Iron Thorns', 203123316, 66), + new GymPokemon('Iron Valiant', 203123316, 67), +], BadgeEnums.Violet, 250000, '', [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], undefined, undefined, { displayName: 'AI Turo' }); +/// +/// +/// +class GymRunner { + static startGym(gym, autoRestart = false, initialRun = true) { + GymRunner.initialRun = initialRun; + GymRunner.autoRestart(autoRestart); + GymRunner.running(false); + GymRunner.gymObservable(gym); + App.game.gameState = GameConstants.GameState.idle; + DungeonRunner.timeBonus(FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute)); + GymRunner.timeLeft(GameConstants.GYM_TIME * GymRunner.timeBonus()); + GymRunner.timeLeftPercentage(100); + GymBattle.gym = gym; + GymBattle.totalPokemons(gym.getPokemonList().length); + GymBattle.index(0); + GymBattle.generateNewEnemy(); + App.game.gameState = GameConstants.GameState.gym; + GymRunner.running(true); + GymRunner.resetGif(); + setTimeout(() => { + GymRunner.hideGif(); + }, GameConstants.GYM_COUNTDOWN); + } + static hideGif() { + $('#gymGoContainer').hide(); + } + static resetGif() { + // If the user doesn't want the animation, just return + if (!Settings.getSetting('showGymGoAnimation').value) { + return; + } + if (!GymRunner.autoRestart() || GymRunner.initialRun) { + $('#gymGoContainer').show(); + setTimeout(() => { + $('#gymGo').attr('src', 'assets/gifs/go.gif'); + }, 0); + } + } + static tick() { + if (!GymRunner.running()) { + return; + } + if (GymRunner.timeLeft() < 0) { + GymRunner.gymLost(); + } + GymRunner.timeLeft(GymRunner.timeLeft() - GameConstants.GYM_TICK); + GymRunner.timeLeftPercentage(Math.floor(GymRunner.timeLeft() / (GameConstants.GYM_TIME * FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute)) * 100)); + const currentFluteBonus = FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute); + if (currentFluteBonus != GymRunner.timeBonus()) { + if (currentFluteBonus > GymRunner.timeBonus()) { + if (GymRunner.timeBonus() === 1) { + GymRunner.timeBonus(currentFluteBonus); + GymRunner.timeLeft(GymRunner.timeLeft() * GymRunner.timeBonus()); + } + else { + GymRunner.timeLeft(GymRunner.timeLeft() / GymRunner.timeBonus()); + GymRunner.timeBonus(currentFluteBonus); + GymRunner.timeLeft(GymRunner.timeLeft() * GymRunner.timeBonus()); + } + } + else { + GymRunner.timeLeft(GymRunner.timeLeft() / GymRunner.timeBonus()); + GymRunner.timeBonus(currentFluteBonus); + } + } + } + static gymLost() { + if (GymRunner.running()) { + GymRunner.running(false); + Notifier.notify({ + message: `It appears you are not strong enough to defeat ${GymBattle.gym.leaderName.replace(/\d/g, '')}.`, + type: NotificationConstants.NotificationOption.danger, + }); + App.game.gameState = GameConstants.GameState.town; + } + } + static gymWon(gym) { + if (GymRunner.running()) { + GymRunner.running(false); + Notifier.notify({ + message: `Congratulations, you defeated ${GymBattle.gym.leaderName.replace(/\d/g, '')}!`, + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.General.gym_won, + }); + // If this is the first time defeating this gym + if (!App.game.badgeCase.hasBadge(gym.badgeReward)) { + gym.firstWinReward(); + } + GameHelper.incrementObservable(App.game.statistics.gymsDefeated[GameConstants.getGymIndex(gym.town)]); + // Auto restart gym battle + if (GymRunner.autoRestart()) { + const clears = App.game.statistics.gymsDefeated[GameConstants.getGymIndex(gym.town)](); + const cost = clears >= 100 ? 0 : (GymRunner.gymObservable().moneyReward || 10) * 2; + const amt = new Amount(cost, GameConstants.Currency.money); + const reward = GymRunner.gymObservable().autoRestartReward(); + // If the player can afford it, restart the gym + if (cost === 0 || App.game.wallet.loseAmount(amt)) { + if (reward > 0) { + App.game.wallet.gainMoney(reward); + } + GymRunner.startGym(GymRunner.gymObservable(), GymRunner.autoRestart(), false); + return; + } + } + // Award money for defeating gym + App.game.wallet.gainMoney(gym.moneyReward); + // Send the player back to a town state + App.game.gameState = GameConstants.GameState.town; + } + } + static getEnvironmentArea() { + const gym = GymRunner.gymObservable(); + return gym.optionalArgs.environment; + } + static getBattleBackgroundImage() { + const gym = GymRunner.gymObservable(); + return gym.optionalArgs.battleBackground; + } +} +GymRunner.timeLeft = ko.observable(GameConstants.GYM_TIME); +GymRunner.timeLeftPercentage = ko.observable(100); +GymRunner.timeBonus = ko.observable(1); +GymRunner.gymObservable = ko.observable(GymList['Pewter City']); +GymRunner.running = ko.observable(false); +GymRunner.autoRestart = ko.observable(false); +GymRunner.initialRun = true; +GymRunner.timeLeftSeconds = ko.pureComputed(() => { + return (Math.ceil(GymRunner.timeLeft() / 100) / 10).toFixed(1); +}); +document.addEventListener('DOMContentLoaded', () => { + $('#receiveBadgeModal').on('hidden.bs.modal', () => { + if (GymBattle.gym.badgeReward == BadgeEnums.Soul) { + KeyItemController.showGainModal(KeyItemType.Safari_ticket); + } + if (GymBattle.gym.badgeReward == BadgeEnums.Earth) { + KeyItemController.showGainModal(KeyItemType.Gem_case); + } + }); +}); +GymRunner; +/** + * Static class as an API for handling items. + */ +class BagHandler { + /** + * Gets the display name for the item + * @param item The item identifier + */ + static displayName(item) { + if (!item) { + return ''; + } + switch (item.type) { + case ItemType.item: + return this.getItem(item.id).displayName; + case ItemType.underground: + return this.getUndergroundItem(item.id).displayName; + case ItemType.berry: + return `${BerryType[this.getBerry(item.id)]} Berry`; + case ItemType.gem: + return `${PokemonType[this.getGem(item.id)]} Gem`; + } + } + /** + * Gets the image path for the item + * @param item The item identifier + */ + static image(item) { + if (!item) { + return ''; + } + switch (item.type) { + case ItemType.item: + return this.getItem(item.id).image; + case ItemType.underground: + return this.getUndergroundItem(item.id).image; + case ItemType.berry: + return FarmController.getBerryImage(this.getBerry(item.id)); + case ItemType.gem: + return Gems.image(this.getGem(item.id)); + } + } + /** + * Gets the amount observable for the item. NOTE: You shouldn't use this to modify the amount, as there might + * be some additional code that needs to be run via the base gainItem API calls. Use BagHandler.gainItem instead. + * @param item The item identifier + */ + static amount(item) { + if (!item) { + return null; + } + switch (item.type) { + case ItemType.item: + return player.itemList[this.getItem(item.id).name]; + case ItemType.underground: + return player.itemList[this.getUndergroundItem(item.id).itemName](); + case ItemType.berry: + return App.game.farming.berryList[this.getBerry(item.id)]; + case ItemType.gem: + return App.game.gems.gemWallet[this.getGem(item.id)]; + } + } + /** + * Handles updating the amount for an item. This should be used instead of modifying the amount observable + * directly, as the base method might have additional handling. + * @param item The item identifier + * @param amount The amount to be added to the Bag. Defaults to 1. + */ + static gainItem(item, amount = 1) { + if (!item) { + return; + } + switch (item.type) { + case ItemType.item: + this.getItem(item.id).gain(amount); + return; + case ItemType.underground: + Underground.gainMineItem(this.getUndergroundItem(item.id).id, amount); + return; + case ItemType.berry: + App.game.farming.gainBerry(this.getBerry(item.id), amount, false); + return; + case ItemType.gem: + App.game.gems.gainGems(amount, this.getGem(item.id)); + return; + } + } + static isAvailable(item) { + if (!item) { + return false; + } + switch (item.type) { + case ItemType.item: + return this.getItem(item.id).isAvailable() && !this.getItem(item.id).isSoldOut(); + case ItemType.underground: + return !this.getUndergroundItem(item.id).requirement || this.getUndergroundItem(item.id).requirement.isCompleted(); + case ItemType.berry: + case ItemType.gem: + default: + return true; + } + } + //#region Item getters + static getItem(id) { + return ItemList[id]; + } + static getUndergroundItem(id) { + if (typeof id === 'string') { + return UndergroundItems.getByName(id); + } + else { + return UndergroundItems.getById(id); + } + } + static getBerry(id) { + if (typeof id === 'string') { + id = App.game.farming.berryData.findIndex((_, idx) => BerryType[idx] === id); + } + return id; + } + static getGem(id) { + if (typeof id === 'string') { + id = PokemonType[id]; + } + return id; + } +} +class EvolutionStone extends CaughtIndicatingItem { + constructor(type, basePrice, currency = GameConstants.Currency.questPoint, displayName, unlockedRegion, options) { + super(GameConstants.StoneType[type], basePrice, currency, options, displayName, 'An evolution item. See your Item Bag for more information.', 'evolution'); + this.pokemonWithEvolution = ko.pureComputed(() => PartyController.getPokemonsWithEvolution(this.type)); + this.getCaughtStatus = ko.pureComputed(() => { + const statuses = this.pokemonWithEvolution().flatMap((pokemon) => PartyController.getStoneEvolutionsCaughtData(pokemon.id, this.type)); + return statuses.length > 0 + ? statuses.reduce((lowest, { status }) => Math.min(lowest, status), CaughtStatus.CaughtShiny) + : undefined; + }); + this.getPokerusStatus = ko.pureComputed(() => { + const statuses = this.pokemonWithEvolution().flatMap((pokemon) => PartyController.getStoneEvolutionsPokerusData(pokemon.id, this.type)); + return statuses.length > 0 + ? statuses.reduce((lowest, { status }) => Math.min(lowest, status), GameConstants.Pokerus.Resistant) + : undefined; + }); + this.getPokerusProgress = ko.pureComputed(() => { + const statuses = this.pokemonWithEvolution().flatMap((pokemon) => PartyController.getStoneEvolutionsPokerusData(pokemon.id, this.type)); + if (statuses.length > 0) { + const current = statuses.reduce((progress, { evs }) => progress += Math.min(50, evs), 0); + const total = statuses.length * 50; + return total === current ? 'All Pokémon are resistant!' : `EVs until all Pokémon are resistant: ${current} / ${total}`; + } + else { + return undefined; + } + }); + this.type = type; + this.unlockedRegion = unlockedRegion; + } + gain(n) { + player.gainItem(GameConstants.StoneType[this.type], n); + } + use(amount, pokemon) { + const partyPokemon = App.game.party.getPokemon(PokemonHelper.getPokemonByName(pokemon).id); + const shiny = partyPokemon.useStone(this.type); + return shiny; + } + init() { + // If a region has already been manually set + if (this.unlockedRegion > GameConstants.Region.none) { + return false; + } + // Get a list of evolutions that use this stone, set the unlock region to the lowest region + this.unlockedRegion = Math.min(...pokemonList.filter((p) => + // Filter to only include pokemon that make use of this evolution stone + p.nativeRegion > GameConstants.Region.none + && p.evolutions != undefined + && p.evolutions.some(e => e.trigger === EvoTrigger.STONE && e.stone == this.type)).map((p) => + // Map to the native region for evolutions that use this stone + Math.min(...p.evolutions.filter(e => e.trigger === EvoTrigger.STONE && e.stone == this.type) + .map((e) => Math.max(p.nativeRegion, PokemonHelper.calcNativeRegion(e.evolvedPokemon))) + .filter((r) => r > GameConstants.Region.none)))); + } +} +// TODO: Set prices for different kinds of stones +ItemList.Leaf_stone = new EvolutionStone(GameConstants.StoneType.Leaf_stone, 2500, undefined, 'Leaf Stone'); +ItemList.Fire_stone = new EvolutionStone(GameConstants.StoneType.Fire_stone, 2500, undefined, 'Fire Stone'); +ItemList.Water_stone = new EvolutionStone(GameConstants.StoneType.Water_stone, 2500, undefined, 'Water Stone'); +ItemList.Thunder_stone = new EvolutionStone(GameConstants.StoneType.Thunder_stone, 2500, undefined, 'Thunder Stone'); +ItemList.Moon_stone = new EvolutionStone(GameConstants.StoneType.Moon_stone, 2500, undefined, 'Moon Stone'); +ItemList.Linking_cord = new EvolutionStone(GameConstants.StoneType.Linking_cord, 2500, undefined, 'Linking Cord'); +ItemList.Sun_stone = new EvolutionStone(GameConstants.StoneType.Sun_stone, 2500, undefined, 'Sun Stone'); +ItemList.Soothe_bell = new EvolutionStone(GameConstants.StoneType.Soothe_bell, 2500, undefined, 'Soothe Bell'); +ItemList.Metal_coat = new EvolutionStone(GameConstants.StoneType.Metal_coat, 2500, undefined, 'Metal Coat'); +ItemList.Kings_rock = new EvolutionStone(GameConstants.StoneType.Kings_rock, 2500, undefined, 'King\'s Rock'); +ItemList.Upgrade = new EvolutionStone(GameConstants.StoneType.Upgrade, 2500, undefined, 'Upgrade'); +ItemList.Dragon_scale = new EvolutionStone(GameConstants.StoneType.Dragon_scale, 2500, undefined, 'Dragon Scale'); +ItemList.Prism_scale = new EvolutionStone(GameConstants.StoneType.Prism_scale, 2500, undefined, 'Prism Scale'); +ItemList.Deepsea_tooth = new EvolutionStone(GameConstants.StoneType.Deepsea_tooth, 2500, undefined, 'Deep Sea Tooth'); +ItemList.Deepsea_scale = new EvolutionStone(GameConstants.StoneType.Deepsea_scale, 2500, undefined, 'Deep Sea Scale'); +ItemList.Shiny_stone = new EvolutionStone(GameConstants.StoneType.Shiny_stone, 2500, undefined, 'Shiny Stone'); +ItemList.Dusk_stone = new EvolutionStone(GameConstants.StoneType.Dusk_stone, 2500, undefined, 'Dusk Stone'); +ItemList.Dawn_stone = new EvolutionStone(GameConstants.StoneType.Dawn_stone, 2500, undefined, 'Dawn Stone'); +ItemList.Razor_claw = new EvolutionStone(GameConstants.StoneType.Razor_claw, 2500, undefined, 'Razor Claw'); +ItemList.Razor_fang = new EvolutionStone(GameConstants.StoneType.Razor_fang, 2500, undefined, 'Razor Fang'); +ItemList.Electirizer = new EvolutionStone(GameConstants.StoneType.Electirizer, 2500, undefined, 'Electirizer'); +ItemList.Magmarizer = new EvolutionStone(GameConstants.StoneType.Magmarizer, 2500, undefined, 'Magmarizer'); +ItemList.Protector = new EvolutionStone(GameConstants.StoneType.Protector, 2500, undefined, 'Protector'); +ItemList.Dubious_disc = new EvolutionStone(GameConstants.StoneType.Dubious_disc, 2500, undefined, 'Dubious Disc'); +ItemList.Reaper_cloth = new EvolutionStone(GameConstants.StoneType.Reaper_cloth, 2500, undefined, 'Reaper Cloth'); +ItemList.Black_DNA = new EvolutionStone(GameConstants.StoneType.Black_DNA, 2500, undefined, 'Black DNA'); +ItemList.White_DNA = new EvolutionStone(GameConstants.StoneType.White_DNA, 2500, undefined, 'White DNA'); +ItemList.Sachet = new EvolutionStone(GameConstants.StoneType.Sachet, 2500, undefined, 'Sachet'); +ItemList.Whipped_dream = new EvolutionStone(GameConstants.StoneType.Whipped_dream, 2500, undefined, 'Whipped Dream'); +ItemList.Key_stone = new EvolutionStone(GameConstants.StoneType.Key_stone, 250, GameConstants.Currency.battlePoint, 'Key Stone', GameConstants.Region.kalos, { multiplier: 1.1, multiplierDecrease: false }); +ItemList.Ice_stone = new EvolutionStone(GameConstants.StoneType.Ice_stone, 2500, undefined, 'Ice Stone'); +ItemList.Solar_light = new EvolutionStone(GameConstants.StoneType.Solar_light, 2500, undefined, 'Solar Light'); +ItemList.Lunar_light = new EvolutionStone(GameConstants.StoneType.Lunar_light, 2500, undefined, 'Lunar Light'); +ItemList.Pure_light = new EvolutionStone(GameConstants.StoneType.Pure_light, 2500, undefined, 'Pure Light'); +ItemList.Crystallized_shadow = new EvolutionStone(GameConstants.StoneType.Crystallized_shadow, 2500, undefined, 'Crystallized Shadow'); +ItemList.Sweet_apple = new EvolutionStone(GameConstants.StoneType.Sweet_apple, 5000, undefined, 'Sweet Apple'); +ItemList.Tart_apple = new EvolutionStone(GameConstants.StoneType.Tart_apple, 5000, undefined, 'Tart Apple'); +ItemList.Cracked_pot = new EvolutionStone(GameConstants.StoneType.Cracked_pot, 5000, undefined, 'Cracked Pot'); +ItemList.Galarica_cuff = new EvolutionStone(GameConstants.StoneType.Galarica_cuff, 5000, undefined, 'Galarica Cuff'); +ItemList.Galarica_wreath = new EvolutionStone(GameConstants.StoneType.Galarica_wreath, 5000, undefined, 'Galarica Wreath'); +ItemList.Black_mane_hair = new EvolutionStone(GameConstants.StoneType.Black_mane_hair, 2500, undefined, 'Black Mane Hair'); +ItemList.White_mane_hair = new EvolutionStone(GameConstants.StoneType.White_mane_hair, 2500, undefined, 'White Mane Hair'); +ItemList.Black_augurite = new EvolutionStone(GameConstants.StoneType.Black_augurite, 500, undefined, 'Black Augurite'); +ItemList.Peat_block = new EvolutionStone(GameConstants.StoneType.Peat_block, 5000, GameConstants.Currency.diamond, 'Peat Block'); +ItemList.Auspicious_armor = new EvolutionStone(GameConstants.StoneType.Auspicious_armor, 5000, undefined, 'Auspicious Armor'); +ItemList.Malicious_armor = new EvolutionStone(GameConstants.StoneType.Malicious_armor, 5000, undefined, 'Malicious Armor'); +ItemList.Leaders_crest = new EvolutionStone(GameConstants.StoneType.Leaders_crest, 5000, undefined, 'Leader\'s Crest'); +ItemList.Gimmighoul_coin = new EvolutionStone(GameConstants.StoneType.Gimmighoul_coin, 5000, undefined, 'Gimmighoul Coin'); +ItemList.Syrupy_apple = new EvolutionStone(GameConstants.StoneType.Syrupy_apple, 5000, undefined, 'Syrupy Apple'); +ItemList.Unremarkable_teacup = new EvolutionStone(GameConstants.StoneType.Unremarkable_teacup, 5000, undefined, 'Unremarkable Teacup'); +ItemList.Metal_alloy = new EvolutionStone(GameConstants.StoneType.Metal_alloy, 5000, undefined, 'Metal Alloy'); +/// +class FarmHandItem extends Item { + constructor(farmHandName, basePrice, currency = GameConstants.Currency.farmPoint) { + super(`FarmHand${farmHandName}`, basePrice, currency, { maxAmount: 1 }, `Farm Hand ${farmHandName}`); + this.farmHandName = farmHandName; + } + get farmHand() { + return FarmHands.list.find(f => f.name == this.farmHandName); + } + get description() { + var _a, _b, _c, _d, _e; + const farmHand = this.farmHand; + return `Cost: Farm Points ${((_b = (_a = farmHand === null || farmHand === void 0 ? void 0 : farmHand.cost) === null || _a === void 0 ? void 0 : _a.amount) !== null && _b !== void 0 ? _b : 0).toLocaleString('en-US')}/hour
    + Work Speed: ${GameConstants.formatTimeFullLetters(((_c = farmHand === null || farmHand === void 0 ? void 0 : farmHand.workTick) !== null && _c !== void 0 ? _c : GameConstants.MINUTE) / 1000)}
    + Efficiency: ${((_d = farmHand === null || farmHand === void 0 ? void 0 : farmHand.efficiency) !== null && _d !== void 0 ? _d : 0).toLocaleString('en-US')}
    + Max Energy: ${((_e = farmHand === null || farmHand === void 0 ? void 0 : farmHand.maxEnergy) !== null && _e !== void 0 ? _e : 0).toLocaleString('en-US')}`; + } + isAvailable() { + var _a, _b; + const purchased = (_b = (_a = this.farmHand) === null || _a === void 0 ? void 0 : _a.isUnlocked()) !== null && _b !== void 0 ? _b : true; + return super.isAvailable() && !purchased; + } + get image() { + var _a; + const trainerID = ((_a = this.farmHand) === null || _a === void 0 ? void 0 : _a.trainerSprite) || 0; + return `assets/images/profile/trainer-${trainerID}.png`; + } +} +// Berry Masters +ItemList.FarmHandBailey = new FarmHandItem('Bailey', 50000, GameConstants.Currency.farmPoint); // Johto (50k) +ItemList.FarmHandKerry = new FarmHandItem('Kerry', 100000, GameConstants.Currency.farmPoint); // Hoenn (100k) +ItemList.FarmHandRiley = new FarmHandItem('Riley', 200000, GameConstants.Currency.farmPoint); // Sinnoh (200k) +//ItemList['FarmHandJessie'] = new FarmHandItem('Jessie', 500000, GameConstants.Currency.farmPoint); // Alola (500k) (not implemented) +// Battle Frontier +ItemList.FarmHandJamie = new FarmHandItem('Jamie', 20000, GameConstants.Currency.battlePoint); +/// +class HatcheryHelperItem extends Item { + constructor(hatcheryHelperName, basePrice, currency = GameConstants.Currency.money) { + super(`HatcheryHelper${hatcheryHelperName}`, basePrice, currency, { maxAmount: 1 }, `Hatchery Helper ${hatcheryHelperName}`); + this.hatcheryHelperName = hatcheryHelperName; + } + get hatcheryHelper() { + return HatcheryHelpers.list.find(f => f.name == this.hatcheryHelperName); + } + get description() { + var _a, _b, _c, _d, _e; + const hatcheryHelper = this.hatcheryHelper; + return `Cost:  ${((_c = (_b = hatcheryHelper === null || hatcheryHelper === void 0 ? void 0 : hatcheryHelper.cost) === null || _b === void 0 ? void 0 : _b.amount) !== null && _c !== void 0 ? _c : 0).toLocaleString('en-US')}/hatch
    + Step Efficiency: ${((_d = hatcheryHelper === null || hatcheryHelper === void 0 ? void 0 : hatcheryHelper.stepEfficiencyBase) !== null && _d !== void 0 ? _d : 0).toLocaleString('en-US')}%
    + Attack Efficiency: ${((_e = hatcheryHelper === null || hatcheryHelper === void 0 ? void 0 : hatcheryHelper.attackEfficiencyBase) !== null && _e !== void 0 ? _e : 0).toLocaleString('en-US')}%`; + } + isAvailable() { + var _a, _b; + const purchased = (_b = (_a = this.hatcheryHelper) === null || _a === void 0 ? void 0 : _a.isUnlocked()) !== null && _b !== void 0 ? _b : true; + return super.isAvailable() && !purchased; + } + get image() { + var _a; + const trainerID = ((_a = this.hatcheryHelper) === null || _a === void 0 ? void 0 : _a.trainerSprite) || 0; + return `assets/images/profile/trainer-${trainerID}.png`; + } +} +// Berry Masters +ItemList.HatcheryHelperJasmine = new HatcheryHelperItem('Jasmine', 10000000, GameConstants.Currency.money); +ItemList.HatcheryHelperDakota = new HatcheryHelperItem('Dakota', 100000, GameConstants.Currency.dungeonToken); +ItemList.HatcheryHelperCameron = new HatcheryHelperItem('Cameron', 100000, GameConstants.Currency.farmPoint); +ItemList.HatcheryHelperCarey = new HatcheryHelperItem('Carey', 10000, GameConstants.Currency.questPoint); +ItemList.HatcheryHelperKris = new HatcheryHelperItem('Kris', 400, GameConstants.Currency.diamond); +ItemList.HatcheryHelperNoel = new HatcheryHelperItem('Noel', 20000, GameConstants.Currency.battlePoint); +ItemList.HatcheryHelperLeslie = new HatcheryHelperItem('Leslie', 10000, GameConstants.Currency.money); +/// +class HeldItem extends Item { + constructor(name, basePrice, currency, shopOptions, displayName, description, regionUnlocked, canUse) { + super(name, basePrice, currency, shopOptions, displayName, description, 'heldItems'); + this.canUse = canUse; + this.regionUnlocked = regionUnlocked; + } + static getSortedHeldItems() { + const sortedHeldItems = Object.values(ItemList).filter(i => i instanceof HeldItem).sort((a, b) => { + return a.regionUnlocked - b.regionUnlocked; + }); + return { + attack: { + title: 'Pokémon Restricted', + items: sortedHeldItems.filter(i => i instanceof PokemonRestrictedAttackBonusHeldItem), + }, + typeRestricted: { + title: 'Type Restricted', + items: sortedHeldItems.filter(i => i instanceof TypeRestrictedAttackBonusHeldItem), + }, + ev: { + title: 'EV Gain', + items: sortedHeldItems.filter(i => i instanceof EVsGainedBonusHeldItem), + }, + exp: { + title: 'EXP Gain', + items: sortedHeldItems.filter(i => i instanceof ExpGainedBonusHeldItem), + }, + other: { + title: 'Other', + items: sortedHeldItems.filter(i => i.constructor.name === 'AttackBonusHeldItem' || i.constructor.name === 'HeldItem'), + }, + }; + } + isUnlocked() { + return player.highestRegion() >= this.regionUnlocked; + } +} +HeldItem.heldItemSelected = ko.observable(undefined); +class AttackBonusHeldItem extends HeldItem { + constructor(name, basePrice, currency, shopOptions, displayName, _attackBonus, regionUnlocked, pokemonDescription = 'the Pokémon', canUse = (pokemon) => true, applyBonus = () => true, additionDescription = '') { + super(name, basePrice, currency, shopOptions, displayName, `A held item that ${_attackBonus > 1 ? 'raises' : 'lowers'} the attack of ${pokemonDescription} by ${(Math.abs(_attackBonus - 1)).toLocaleString('en-US', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 })}${additionDescription}.`, regionUnlocked, canUse); + this._attackBonus = _attackBonus; + this.applyBonus = applyBonus; + } + get attackBonus() { + return this.applyBonus() ? this._attackBonus : 1; + } +} +class PokemonRestrictedAttackBonusHeldItem extends AttackBonusHeldItem { + constructor(name, basePrice, currency, shopOptions, displayName, _attackBonus, regionUnlocked, pokemonDescription, canUse) { + super(name, basePrice, currency, shopOptions, displayName, _attackBonus, regionUnlocked, pokemonDescription, canUse); + } +} +class TypeRestrictedAttackBonusHeldItem extends AttackBonusHeldItem { + constructor(name, basePrice, currency, shopOptions, displayName, _attackBonus, type, regionUnlocked) { + super(name, basePrice, currency, shopOptions, displayName, _attackBonus, regionUnlocked, `${GameHelper.anOrA(PokemonType[type])} ${PokemonType[type]}-type Pokémon`, (pokemon) => { + const dataPokemon = PokemonHelper.getPokemonById(pokemon.id); + return dataPokemon.type1 == type || dataPokemon.type2 == type; + }); + } +} +class HybridAttackBonusHeldItem extends AttackBonusHeldItem { + constructor(name, basePrice, currency, shopOptions, displayName, attackBonus, _clickAttackBonus, regionUnlocked, canUse = (pokemon) => true, applyBonus = () => true) { + super(name, basePrice, currency, shopOptions, displayName, attackBonus, regionUnlocked, undefined, canUse, applyBonus, ` and ${_clickAttackBonus > 1 ? 'raises' : 'lowers'} its click attack contribution by ${(Math.abs(_clickAttackBonus - 1) * 100).toFixed(0)}%`); + this._clickAttackBonus = _clickAttackBonus; + } + get clickAttackBonus() { + return this.applyBonus() ? this._clickAttackBonus : 1; + } +} +class EVsGainedBonusHeldItem extends HeldItem { + constructor(name, basePrice, currency, shopOptions, displayName, gainedBonus, regionUnlocked) { + super(name, basePrice, currency, shopOptions, displayName, `A held item that increases EV gains for the holding Pokémon by ${(gainedBonus - 1).toLocaleString('en-US', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 })}.`, regionUnlocked, (pokemon) => { + return pokemon.pokerus > GameConstants.Pokerus.Uninfected; + }); + this.gainedBonus = gainedBonus; + } +} +class ExpGainedBonusHeldItem extends HeldItem { + constructor(name, basePrice, currency, shopOptions, displayName, gainedBonus, regionUnlocked, pokemonDescription = 'the holding Pokémon', canUse = (pokemon) => true) { + super(name, basePrice, currency, shopOptions, displayName, `A held item that earns ${pokemonDescription} ${(gainedBonus - 1).toLocaleString('en-US', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 })} bonus Experience Points.`, regionUnlocked, canUse); + this.gainedBonus = gainedBonus; + } +} +ItemList.Wonder_Chest = new ExpGainedBonusHeldItem('Wonder_Chest', 10000, GameConstants.Currency.money, undefined, 'Wonder Chest', 1.25, GameConstants.Region.johto); +ItemList.Miracle_Chest = new ExpGainedBonusHeldItem('Miracle_Chest', 30000, GameConstants.Currency.money, { visible: new MaxRegionRequirement(GameConstants.Region.sinnoh) }, 'Miracle Chest', 1.5, GameConstants.Region.sinnoh); +ItemList.Joy_Scent = new ExpGainedBonusHeldItem('Joy_Scent', 10000, GameConstants.Currency.money, undefined, 'Joy Scent', 1.75, GameConstants.Region.hoenn, ' the holding Shadow Pokémon', (p) => p.shadow >= GameConstants.ShadowStatus.Shadow); +ItemList.Excite_Scent = new ExpGainedBonusHeldItem('Excite_Scent', 10000, GameConstants.Currency.money, undefined, 'Excite Scent', 2, GameConstants.Region.hoenn, 'the holding Shadow Pokémon', (p) => p.shadow >= GameConstants.ShadowStatus.Shadow); +ItemList.Vivid_Scent = new ExpGainedBonusHeldItem('Vivid_Scent', 10000, GameConstants.Currency.money, undefined, 'Vivid Scent', 2.5, GameConstants.Region.hoenn, 'the holding Shadow Pokémon', (p) => p.shadow >= GameConstants.ShadowStatus.Shadow); +ItemList.Muscle_Band = new AttackBonusHeldItem('Muscle_Band', 1000, GameConstants.Currency.battlePoint, undefined, 'Muscle Band', 1.05, GameConstants.Region.hoenn); +// Pokemon specific items +ItemList.Light_Ball = new PokemonRestrictedAttackBonusHeldItem('Light_Ball', 10000, GameConstants.Currency.money, undefined, 'Light Ball', 1.3, GameConstants.Region.johto, 'Pikachu', (pokemon) => Math.floor(pokemon.id) == 25); +ItemList.Lucky_Punch = new PokemonRestrictedAttackBonusHeldItem('Lucky_Punch', 10000, GameConstants.Currency.money, undefined, 'Lucky Punch', 1.3, GameConstants.Region.sinnoh, 'Happiny, Chansey or Blissey', (pokemon) => Math.floor(pokemon.id) == 440 || Math.floor(pokemon.id) == 113 || Math.floor(pokemon.id) == 242); +ItemList.Quick_Powder = new PokemonRestrictedAttackBonusHeldItem('Quick_Powder', 10000, GameConstants.Currency.money, undefined, 'Quick Powder', 1.3, GameConstants.Region.kalos, 'Ditto', (pokemon) => Math.floor(pokemon.id) == 132); +ItemList.Thick_Club = new PokemonRestrictedAttackBonusHeldItem('Thick_Club', 10000, GameConstants.Currency.money, undefined, 'Thick Club', 1.3, GameConstants.Region.alola, 'Cubone or Marowak', (pokemon) => Math.floor(pokemon.id) == 104 || Math.floor(pokemon.id) == 105); +ItemList.Soul_Dew = new PokemonRestrictedAttackBonusHeldItem('Soul_Dew', 10000, GameConstants.Currency.money, undefined, 'Soul Dew', 1.5, GameConstants.Region.hoenn, 'Latias or Latios', (pokemon) => Math.floor(pokemon.id) == 380 || Math.floor(pokemon.id) == 381); +ItemList.Adamant_Orb = new PokemonRestrictedAttackBonusHeldItem('Adamant_Orb', 10000, GameConstants.Currency.money, undefined, 'Adamant Orb', 1.5, GameConstants.Region.sinnoh, 'Dialga', (pokemon) => Math.floor(pokemon.id) == 483); +ItemList.Lustrous_Orb = new PokemonRestrictedAttackBonusHeldItem('Lustrous_Orb', 10000, GameConstants.Currency.money, undefined, 'Lustrous Orb', 1.5, GameConstants.Region.sinnoh, 'Palkia', (pokemon) => Math.floor(pokemon.id) == 484); +ItemList.Griseous_Orb = new PokemonRestrictedAttackBonusHeldItem('Griseous_Orb', 10000, GameConstants.Currency.money, undefined, 'Griseous Orb', 1.5, GameConstants.Region.sinnoh, 'Giratina', (pokemon) => Math.floor(pokemon.id) == 487); +ItemList.Burn_Drive = new PokemonRestrictedAttackBonusHeldItem('Burn_Drive', 10000, GameConstants.Currency.money, undefined, 'Burn Drive', 1.5, GameConstants.Region.unova, 'Genesect', (pokemon) => pokemon.id == 649 || pokemon.id == 649.01 || pokemon.id == 649.05 || pokemon.id == 649.06); +ItemList.Chill_Drive = new PokemonRestrictedAttackBonusHeldItem('Chill_Drive', 10000, GameConstants.Currency.money, undefined, 'Chill Drive', 1.5, GameConstants.Region.unova, 'Genesect', (pokemon) => pokemon.id == 649 || pokemon.id == 649.02 || pokemon.id == 649.05 || pokemon.id == 649.07); +ItemList.Douse_Drive = new PokemonRestrictedAttackBonusHeldItem('Douse_Drive', 10000, GameConstants.Currency.money, undefined, 'Douse Drive', 1.5, GameConstants.Region.unova, 'Genesect', (pokemon) => pokemon.id == 649 || pokemon.id == 649.03 || pokemon.id == 649.05 || pokemon.id == 649.08); +ItemList.Shock_Drive = new PokemonRestrictedAttackBonusHeldItem('Shock_Drive', 10000, GameConstants.Currency.money, undefined, 'Shock Drive', 1.5, GameConstants.Region.unova, 'Genesect', (pokemon) => pokemon.id == 649 || pokemon.id == 649.04 || pokemon.id == 649.05 || pokemon.id == 649.09); +ItemList.Leek = new PokemonRestrictedAttackBonusHeldItem('Leek', 10000, GameConstants.Currency.money, undefined, 'Leek', 1.3, GameConstants.Region.galar, 'Farfetch\'d or Sirfetch\'d', (pokemon) => Math.floor(pokemon.id) == 83 || Math.floor(pokemon.id) == 865); +ItemList.Rusted_Sword = new PokemonRestrictedAttackBonusHeldItem('Rusted_Sword', 10000, GameConstants.Currency.money, undefined, 'Rusted Sword', 1.5, GameConstants.Region.galar, 'Zacian', (pokemon) => Math.floor(pokemon.id) == 888); +ItemList.Rusted_Shield = new PokemonRestrictedAttackBonusHeldItem('Rusted_Shield', 10000, GameConstants.Currency.money, undefined, 'Rusted Shield', 1.5, GameConstants.Region.galar, 'Zamazenta', (pokemon) => Math.floor(pokemon.id) == 889); +ItemList.Wellspring_Mask = new PokemonRestrictedAttackBonusHeldItem('Wellspring_Mask', 10000, GameConstants.Currency.money, undefined, 'Wellspring Mask', 1.5, GameConstants.Region.paldea, 'Ogerpon', (pokemon) => pokemon.id == 1017 || pokemon.id == 1017.01 || pokemon.id == 1017.04 || pokemon.id == 1017.05); +ItemList.Hearthflame_Mask = new PokemonRestrictedAttackBonusHeldItem('Hearthflame_Mask', 10000, GameConstants.Currency.money, undefined, 'Hearthflame Mask', 1.5, GameConstants.Region.paldea, 'Ogerpon', (pokemon) => pokemon.id == 1017 || pokemon.id == 1017.02 || pokemon.id == 1017.04 || pokemon.id == 1017.06); +ItemList.Cornerstone_Mask = new PokemonRestrictedAttackBonusHeldItem('Cornerstone_Mask', 10000, GameConstants.Currency.money, undefined, 'Cornerstone Mask', 1.5, GameConstants.Region.paldea, 'Ogerpon', (pokemon) => pokemon.id == 1017 || pokemon.id == 1017.03 || pokemon.id == 1017.04 || pokemon.id == 1017.07); +ItemList.Booster_Energy = new PokemonRestrictedAttackBonusHeldItem('Booster_Energy', 10000, GameConstants.Currency.money, undefined, 'Booster Energy', 1.33, GameConstants.Region.paldea, /*16 Pokémon. Probably too many to list.*/ 'Paradox Pokémon', (pokemon) => [984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 1005, 1006, 1009, 1010, 1020, 1021, 1022, 1023].includes(Math.floor(pokemon.id))); +ItemList.Black_Belt = new TypeRestrictedAttackBonusHeldItem('Black_Belt', 10000, GameConstants.Currency.money, undefined, 'Black Belt', 1.2, PokemonType.Fighting, GameConstants.Region.johto); +ItemList.Black_Glasses = new TypeRestrictedAttackBonusHeldItem('Black_Glasses', 10000, GameConstants.Currency.money, undefined, 'Black Glasses', 1.2, PokemonType.Dark, GameConstants.Region.johto); +ItemList.Charcoal = new TypeRestrictedAttackBonusHeldItem('Charcoal', 10000, GameConstants.Currency.money, undefined, 'Charcoal', 1.2, PokemonType.Fire, GameConstants.Region.johto); +ItemList.Dragon_Fang = new TypeRestrictedAttackBonusHeldItem('Dragon_Fang', 10000, GameConstants.Currency.money, undefined, 'Dragon Fang', 1.2, PokemonType.Dragon, GameConstants.Region.johto); +ItemList.Magnet = new TypeRestrictedAttackBonusHeldItem('Magnet', 10000, GameConstants.Currency.money, undefined, 'Magnet', 1.2, PokemonType.Electric, GameConstants.Region.johto); +ItemList.Metal_Powder = new TypeRestrictedAttackBonusHeldItem('Metal_Powder', 10000, GameConstants.Currency.money, undefined, 'Metal Powder', 1.2, PokemonType.Steel, GameConstants.Region.johto); +ItemList.Miracle_Seed = new TypeRestrictedAttackBonusHeldItem('Miracle_Seed', 10000, GameConstants.Currency.money, undefined, 'Miracle Seed', 1.2, PokemonType.Grass, GameConstants.Region.johto); +ItemList.Mystic_Water = new TypeRestrictedAttackBonusHeldItem('Mystic_Water', 10000, GameConstants.Currency.money, undefined, 'Mystic Water', 1.2, PokemonType.Water, GameConstants.Region.johto); +ItemList.Never_Melt_Ice = new TypeRestrictedAttackBonusHeldItem('Never_Melt_Ice', 10000, GameConstants.Currency.money, undefined, 'Never-Melt Ice', 1.2, PokemonType.Ice, GameConstants.Region.johto); +ItemList.Fairy_Feather = new TypeRestrictedAttackBonusHeldItem('Fairy_Feather', 10000, GameConstants.Currency.money, undefined, 'Fairy Feather', 1.2, PokemonType.Fairy, GameConstants.Region.johto); +ItemList.Poison_Barb = new TypeRestrictedAttackBonusHeldItem('Poison_Barb', 10000, GameConstants.Currency.money, undefined, 'Poison Barb', 1.2, PokemonType.Poison, GameConstants.Region.johto); +ItemList.Rock_Incense = new TypeRestrictedAttackBonusHeldItem('Rock_Incense', 10000, GameConstants.Currency.money, undefined, 'Rock Incense', 1.2, PokemonType.Rock, GameConstants.Region.johto); +ItemList.Sharp_Beak = new TypeRestrictedAttackBonusHeldItem('Sharp_Beak', 10000, GameConstants.Currency.money, undefined, 'Sharp Beak', 1.2, PokemonType.Flying, GameConstants.Region.johto); +ItemList.Silk_Scarf = new TypeRestrictedAttackBonusHeldItem('Silk_Scarf', 10000, GameConstants.Currency.money, undefined, 'Silk Scarf', 1.2, PokemonType.Normal, GameConstants.Region.johto); +ItemList.Silver_Powder = new TypeRestrictedAttackBonusHeldItem('Silver_Powder', 10000, GameConstants.Currency.money, undefined, 'Silver Powder', 1.2, PokemonType.Bug, GameConstants.Region.johto); +ItemList.Soft_Sand = new TypeRestrictedAttackBonusHeldItem('Soft_Sand', 10000, GameConstants.Currency.money, undefined, 'Soft Sand', 1.2, PokemonType.Ground, GameConstants.Region.johto); +ItemList.Spell_Tag = new TypeRestrictedAttackBonusHeldItem('Spell_Tag', 10000, GameConstants.Currency.money, undefined, 'Spell Tag', 1.2, PokemonType.Ghost, GameConstants.Region.johto); +ItemList.Twisted_Spoon = new TypeRestrictedAttackBonusHeldItem('Twisted_Spoon', 10000, GameConstants.Currency.money, undefined, 'Twisted Spoon', 1.2, PokemonType.Psychic, GameConstants.Region.johto); +ItemList.Agile_Scroll = new HybridAttackBonusHeldItem('Agile_Scroll', 10000, GameConstants.Currency.money, undefined, 'Agile Scroll', 0.5, 2.0, GameConstants.Region.hisui); +ItemList.Strong_Scroll = new HybridAttackBonusHeldItem('Strong_Scroll', 10000, GameConstants.Currency.money, undefined, 'Strong Scroll', 2.0, 0.5, GameConstants.Region.hisui); +ItemList.Power_Herb = new AttackBonusHeldItem('Power_Herb', undefined, GameConstants.Currency.money, undefined, 'Power Herb', 1.5, GameConstants.Region.alola, undefined, (pokemon) => true, () => App.game.gameState == GameConstants.GameState.dungeon && DungeonRunner.fightingBoss(), ' against Dungeon Bosses'); +ItemList.Macho_Brace = new EVsGainedBonusHeldItem('Macho_Brace', 1500, GameConstants.Currency.questPoint, undefined, 'Macho Brace', 1.5, GameConstants.Region.sinnoh); +ItemList.Power_Bracer = new EVsGainedBonusHeldItem('Power_Bracer', 2000, GameConstants.Currency.questPoint, undefined, 'Power Bracer', 2, GameConstants.Region.alola); +ItemList.Everstone = new HeldItem('Everstone', 10000, GameConstants.Currency.money, undefined, 'Everstone', 'Stops the holder from evolving due to level or a stone being used. Also prevents new baby Pokémon from hatching.', GameConstants.Region.kanto, (pokemon) => { + var _a; + // level or stone evo + if ((_a = pokemon.evolutions) === null || _a === void 0 ? void 0 : _a.length) { + for (const evo of pokemon.evolutions) { + if (evo.trigger === EvoTrigger.LEVEL || evo.trigger === EvoTrigger.STONE) { + return true; + } + } + } + // babies + const baby = pokemonBabyPrevolutionMap[pokemon.name]; + return baby !== undefined && pokemon.name != baby; +}); +/// +class ZCrystalItem extends Item { + constructor(type) { + const description = `Allows ${PokemonType[type]}-type Pokémon to use Z-Moves for the next battle. They then need to rest a bit.`; + super(GameConstants.zCrystalItemType[type], Infinity, undefined, { maxAmount: 1 }, undefined, description, 'zCrystal'); + this.type = type; + } + use() { + App.game.zMoves.activate(this.type); + player.gainItem(this.name, 1); + return true; + } + isSoldOut() { + return ItemHandler.hasItem(this.name); + } + checkCanUse() { + if (App.game.challenges.list.disableBattleItems.active()) { + Notifier.notify({ + title: 'Challenge Mode', + message: 'Battle Items are Disabled', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + if (App.game.zMoves.isActive()) { + return false; + } + if (!ItemHandler.hasItem(this.name)) { + Notifier.notify({ + message: `You don't have the ${this.displayName}...`, + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + return true; + } +} +GameConstants.zCrystalItemType.forEach((name, type) => { + ItemList[name] = new ZCrystalItem(type); +}); +class MegaStone { + constructor(pokemonId, pokemonBaseAttack, pokemonAttack) { + this.pokemonId = pokemonId; + this.pokemonAttack = pokemonAttack; + this.saveKey = 'megastone'; + this.attackRequired = pokemonBaseAttack * 500; + } + getImage() { + return `assets/images/megaStone/${this.pokemonId}.png`; + } + getTooltipText() { + if (this.canEvolve()) { + return 'Use a Key Stone to Mega Evolve.'; + } + else { + return `Needs at least ${this.attackRequired.toLocaleString('en-US')} attack to Mega Evolve.`; + } + } + canEvolve() { + return this.pokemonAttack() >= this.attackRequired; + } +} +/// +/// +/// +class Party { + constructor(multiplier) { + this.multiplier = multiplier; + this.name = 'Pokemon Party'; + this.saveKey = 'party'; + this.defaults = { + caughtPokemon: [], + }; + this.pokemonAttackObservable = ko.pureComputed(() => { + return App.game.party.calculatePokemonAttack(); + }).extend({ rateLimit: 1000 }); + this._caughtPokemon = ko.observableArray([]); + this.hasMaxLevelPokemon = ko.pureComputed(() => { + return this.caughtPokemon.some(p => p.level === 100); + }).extend({ rateLimit: 1000 }); + this.hasShadowPokemon = ko.computed(() => { + return this.caughtPokemon.some(p => p.shadow === GameConstants.ShadowStatus.Shadow); + }).extend({ rateLimit: 1000 }); + // This will be completely rebuilt each time a pokemon is caught. + // Not ideal but still better than mutliple locations scanning through the list to find what they want + this._caughtPokemonLookup = ko.computed(() => { + return this.caughtPokemon.reduce((map, p) => { + map.set(p.id, p); + return map; + }, new Map()); + }); + this.calculateBaseClickAttack = ko.computed(() => { + // Base power + // Shiny pokemon help with a 100% boost + // Resistant pokemon give a 100% boost + let caughtPokemon = this.caughtPokemon; + if (player.region == GameConstants.Region.alola && player.subregion == GameConstants.AlolaSubRegions.MagikarpJump) { + // Only magikarps can attack in magikarp jump subregion + caughtPokemon = caughtPokemon.filter((p) => Math.floor(p.id) == 129); + } + const partyClickBonus = caughtPokemon.reduce((total, p) => total + p.clickAttackBonus(), 1); + return Math.pow(partyClickBonus, 1.4); + }); + } + gainPokemonByName(name, shiny = false, suppressNotification = false, gender = undefined, shadow = GameConstants.ShadowStatus.None) { + const pokemon = pokemonMap[name]; + this.gainPokemonById(pokemon.id, shiny, suppressNotification, gender, shadow); + } + gainPokemonById(id, shiny = false, suppressNotification = false, gender = PokemonFactory.generateGenderById(id), shadow = GameConstants.ShadowStatus.None) { + this.gainPokemon(PokemonFactory.generatePartyPokemon(id, shiny, gender, shadow), suppressNotification); + } + gainPokemon(pokemon, suppressNotification = false) { + PokemonHelper.incrementPokemonStatistics(pokemon.id, GameConstants.PokemonStatisticsType.Captured, pokemon.shiny, pokemon.gender, pokemon.shadow); + const alreadyCaughtRegular = this.alreadyCaughtPokemon(pokemon.id); + // Handle shadow + if (pokemon.shadow) { + const alreadyCaughtShadow = this.alreadyCaughtPokemon(pokemon.id, false, true); + // Only set the shadow status if we have the regular in our party it doesn't already have the shadow status + if (alreadyCaughtRegular && !alreadyCaughtShadow) { + this.getPokemon(pokemon.id).shadow = GameConstants.ShadowStatus.Shadow; + } + // Only log and notify the first time we catch a shadow pokemon + if (!alreadyCaughtShadow) { + App.game.logbook.newLog(LogBookTypes.CAUGHT, createLogContent.capturedShadow({ pokemon: pokemon.name })); + Notifier.notify({ + message: `You have captured a shadow ${pokemon.displayName}!`, + type: NotificationConstants.NotificationOption.warning, + sound: NotificationConstants.NotificationSound.General.new_catch, + setting: NotificationConstants.NotificationSetting.General.new_catch, + }); + } + } + // Handle shiny + if (pokemon.shiny) { + const alreadyCaughtShiny = this.alreadyCaughtPokemon(pokemon.id, true); + // Only set the shiny status if we have the regular in our party it doesn't already have the shiny status + if (alreadyCaughtRegular && !alreadyCaughtShiny) { + this.getPokemon(pokemon.id).shiny = true; + } + // If we already have the shiny, log it + // If we catch a new shiny, log it and notify + if (alreadyCaughtShiny) { + App.game.logbook.newLog(LogBookTypes.CAUGHT, createLogContent.capturedShinyDupe({ pokemon: pokemon.name })); + } + else { + App.game.logbook.newLog(LogBookTypes.CAUGHT, createLogContent.capturedShiny({ pokemon: pokemon.name })); + Notifier.notify({ + message: `✨ You have captured a shiny ${pokemon.displayName}! ✨`, + pokemonImage: PokemonHelper.getImage(pokemon.id, pokemon.shiny, pokemon.gender), + type: NotificationConstants.NotificationOption.warning, + sound: NotificationConstants.NotificationSound.General.new_catch, + setting: NotificationConstants.NotificationSetting.General.new_catch, + }); + } + } + // Handle the regular + if (!alreadyCaughtRegular) { + // We don't have this pokemon in our party yet, so add it + this._caughtPokemon.push(pokemon); + // Handle logging and notifying + App.game.logbook.newLog(LogBookTypes.CAUGHT, createLogContent.captured({ pokemon: pokemon.name })); + if (!suppressNotification) { + Notifier.notify({ + message: `You have captured ${GameHelper.anOrA(pokemon.name)} ${pokemon.displayName}!`, + pokemonImage: PokemonHelper.getImage(pokemon.id, pokemon.shiny, pokemon.gender), + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.General.new_catch, + setting: NotificationConstants.NotificationSetting.General.new_catch, + }); + } + } + } + removePokemonByName(name) { + this._caughtPokemon.remove(p => p.name == name); + } + gainExp(exp = 0, level = 1, trainer = false) { + const multBonus = this.multiplier.getBonus('exp', true); + const trainerBonus = trainer ? 1.5 : 1; + const expTotal = Math.floor(exp * level * trainerBonus * multBonus / 9); + let shadowExpGained = 0; + for (const pokemon of this.caughtPokemon) { + const exp = pokemon.gainExp(expTotal); + if (pokemon.shadow >= GameConstants.ShadowStatus.Shadow) { + shadowExpGained += exp; + } + } + App.game.purifyChamber.gainFlow(shadowExpGained); + } + /** + * Calculate the attack of all your Pokémon + * @param type1 + * @param type2 types of the enemy we're calculating damage against. + * @returns {number} damage to be done. + */ + calculatePokemonAttack(type1 = PokemonType.None, type2 = PokemonType.None, ignoreRegionMultiplier = false, region = player.region, includeBreeding = false, useBaseAttack = false, overrideWeather, ignoreLevel = false, includeTempBonuses = true, subregion = player.subregion) { + let attack = 0; + let pokemon = this.caughtPokemon; + if (region == GameConstants.Region.alola && subregion == GameConstants.AlolaSubRegions.MagikarpJump) { + // Only magikarps can attack in magikarp jump + pokemon = pokemon.filter(p => Math.floor(p.id) == 129); + } + for (const p of pokemon) { + attack += this.calculateOnePokemonAttack(p, type1, type2, region, ignoreRegionMultiplier, includeBreeding, useBaseAttack, overrideWeather, ignoreLevel, includeTempBonuses); + } + const bonus = this.multiplier.getBonus('pokemonAttack'); + return Math.round(attack * bonus); + } + calculateOnePokemonAttack(pokemon, type1 = PokemonType.None, type2 = PokemonType.None, region = player.region, ignoreRegionMultiplier = false, includeBreeding = false, useBaseAttack = false, overrideWeather, ignoreLevel = false, includeTempBonuses = true) { + var _a; + let multiplier = 1, attack = 0; + const pAttack = useBaseAttack ? pokemon.baseAttack : (ignoreLevel ? pokemon.calculateAttack(ignoreLevel) : pokemon.attack); + const nativeRegion = PokemonHelper.calcNativeRegion(pokemon.name); + const dataPokemon = PokemonHelper.getPokemonByName(pokemon.name); + // Check if the pokemon is in their native region + if (!ignoreRegionMultiplier && nativeRegion != region && nativeRegion != GameConstants.Region.none) { + // Check if the challenge mode is active + if (App.game.challenges.list.regionalAttackDebuff.active()) { + // Pokemon only retain a % of their total damage in other regions based on highest region. + multiplier = this.getRegionAttackMultiplier(); + } + } + // Check if the Pokemon is currently breeding (no attack) + if (includeBreeding || !pokemon.breeding) { + if (type1 == PokemonType.None) { + attack = pAttack * multiplier; + } + else { + attack = pAttack * TypeHelper.getAttackModifier(dataPokemon.type1, dataPokemon.type2, type1, type2) * multiplier; + } + } + // Weather boost + const weather = Weather.weatherConditions[overrideWeather !== null && overrideWeather !== void 0 ? overrideWeather : Weather.currentWeather()]; + (_a = weather.multipliers) === null || _a === void 0 ? void 0 : _a.forEach(value => { + if (value.type == dataPokemon.type1) { + attack *= value.multiplier; + } + if (value.type == dataPokemon.type2) { + attack *= value.multiplier; + } + }); + // Should we take flute boost into account + if (includeTempBonuses) { + FluteEffectRunner.activeGemTypes().forEach(value => { + if (value == dataPokemon.type1) { + attack *= GameConstants.FLUTE_TYPE_ATTACK_MULTIPLIER; + } + if (value == dataPokemon.type2) { + attack *= GameConstants.FLUTE_TYPE_ATTACK_MULTIPLIER; + } + }); + attack *= App.game.zMoves.getMultiplier(dataPokemon.type1, dataPokemon.type2); + } + return attack; + } + getRegionAttackMultiplier(highestRegion = player.highestRegion()) { + // between 0.2 -> 1 based on highest region + return Math.min(1, Math.max(0.2, 0.1 + (highestRegion / 10))); + } + calculateEffortPoints(pokemon, shiny, shadow, number = GameConstants.BASE_EP_YIELD, ignore = false) { + if (pokemon.pokerus < GameConstants.Pokerus.Contagious) { + return 0; + } + if (ignore) { + return 0; + } + let EPNum = number * App.game.multiplier.getBonus('ev'); + if (pokemon.heldItem() && pokemon.heldItem() instanceof EVsGainedBonusHeldItem) { + EPNum *= pokemon.heldItem().gainedBonus; + } + if (shiny) { + EPNum *= GameConstants.SHINY_EP_MODIFIER; + } + if (shadow == GameConstants.ShadowStatus.Shadow) { + EPNum *= GameConstants.SHADOW_EP_MODIFIER; + } + return Math.floor(EPNum); + } + getPokemon(id) { + return this._caughtPokemonLookup().get(id); + } + getPokemonByName(name) { + return this._caughtPokemonLookup().get(pokemonMap[name].id); + } + alreadyCaughtPokemonByName(name, shiny = false) { + return this.alreadyCaughtPokemon(PokemonHelper.getPokemonByName(name).id, shiny); + } + alreadyCaughtPokemon(id, shiny = false, shadow = false, purified = false) { + const pokemon = this.getPokemon(id); + if (pokemon) { + const shinyOkay = (!shiny || pokemon.shiny); + const shadowOkay = (!shadow || (pokemon.shadow > GameConstants.ShadowStatus.None)); + const purifiedOkay = (!purified || (pokemon.shadow == GameConstants.ShadowStatus.Purified)); + return shinyOkay && shadowOkay && purifiedOkay; + } + return false; + } + calculateClickAttack(useItem = false) { + const clickAttack = this.calculateBaseClickAttack(); + const bonus = this.multiplier.getBonus('clickAttack', useItem); + return Math.floor(clickAttack * bonus); + } + canAccess() { + return true; + } + fromJSON(json) { + if (json == null) { + return; + } + const caughtPokemonSave = json.caughtPokemon; + for (let i = 0; i < caughtPokemonSave.length; i++) { + const partyPokemon = PokemonFactory.generatePartyPokemon(caughtPokemonSave[i].id); + partyPokemon.fromJSON(caughtPokemonSave[i]); + this._caughtPokemon.push(partyPokemon); + } + } + initialize() { + } + toJSON() { + return { + caughtPokemon: this._caughtPokemon().map(x => x.toJSON()), + }; + } + update(delta) { + // This method intentionally left blank + } + get caughtPokemon() { + return this._caughtPokemon(); + } +} +/// +var PartyPokemonSaveKeys; +(function (PartyPokemonSaveKeys) { + PartyPokemonSaveKeys[PartyPokemonSaveKeys["attackBonusPercent"] = 0] = "attackBonusPercent"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["attackBonusAmount"] = 1] = "attackBonusAmount"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["vitaminsUsed"] = 2] = "vitaminsUsed"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["exp"] = 3] = "exp"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["breeding"] = 4] = "breeding"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["shiny"] = 5] = "shiny"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["category"] = 6] = "category"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["levelEvolutionTriggered"] = 7] = "levelEvolutionTriggered"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["pokerus"] = 8] = "pokerus"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["effortPoints"] = 9] = "effortPoints"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["heldItem"] = 10] = "heldItem"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["defaultFemaleSprite"] = 11] = "defaultFemaleSprite"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["hideShinyImage"] = 12] = "hideShinyImage"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["nickname"] = 13] = "nickname"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["shadow"] = 14] = "shadow"; + PartyPokemonSaveKeys[PartyPokemonSaveKeys["showShadowImage"] = 15] = "showShadowImage"; +})(PartyPokemonSaveKeys || (PartyPokemonSaveKeys = {})); +class PartyPokemon { + constructor(id, name, evolutions, baseAttack, eggCycles, shiny = false, gender, shadow) { + this.id = id; + this.name = name; + this.evolutions = evolutions; + this.baseAttack = baseAttack; + this.eggCycles = eggCycles; + this.gender = gender; + this.exp = 0; + this.defaults = { + attackBonusPercent: 0, + attackBonusAmount: 0, + vitaminsUsed: {}, + exp: 0, + breeding: false, + shiny: false, + category: [0], + levelEvolutionTriggered: false, + pokerus: GameConstants.Pokerus.Uninfected, + effortPoints: 0, + defaultFemaleSprite: false, + hideShinyImage: false, + nickname: '', + shadow: GameConstants.ShadowStatus.None, + showShadowImage: false, + }; + this.clickAttackBonus = ko.pureComputed(() => { + // Caught + Shiny + Resistant + Purified + const bonus = 1 + +this.shiny + +(this.pokerus >= GameConstants.Pokerus.Resistant) + +(this.shadow == GameConstants.ShadowStatus.Purified); + const heldItemMultiplier = this.heldItem() instanceof HybridAttackBonusHeldItem ? this.heldItem().clickAttackBonus : 1; + return bonus * heldItemMultiplier; + }); + this.totalVitaminsUsed = ko.pureComputed(() => { + return Object.values(this.vitaminsUsed).reduce((sum, obs) => sum + obs(), 0); + }); + this.vitaminUsesRemaining = ko.pureComputed(() => { + // Allow 5 for every region visited (including Kanto) + return (player.highestRegion() + 1) * 5 - this.totalVitaminsUsed(); + }); + this.calculateEVAttackBonus = ko.pureComputed(() => { + if (this.pokerus < GameConstants.Pokerus.Contagious) { + return 1; + } + return (this.evs() < 50) ? (1 + 0.01 * this.evs()) : (Math.pow(this.evs(), Math.log(1.5) / Math.log(50))); + }); + this.getEggSteps = ko.pureComputed(() => { + const div = 300; + const extraCycles = (this.vitaminsUsed[GameConstants.VitaminType.Calcium]() + this.vitaminsUsed[GameConstants.VitaminType.Protein]()) / 2; + const steps = App.game.breeding.getSteps(this.eggCycles + extraCycles); + return steps <= div ? steps : Math.round((Math.pow((steps / div), (1 - this.vitaminsUsed[GameConstants.VitaminType.Carbos]() / 70))) * div); + }); + this.getBreedingAttackBonus = ko.pureComputed(() => { + const attackBonusPercent = (GameConstants.BREEDING_ATTACK_BONUS + this.vitaminsUsed[GameConstants.VitaminType.Calcium]()) / 100; + const proteinBoost = this.vitaminsUsed[GameConstants.VitaminType.Protein](); + let attackBonus = (this.baseAttack * attackBonusPercent) + proteinBoost; + if (Settings.getSetting('breedingEfficiencyAllModifiers').observableValue()) { + attackBonus *= this.calculateEVAttackBonus() * this.heldItemAttackBonus() * this.shadowAttackBonus(); + } + return attackBonus; + }); + this.heldItemAttackBonus = ko.pureComputed(() => { + return this.heldItem && this.heldItem() instanceof AttackBonusHeldItem ? this.heldItem().attackBonus : 1; + }); + this.shadowAttackBonus = ko.pureComputed(() => { + return this.shadow == GameConstants.ShadowStatus.Shadow ? 0.8 : (this.shadow == GameConstants.ShadowStatus.Purified ? 1.2 : 1); + }); + this.breedingEfficiency = ko.pureComputed(() => { + const breedingAttackBonus = this.getBreedingAttackBonus(); + return (breedingAttackBonus / this.getEggSteps()) * GameConstants.EGG_CYCLE_MULTIPLIER; + }); + this.isHatchable = ko.pureComputed(() => { + return !(this.breeding || this.level < 100); + }); + this.isHatchableFiltered = ko.pureComputed(() => { + return this.isHatchable() && this.matchesHatcheryFilters(); + }); + this.matchesHatcheryFilters = ko.pureComputed(() => { + // Check if search matches englishName or displayName + const nameFilterSetting = Settings.getSetting('breedingNameFilter'); + if (nameFilterSetting.observableValue() != '') { + const nameFilter = nameFilterSetting.regex(); + const displayName = PokemonHelper.displayName(this.name)(); + const partyName = this.displayName; + if (!nameFilter.test(displayName) && !nameFilter.test(this.name) && !(partyName != undefined && nameFilter.test(partyName))) { + return false; + } + } + // Check if search matches species number + const idFilter = Settings.getSetting('breedingIDFilter').observableValue(); + if (idFilter > -1 && idFilter != Math.floor(this.id)) { + return false; + } + // Check based on categories + const categoryFilter = Settings.getSetting('breedingCategoryFilter').observableValue(); + // Categorized only + if (categoryFilter == -2 && this.isUncategorized()) { + return false; + } + // Selected category + if (categoryFilter >= 0 && !this.category.includes(categoryFilter)) { + return false; + } + // Check based on shiny status + const shinyFilter = Settings.getSetting('breedingShinyFilter').observableValue(); + if (shinyFilter >= 0 && +this.shiny !== shinyFilter) { + return false; + } + // Check based on native region + const unlockedRegionsMask = (2 << player.highestRegion()) - 1; + const regionFilterMask = Settings.getSetting('breedingRegionFilter').observableValue() & unlockedRegionsMask; + if (regionFilterMask !== unlockedRegionsMask) { + const nativeRegion = PokemonHelper.calcNativeRegion(this.name); + // With the region filter active, regionless pokemon should be shown only if no regions are selected + const nativeRegionInFilter = nativeRegion !== GameConstants.Region.none ? + (1 << nativeRegion) & regionFilterMask : + regionFilterMask === 0; + if (!nativeRegionInFilter) { + return false; + } + } + // Check based on Pokerus status + const pokerusFilter = Settings.getSetting('breedingPokerusFilter').observableValue(); + if (pokerusFilter > -1 && this.pokerus !== pokerusFilter) { + return false; + } + const uniqueTransformationFilter = Settings.getSetting('breedingUniqueTransformationFilter').observableValue(); + const pokemon = PokemonHelper.getPokemonById(this.id); + // Only Base Pokémon with Mega available + if (uniqueTransformationFilter == 'mega-available' && !PokemonHelper.hasMegaEvolution(pokemon.name)) { + return false; + } + // Only Base Pokémon without Mega Evolution + if (uniqueTransformationFilter == 'mega-unobtained' && !PokemonHelper.hasUncaughtMegaEvolution(pokemon.name)) { + return false; + } + // Only Mega Pokémon + if (uniqueTransformationFilter == 'mega-evolution' && !PokemonHelper.isMegaEvolution(pokemon.name)) { + return false; + } + // Check to exclude alternate forms + const hideAltFilter = Settings.getSetting('breedingHideAltFilter').observableValue(); + if (hideAltFilter && !Number.isInteger(pokemon.id)) { + // Don't exclude alt forms native to a different region, as they're considered a main form for that region's progression + const nativeRegion = PokemonHelper.calcNativeRegion(this.name); + const hasBaseFormInSameRegion = pokemonList.some((p) => Math.floor(p.id) == Math.floor(pokemon.id) && p.id < pokemon.id && PokemonHelper.calcNativeRegion(p.name) == nativeRegion); + if (hasBaseFormInSameRegion) { + return false; + } + } + // Check if either of the types match + const type1 = Settings.getSetting('breedingType1Filter').observableValue(); + const type2 = Settings.getSetting('breedingType2Filter').observableValue(); + if (type1 !== null || type2 !== null) { + const { type: types } = pokemonMap[this.name]; + if ([type1, type2].includes(PokemonType.None)) { + const type = (type1 == PokemonType.None) ? type2 : type1; + if (!BreedingController.isPureType(this, type)) { + return false; + } + } + else if ((type1 !== null && !types.includes(type1)) || (type2 !== null && !types.includes(type2))) { + return false; + } + } + return true; + }); + this.giveHeldItem = (heldItem) => { + if (!this.heldItem() || heldItem.name != this.heldItem().name) { + if (heldItem && !heldItem.canUse(this)) { + Notifier.notify({ + message: `This Pokémon cannot use ${heldItem.displayName}.`, + type: NotificationConstants.NotificationOption.warning, + }); + return; + } + if (player.amountOfItem(heldItem.name) < 1) { + Notifier.notify({ + message: `You don't have any ${heldItem.displayName} left.`, + type: NotificationConstants.NotificationOption.warning, + }); + return; + } + } + if (this.heldItem() && Settings.getSetting('confirmChangeHeldItem').value) { + Notifier.confirm({ + title: 'Remove held item', + message: 'Held items are one time use only.\nRemoved items will be lost.\nAre you sure you want to remove it?', + confirm: 'Remove', + type: NotificationConstants.NotificationOption.warning, + }).then((confirmed) => { + if (confirmed) { + this.addOrRemoveHeldItem(heldItem); + } + }); + } + else { // Notifier.confirm is async + this.addOrRemoveHeldItem(heldItem); + } + }; + this.isUncategorized = ko.pureComputed(() => this.category[0] === 0 && this.category.length === 1); + this.vitaminsUsed = Object.fromEntries(GameHelper.enumNumbers(GameConstants.VitaminType).map((vitamin) => { + return [vitamin, ko.observable(0).extend({ numeric: 0 })]; + })); + this._breeding = ko.observable(false).extend({ boolean: null }); + this._shiny = ko.observable(shiny).extend({ boolean: null }); + this._level = ko.observable(1).extend({ numeric: 0 }); + this._attackBonusPercent = ko.observable(0).extend({ numeric: 0 }); + this._attackBonusAmount = ko.observable(0).extend({ numeric: 0 }); + this._category = ko.observableArray([0]); + this._translatedName = PokemonHelper.displayName(name); + this._pokerus = ko.observable(GameConstants.Pokerus.Uninfected).extend({ numeric: 0 }); + this._effortPoints = ko.observable(0).extend({ numeric: 0 }); + this.evs = ko.pureComputed(() => { + return Math.floor(this.calculateEVs()); + }); + const resistantSub = this.evs.subscribe((newValue) => { + // Change Pokerus status to Resistant when reaching 50 EVs + if (this.pokerus && newValue >= 50) { + // Only notify if not yet Resistant, i.e. not when game loads already-Resistant party members + if (this.pokerus < GameConstants.Pokerus.Resistant) { + this.pokerus = GameConstants.Pokerus.Resistant; + // Log and notify player + Notifier.notify({ + message: `${this.name} has become Resistant to Pokérus.`, + pokemonImage: PokemonHelper.getImage(this.id), + type: NotificationConstants.NotificationOption.info, + sound: NotificationConstants.NotificationSound.General.pokerus, + setting: NotificationConstants.NotificationSetting.General.pokerus, + }); + App.game.logbook.newLog(LogBookTypes.NEW, createLogContent.resistantToPokerus({ pokemon: this.name })); + } + resistantSub.dispose(); + } + }); + this.heldItem = ko.observable(undefined); + this.defaultFemaleSprite = ko.observable(false); + this.hideShinyImage = ko.observable(false); + this._nickname = ko.observable(); + this._displayName = ko.pureComputed(() => this._nickname() ? this._nickname() : this._translatedName()); + this._shadow = ko.observable(shadow); + this._showShadowImage = ko.observable(false); + this._attack = ko.computed(() => this.calculateAttack()); + this._canUseHeldItem = ko.pureComputed(() => { var _a; return (_a = this.heldItem()) === null || _a === void 0 ? void 0 : _a.canUse(this); }); + this._canUseHeldItem.subscribe((canUse) => { + if (!canUse && this.heldItem()) { + this.addOrRemoveHeldItem(this.heldItem()); + } + }); + this._category.subscribe((newValue) => { + if (!newValue.length) { + this._category.push(0); // add None category + } + else if (newValue.length > 1) { + this.removeCategory(0); // remove None category + } + }); + } + calculateAttack(ignoreLevel = false) { + const attackBonusMultiplier = 1 + (this.attackBonusPercent / 100); + const levelMultiplier = ignoreLevel ? 1 : this.level / 100; + const evsMultiplier = this.calculateEVAttackBonus(); + const heldItemMultiplier = this.heldItemAttackBonus(); + const shadowMultiplier = this.shadowAttackBonus(); + return Math.max(1, Math.floor((this.baseAttack * attackBonusMultiplier + this.attackBonusAmount) * levelMultiplier * evsMultiplier * heldItemMultiplier * shadowMultiplier)); + } + canCatchPokerus() { + return App.game.keyItems.hasKeyItem(KeyItemType.Pokerus_virus); + } + calculatePokerusTypes() { + var _a; + // Egg can't hatch and valid Egg has pokerus + const eggTypes = new Set(); + for (let i = 0; i < App.game.breeding.eggList.length; i++) { + if (i > App.game.breeding.hatcheryHelpers.hired().length - 1) { + const egg = App.game.breeding.eggList[i](); + if (!egg.canHatch() && !egg.isNone()) { + const pokerus = (_a = App.game.party.getPokemon(pokemonMap[egg.pokemon].id)) === null || _a === void 0 ? void 0 : _a.pokerus; + if (pokerus && pokerus >= GameConstants.Pokerus.Contagious) { + eggTypes.add(PokemonHelper.getPokemonByName(pokemonMap[App.game.breeding.eggList[i]().pokemon].name).type1); + eggTypes.add(PokemonHelper.getPokemonByName(pokemonMap[App.game.breeding.eggList[i]().pokemon].name).type2); + } + } + } + } + if (eggTypes.has(PokemonType.None)) { + eggTypes.delete(PokemonType.None); + } + return eggTypes; + } + calculatePokerus(index) { + const eggTypes = this.calculatePokerusTypes(); + for (let i = index; i < App.game.breeding.eggList.length; i++) { + const pokemon = App.game.breeding.eggList[i]().partyPokemon(); + if (pokemon && pokemon.pokerus == GameConstants.Pokerus.Uninfected) { + const dataPokemon = PokemonHelper.getPokemonByName(pokemon.name); + if (eggTypes.has(dataPokemon.type1) || eggTypes.has(dataPokemon.type2)) { + pokemon.pokerus = GameConstants.Pokerus.Infected; + } + } + } + } + calculateLevelFromExp() { + const levelType = PokemonHelper.getPokemonByName(this.name).levelType; + for (let i = this.level - 1; i < levelRequirements[levelType].length; i++) { + if (levelRequirements[levelType][i] > this.exp) { + return Math.min(i, App.game.badgeCase.maxLevel()); + } + } + return this.level; + } + calculateEVs() { + const power = App.game.challenges.list.slowEVs.active.peek() ? GameConstants.EP_CHALLENGE_MODIFIER : 1; + return this._effortPoints() / GameConstants.EP_EV_RATIO / power; + } + gainExp(exp) { + const expGained = exp * this.getExpMultiplier(); + if (this.level < App.game.badgeCase.maxLevel()) { + this.exp += expGained; + const oldLevel = this.level; + const newLevel = this.calculateLevelFromExp(); + if (oldLevel !== newLevel) { + this.level = newLevel; + this.checkForLevelEvolution(); + } + } + return expGained; + } + getExpMultiplier() { + let result = 1; + if (this.heldItem() && this.heldItem() instanceof ExpGainedBonusHeldItem) { + result *= this.heldItem().gainedBonus; + } + return result; + } + gainLevels(amount) { + if (amount < 0) { + throw new Error(`PartyPokemon ${this.name} cannot gain negative levels!`); + } + const oldLevel = this.level; + const newLevel = Math.min(this.level + amount, App.game.badgeCase.maxLevel()); + if (oldLevel !== newLevel) { + this.level = newLevel; + // Adjust exp to match + const levelType = PokemonHelper.getPokemonByName(this.name).levelType; + this.exp = levelRequirements[levelType][newLevel - 1]; + // Just leveled up so... + this.checkForLevelEvolution(); + } + return newLevel - oldLevel; + } + checkForLevelEvolution() { + if (this.breeding || this.evolutions == null || this.evolutions.length == 0) { + return; + } + for (const evo of this.evolutions) { + if (evo.trigger === EvoTrigger.LEVEL && EvolutionHandler.isSatisfied(evo)) { + EvolutionHandler.evolve(evo); + } + } + } + canUseStone(stoneType) { + var _a; + return ((_a = this.evolutions) === null || _a === void 0 ? void 0 : _a.filter((evo) => evo.trigger === EvoTrigger.STONE + && evo.stone == stoneType + && EvolutionHandler.isSatisfied(evo)).length) > 0; + } + useStone(stoneType) { + const possibleEvolutions = []; + for (const evo of this.evolutions) { + if (evo.trigger === EvoTrigger.STONE && evo.stone == stoneType && EvolutionHandler.isSatisfied(evo)) { + possibleEvolutions.push(evo); + } + } + if (possibleEvolutions.length !== 0) { + return EvolutionHandler.evolve(Rand.fromArray(possibleEvolutions)); + } + return false; + } + useVitamin(vitamin, amount) { + if (App.game.challenges.list.disableVitamins.active()) { + Notifier.notify({ + title: 'Challenge Mode', + message: 'Vitamins are disabled', + type: NotificationConstants.NotificationOption.danger, + }); + return; + } + if (this.breeding) { + Notifier.notify({ + message: 'Vitamins cannot be modified for Pokémon in the hatchery or queue.', + type: NotificationConstants.NotificationOption.warning, + }); + return; + } + const usesRemaining = this.vitaminUsesRemaining(); + // If no more vitamins can be used on this Pokemon + if (!usesRemaining) { + Notifier.notify({ + message: 'This Pokémon cannot increase their power any higher!', + type: NotificationConstants.NotificationOption.warning, + }); + return; + } + // The lowest number of amount they want to use, total in inventory, uses remaining for this Pokemon + amount = Math.min(amount, player.itemList[GameConstants.VitaminType[vitamin]](), usesRemaining); + // Apply the vitamin + if (ItemHandler.useItem(GameConstants.VitaminType[vitamin], amount)) { + GameHelper.incrementObservable(this.vitaminsUsed[vitamin], amount); + } + } + removeVitamin(vitamin, amount) { + if (this.breeding) { + Notifier.notify({ + message: 'Vitamins cannot be modified for Pokémon in the hatchery or queue.', + type: NotificationConstants.NotificationOption.warning, + }); + return; + } + const vitaminName = GameConstants.VitaminType[vitamin]; + amount = Math.min(amount, this.vitaminsUsed[vitamin]()); + if (amount <= 0) { + Notifier.notify({ + message: `This Pokémon doesn't have any ${vitaminName} to remove!`, + type: NotificationConstants.NotificationOption.warning, + }); + return; + } + GameHelper.incrementObservable(this.vitaminsUsed[vitamin], -amount); + GameHelper.incrementObservable(player.itemList[vitaminName], amount); + } + useConsumable(type, amount) { + var _a; + const itemName = GameConstants.ConsumableType[type]; + if (!player.itemList[itemName]()) { + return Notifier.notify({ + message: `You do not have any more ${ItemList[itemName].displayName}`, + type: NotificationConstants.NotificationOption.danger, + }); + } + switch (type) { + case GameConstants.ConsumableType.Rare_Candy: + case GameConstants.ConsumableType.Magikarp_Biscuit: + amount = Math.min(amount, player.itemList[itemName]()); + if (this.breeding) { + return Notifier.notify({ + message: `You cannot use ${ItemList[itemName].displayName} on Pokémon in the hatchery.`, + type: NotificationConstants.NotificationOption.danger, + }); + } + const curAttack = this.calculateAttack(true); + const bonus = GameConstants.BREEDING_ATTACK_BONUS * ((_a = ItemList[itemName].bonusMultiplier) !== null && _a !== void 0 ? _a : 1); + GameHelper.incrementObservable(this._attackBonusPercent, bonus * amount); + Notifier.notify({ + message: `${this.displayName} gained ${this.calculateAttack(true) - curAttack} attack points`, + type: NotificationConstants.NotificationOption.success, + pokemonImage: PokemonHelper.getImage(this.id), + }); + const levelsGained = this.gainLevels(amount); + if (levelsGained === 0) { + // Rare Candies cause level evolutions even at max level + this.checkForLevelEvolution(); + } + break; + default: + } + GameHelper.incrementObservable(player.itemList[itemName], -amount); + Notifier.notify({ + message: `You used ${amount} of ${ItemList[itemName].displayName}`, + type: NotificationConstants.NotificationOption.success, + image: ItemList[itemName].image, + }); + } + addOrRemoveHeldItem(heldItem) { + if (this.heldItem() && this.heldItem().name == heldItem.name) { + this.heldItem(undefined); + } + else { + player.loseItem(heldItem.name, 1); + this.heldItem(heldItem); + } + } + addCategory(id) { + if (id === 0) { + this.resetCategory(); + } + else if (!this.category.includes(id)) { + this._category.push(id); + } + } + removeCategory(id) { + if (id === 0 && this.category.length === 1) { + // Can't remove None category without another category present + return; + } + const index = this.category.indexOf(id); + if (index > -1) { + this._category.splice(index, 1); + } + } + toggleCategory(id) { + if (this.category.includes(id)) { + this.removeCategory(id); + } + else { + this.addCategory(id); + } + } + resetCategory() { + this.category = [...this.defaults.category]; + } + getCategorySortValues() { + return PokemonCategories.categories().map((c, i) => [c.id, i]) + .filter(([id, _]) => this.category.includes(id)) + .map(([_, index]) => index); + } + fromJSON(json) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; + if (json == null) { + return; + } + if (json.id == null) { + return; + } + this.attackBonusPercent = (_a = json[PartyPokemonSaveKeys.attackBonusPercent]) !== null && _a !== void 0 ? _a : this.defaults.attackBonusPercent; + this.attackBonusAmount = (_b = json[PartyPokemonSaveKeys.attackBonusAmount]) !== null && _b !== void 0 ? _b : this.defaults.attackBonusAmount; + if (json[PartyPokemonSaveKeys.vitaminsUsed]) { + Object.entries(json[PartyPokemonSaveKeys.vitaminsUsed]).forEach(([i, v]) => { + this.vitaminsUsed[i](v !== null && v !== void 0 ? v : 0); + }); + } + this.exp = (_c = json[PartyPokemonSaveKeys.exp]) !== null && _c !== void 0 ? _c : this.defaults.exp; + this.breeding = (_d = json[PartyPokemonSaveKeys.breeding]) !== null && _d !== void 0 ? _d : this.defaults.breeding; + this.shiny = (_e = json[PartyPokemonSaveKeys.shiny]) !== null && _e !== void 0 ? _e : this.defaults.shiny; + this.category = (_f = json[PartyPokemonSaveKeys.category]) !== null && _f !== void 0 ? _f : [...this.defaults.category]; + this.level = this.calculateLevelFromExp(); + this.pokerus = (_g = json[PartyPokemonSaveKeys.pokerus]) !== null && _g !== void 0 ? _g : this.defaults.pokerus; + this.effortPoints = (_h = json[PartyPokemonSaveKeys.effortPoints]) !== null && _h !== void 0 ? _h : this.defaults.effortPoints; + this.heldItem(json[PartyPokemonSaveKeys.heldItem] && ItemList[json[PartyPokemonSaveKeys.heldItem]] instanceof HeldItem ? ItemList[json[PartyPokemonSaveKeys.heldItem]] : undefined); + this.defaultFemaleSprite((_j = json[PartyPokemonSaveKeys.defaultFemaleSprite]) !== null && _j !== void 0 ? _j : this.defaults.defaultFemaleSprite); + this.hideShinyImage((_k = json[PartyPokemonSaveKeys.hideShinyImage]) !== null && _k !== void 0 ? _k : this.defaults.hideShinyImage); + this._nickname(json[PartyPokemonSaveKeys.nickname] || this.defaults.nickname); + this.shadow = (_l = json[PartyPokemonSaveKeys.shadow]) !== null && _l !== void 0 ? _l : this.defaults.shadow; + this._showShadowImage((_m = json[PartyPokemonSaveKeys.showShadowImage]) !== null && _m !== void 0 ? _m : this.defaults.showShadowImage); + } + toJSON() { + var _a; + const output = { + id: this.id, + [PartyPokemonSaveKeys.attackBonusPercent]: this.attackBonusPercent, + [PartyPokemonSaveKeys.attackBonusAmount]: this.attackBonusAmount, + [PartyPokemonSaveKeys.vitaminsUsed]: ko.toJS(this.vitaminsUsed), + [PartyPokemonSaveKeys.exp]: this.exp, + [PartyPokemonSaveKeys.breeding]: this.breeding, + [PartyPokemonSaveKeys.shiny]: this.shiny, + [PartyPokemonSaveKeys.category]: this.isUncategorized() ? undefined : this.category, + [PartyPokemonSaveKeys.pokerus]: this.pokerus, + [PartyPokemonSaveKeys.effortPoints]: this.effortPoints, + [PartyPokemonSaveKeys.heldItem]: (_a = this.heldItem()) === null || _a === void 0 ? void 0 : _a.name, + [PartyPokemonSaveKeys.defaultFemaleSprite]: this.defaultFemaleSprite(), + [PartyPokemonSaveKeys.hideShinyImage]: this.hideShinyImage(), + [PartyPokemonSaveKeys.nickname]: this.nickname || undefined, + [PartyPokemonSaveKeys.shadow]: this.shadow, + [PartyPokemonSaveKeys.showShadowImage]: this._showShadowImage(), + }; + // Don't save anything that is the default option + Object.entries(output).forEach(([key, value]) => { + if (value === this.defaults[PartyPokemonSaveKeys[key]]) { + delete output[key]; + } + }); + return output; + } + // Knockout getters/setter + get level() { + return this._level(); + } + set level(level) { + this._level(level); + } + get attack() { + return this._attack(); + } + get attackBonusAmount() { + return this._attackBonusAmount(); + } + set attackBonusAmount(attackBonusAmount) { + this._attackBonusAmount(attackBonusAmount); + } + get attackBonusPercent() { + return this._attackBonusPercent(); + } + set attackBonusPercent(attackBonusPercent) { + this._attackBonusPercent(attackBonusPercent); + } + get breeding() { + return this._breeding(); + } + set breeding(bool) { + this._breeding(bool); + } + get pokerus() { + return this._pokerus(); + } + set pokerus(index) { + this._pokerus(index); + } + get effortPoints() { + return this._effortPoints(); + } + set effortPoints(amount) { + this._effortPoints(amount); + } + get shiny() { + return this._shiny(); + } + set shiny(bool) { + this._shiny(bool); + } + get category() { + return this._category(); + } + set category(value) { + this._category(value); + } + get nickname() { + return this._nickname(); + } + set nickname(nickname) { + this._nickname(nickname); + } + get displayName() { + return this._displayName(); + } + get shadow() { + return this._shadow(); + } + set shadow(value) { + this._shadow(value); + } + get showShadowImage() { + return this._showShadowImage(); + } + set showShadowImage(value) { + this._showShadowImage(value); + } +} +class EvolutionHandler { + static isSatisfied(data) { + return data.restrictions.every(req => req.isCompleted()); + } + static evolve(data, notification = false) { + var _a, _b; + // compare to false because it could be undefined + if (((_a = beforeEvolve[data.trigger]) === null || _a === void 0 ? void 0 : _a.call(beforeEvolve, data)) === false) { + return false; + } + const evolvedPokemon = data.evolvedPokemon; + // This Pokemon is from a region we haven't reached yet + if (PokemonHelper.calcNativeRegion(evolvedPokemon) > player.highestRegion()) { + return false; + } + const shiny = PokemonFactory.generateShiny(GameConstants.SHINY_CHANCE_STONE); + const newPokemon = !App.game.party.alreadyCaughtPokemonByName(evolvedPokemon); + if (newPokemon || shiny || notification) { + // Notify the player if they haven't already caught the evolution, or notifications are forced + Notifier.notify({ + message: `Your ${PokemonHelper.displayName(data.basePokemon)()} evolved into ${shiny ? 'a shiny' : GameHelper.anOrA(evolvedPokemon)} ${PokemonHelper.displayName(evolvedPokemon)()}!`, + pokemonImage: PokemonHelper.getImage(PokemonHelper.getPokemonByName(evolvedPokemon).id, shiny), + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.General.new_catch, + setting: NotificationConstants.NotificationSetting.General.new_catch, + }); + } + // Add shiny to logbook + if (shiny) { + App.game.logbook.newLog(LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemonByName(evolvedPokemon, true) + ? createLogContent.evolvedShinyDupe({ basePokemon: data.basePokemon, evolvedPokemon }) + : createLogContent.evolvedShiny({ basePokemon: data.basePokemon, evolvedPokemon })); + } + App.game.party.gainPokemonById(PokemonHelper.getPokemonByName(evolvedPokemon).id, shiny, true); + const evolvedPartyPokemon = App.game.party.getPokemonByName(evolvedPokemon); + if (newPokemon && App.game.challenges.list.realEvolutions.active()) { + const basePartyPokemon = App.game.party.getPokemon(PokemonHelper.getPokemonByName(data.basePokemon).id); + // Calculate and transfer the flat attack bonus rather than bonus percent. + // Include all damage sources except held item and the Shadow debuff. Purified bonus is included. + const bonusAttack = (basePartyPokemon.baseAttack * (1 + basePartyPokemon.attackBonusPercent / 100) + basePartyPokemon.attackBonusAmount) + * Math.max(1, basePartyPokemon.shadowAttackBonus()) - basePartyPokemon.baseAttack; + evolvedPartyPokemon.exp = basePartyPokemon.exp; + evolvedPartyPokemon.level = basePartyPokemon.level; + evolvedPartyPokemon.effortPoints = basePartyPokemon.effortPoints; + evolvedPartyPokemon.pokerus = basePartyPokemon.pokerus; + evolvedPartyPokemon.shiny = evolvedPartyPokemon.shiny || basePartyPokemon.shiny; + evolvedPartyPokemon.attackBonusAmount = bonusAttack; + evolvedPartyPokemon.vitaminsUsed = basePartyPokemon.vitaminsUsed; + if ((_b = basePartyPokemon.heldItem()) === null || _b === void 0 ? void 0 : _b.canUse(evolvedPartyPokemon)) { + evolvedPartyPokemon.heldItem = basePartyPokemon.heldItem; + } + App.game.party.removePokemonByName(data.basePokemon); + } + // EVs + if (!newPokemon) { + evolvedPartyPokemon.effortPoints += App.game.party.calculateEffortPoints(evolvedPartyPokemon, shiny, GameConstants.ShadowStatus.None, GameConstants.STONE_EP_YIELD); + } + return shiny; + } +} +class Pokeball { + constructor(type, catchBonus, catchTime, description, unlockRequirement = new MultiRequirement(), quantity = 0) { + this.type = type; + this.catchBonus = catchBonus; + this.catchTime = catchTime; + this.description = description; + this.unlockRequirement = unlockRequirement; + this.quantity = ko.observable(quantity); + } + unlocked() { + return this.unlockRequirement.isCompleted(); + } +} +/// +/// +class Pokeballs { + constructor() { + this.name = 'Pokeballs'; + this.saveKey = 'pokeballs'; + this.defaults = { + alreadyCaughtSelection: GameConstants.Pokeball.None, + alreadyCaughtContagiousSelection: GameConstants.Pokeball.None, + alreadyCaughtShinySelection: GameConstants.Pokeball.Pokeball, + notCaughtSelection: GameConstants.Pokeball.Pokeball, + notCaughtShinySelection: GameConstants.Pokeball.Pokeball, + }; + this.pokeballs = [ + new Pokeball(GameConstants.Pokeball.Pokeball, () => 0, 1250, 'A standard Poké Ball', undefined, 25), + new Pokeball(GameConstants.Pokeball.Greatball, () => 5, 1000, '+5% chance to catch'), + new Pokeball(GameConstants.Pokeball.Ultraball, () => 10, 750, '+10% chance to catch'), + new Pokeball(GameConstants.Pokeball.Masterball, () => 100, 500, '100% chance to catch'), + new Pokeball(GameConstants.Pokeball.Fastball, () => 0, 500, 'Reduced catch time', new RouteKillRequirement(10, GameConstants.Region.johto, 34)), + new Pokeball(GameConstants.Pokeball.Quickball, (opts) => { + var _a, _b; + if (opts.encounterType === EncounterType.wanderer) { + return 0; + } + if (App.game.gameState == GameConstants.GameState.fighting && player.route) { + const kills = ((_b = (_a = App.game.statistics.routeKills[GameConstants.Region[player.region]]) === null || _a === void 0 ? void 0 : _a[player.route]) === null || _b === void 0 ? void 0 : _b.call(_a)) || 0; + // between 15 (0 kills) → 0 (4012 kills) + return Math.min(15, Math.max(0, Math.pow(16, 1 - Math.pow(Math.max(0, kills - 10), 0.6) / 145) - 1)); + } + if (App.game.gameState == GameConstants.GameState.dungeon) { + return Math.min(15, Math.pow(DungeonRunner.timeLeftPercentage(), 2) / 500); + } + return 0; + }, 1000, 'Increased catch rate on routes with less Pokémon defeated', new RouteKillRequirement(10, GameConstants.Region.johto, 34)), + new Pokeball(GameConstants.Pokeball.Timerball, (opts) => { + var _a, _b; + if (opts.encounterType === EncounterType.wanderer) { + return 0; + } + if (App.game.gameState == GameConstants.GameState.fighting && player.route) { + const kills = ((_b = (_a = App.game.statistics.routeKills[GameConstants.Region[player.region]]) === null || _a === void 0 ? void 0 : _a[player.route]) === null || _b === void 0 ? void 0 : _b.call(_a)) || 0; + // between 0 (0 kills) → 15 (9920 kills) + return Math.min(15, Math.max(0, Math.pow(16, Math.pow(kills, 0.6) / 250) - 1)); + } + if (App.game.gameState == GameConstants.GameState.dungeon) { + const maxBonus = 15; + const timeLeftPercent = DungeonRunner.timeLeftPercentage(); + const timeLeftPercentWhenMax = 15; + return (timeLeftPercentWhenMax < timeLeftPercent) ? (200 / timeLeftPercent - 2) : maxBonus; + } + return 0; + }, 1000, 'Increased catch rate on routes with more Pokémon defeated', new RouteKillRequirement(10, GameConstants.Region.johto, 34)), + new Pokeball(GameConstants.Pokeball.Duskball, (opts) => { + const now = new Date(); + // If player in a dungeon or it's night time + if ((App.game.gameState == GameConstants.GameState.dungeon && opts.encounterType !== EncounterType.wanderer) || [DayCyclePart.Dawn, DayCyclePart.Night].includes(DayCycle.currentDayCyclePart())) { + return 15; + } + return 0; + }, 1000, 'Increased catch rate at night time or in dungeons', new RouteKillRequirement(10, GameConstants.Region.johto, 34)), + new Pokeball(GameConstants.Pokeball.Luxuryball, () => 0, 1250, 'A Luxury Poké Ball, awards a random currency for catches', new RouteKillRequirement(10, GameConstants.Region.johto, 34)), + new Pokeball(GameConstants.Pokeball.Diveball, (opts) => { + if (opts.encounterType === EncounterType.wanderer) { + return 0; + } + // If area is a water environment, + if (MapHelper.getCurrentEnvironments().includes('Water')) { + return 15; + } + return 0; + }, 1250, 'Increased catch rate in water environments', new RouteKillRequirement(10, GameConstants.Region.hoenn, 101)), + new Pokeball(GameConstants.Pokeball.Lureball, (opts) => { + if (opts.encounterType === EncounterType.wanderer) { + return 0; + } + if (App.game.gameState == GameConstants.GameState.fighting && player.route) { + const hasLandPokemon = Routes.getRoute(player.region, player.route).pokemon.land.length > 0; + const isWaterPokemon = Routes.getRoute(player.region, player.route).pokemon.water.includes(Battle.enemyPokemon().name); + // If route has Land Pokémon and the current pokémon is a Water Pokémon + if (hasLandPokemon && isWaterPokemon) { + return 15; + } + } + return 0; + }, 1250, 'Increased catch rate on fished Pokémon', new RouteKillRequirement(10, GameConstants.Region.hoenn, 101)), + new Pokeball(GameConstants.Pokeball.Nestball, (opts) => { + if (opts.encounterType === EncounterType.wanderer) { + return 0; + } + const highestRegionRoutes = Routes.getRoutesByRegion(player.highestRegion()); + const maxRoute = MapHelper.normalizeRoute(highestRegionRoutes[highestRegionRoutes.length - 1].number, player.highestRegion()); + let currentRoute; + if (App.game.gameState == GameConstants.GameState.dungeon) { + // Use equivalent route difficulty for dungeons + currentRoute = DungeonRunner.dungeon.difficultyRoute; + } + else { + currentRoute = player.route; + } + currentRoute = MapHelper.normalizeRoute(currentRoute, player.region); + // Increased rate for earlier routes and dungeons, scales with regional progression + return Math.min(15, Math.max(1, player.highestRegion()) * Math.max(1, (maxRoute / currentRoute))); + }, 1250, 'Increased catch rate on earlier routes', new RouteKillRequirement(10, GameConstants.Region.johto, 34)), + new Pokeball(GameConstants.Pokeball.Repeatball, (opts) => { + const amountCaught = App.game.statistics.pokemonCaptured[pokemonMap[opts.pokemon].id](); + return Math.min(15, Math.pow(amountCaught, 2) / 5000); + }, 1250, 'Increased catch rate for Pokémon captured more times, plus higher EV gains', new RouteKillRequirement(10, GameConstants.Region.johto, 34)), + new Pokeball(GameConstants.Pokeball.Beastball, () => { + return 10; + }, 1000, 'Can only be used on Ultra Beasts', new TemporaryBattleRequirement('Anabel')), + new Pokeball(GameConstants.Pokeball.Moonball, () => { + const moonCycleMod = MoonCycle.currentMoonCyclePhase(); + const moonCycleBonus = (4 - Math.abs((moonCycleMod % 8) - 4)) * 5; + if (GameConstants.MoonEvoPokemon.has(Battle.enemyPokemon().name)) { + return Math.min(20, moonCycleBonus + 10); + } + return moonCycleBonus; + }, 1250, 'Increased catch rate by the light of the moon', new RouteKillRequirement(10, GameConstants.Region.johto, 34)), + ]; + this.selectedTitle = ko.observable(''); + this.selectedSelection = ko.observable(); + } + initialize() { + let subscription; + this.selectedSelection.subscribe((selection) => { + if (subscription) { + subscription.dispose(); + } + subscription = selection.subscribe(value => { + var _a; + // switch to Ultraball if Masterball is selected + if (value == GameConstants.Pokeball.Masterball && App.game.challenges.list.disableMasterballs.active()) { + selection(GameConstants.Pokeball.Ultraball); + Notifier.notify({ + title: 'Challenge Mode', + message: 'Master Balls are disabled!', + type: NotificationConstants.NotificationOption.danger, + }); + } + else if (!((_a = this.pokeballs[value]) === null || _a === void 0 ? void 0 : _a.unlocked())) { + selection(GameConstants.Pokeball.None); + } + }); + }); + } + /** + * Checks the players preferences to see what pokéball needs to be used on the next throw. + * Checks from the players pref to the most basic ball to see if the player has any. + * @param id the pokemon we are trying to catch. + * @param isShiny if the Pokémon is shiny. + * @returns {GameConstants.Pokeball} pokéball to use. + */ + calculatePokeballToUse(id, isShiny, isShadow, origEncounterType) { + var _a, _b, _c, _d, _e; + const alreadyCaught = App.game.party.alreadyCaughtPokemon(id); + const alreadyCaughtShiny = App.game.party.alreadyCaughtPokemon(id, true); + const alreadyCaughtShadow = App.game.party.alreadyCaughtPokemon(id, false, true); + const pokemon = PokemonHelper.getPokemonById(id); + const isUltraBeast = GameConstants.UltraBeastType[pokemon.name] != undefined; + const encounterType = isUltraBeast ? EncounterType.ultraBeast : origEncounterType; + const pref = (_d = (_c = App.game.pokeballFilters.findMatch({ + caught: alreadyCaught, + caughtShiny: alreadyCaughtShiny, + caughtShadow: alreadyCaughtShadow, + shadow: isShadow, + shiny: isShiny, + pokerus: (_a = App.game.party.getPokemon(id)) === null || _a === void 0 ? void 0 : _a.pokerus, + pokemonType: [pokemon.type1, pokemon.type2], + encounterType, + category: (_b = App.game.party.getPokemon(id)) === null || _b === void 0 ? void 0 : _b.category, + })) === null || _c === void 0 ? void 0 : _c.ball()) !== null && _d !== void 0 ? _d : GameConstants.Pokeball.None; + let use = GameConstants.Pokeball.None; + if (pref == GameConstants.Pokeball.Beastball) { + if (isUltraBeast && this.pokeballs[GameConstants.Pokeball.Beastball].quantity() > 0) { + return GameConstants.Pokeball.Beastball; + } + else { + return GameConstants.Pokeball.None; + } + } + else if (isUltraBeast) { + return GameConstants.Pokeball.None; + } + if (((_e = this.pokeballs[pref]) === null || _e === void 0 ? void 0 : _e.quantity()) > 0) { + return pref; + } + else if (pref <= GameConstants.Pokeball.Masterball) { + // Check which Pokeballs we have in stock that are of equal or lesser than selection (upto Masterball) + for (let i = pref; i >= 0; i--) { + if (this.pokeballs[i].quantity() > 0) { + use = i; + break; + } + } + return use; + } + else { + // Use a normal Pokeball or None if we don't have Pokeballs in stock + return this.pokeballs[GameConstants.Pokeball.Pokeball].quantity() > 0 ? GameConstants.Pokeball.Pokeball : GameConstants.Pokeball.None; + } + } + calculateCatchTime(ball) { + return this.pokeballs[ball].catchTime; + } + gainPokeballs(ball, amount, purchase = true) { + GameHelper.incrementObservable(this.pokeballs[ball].quantity, amount); + GameHelper.incrementObservable(App.game.statistics.pokeballsObtained[ball], amount); + if (purchase === true) { + GameHelper.incrementObservable(App.game.statistics.pokeballsPurchased[ball], amount); + } + } + usePokeball(ball) { + GameHelper.incrementObservable(this.pokeballs[ball].quantity, -1); + GameHelper.incrementObservable(App.game.statistics.pokeballsUsed[ball]); + } + getCatchBonus(ball, options) { + var _a, _b; + const opts = Object.assign({ pokemon: (_a = Battle.enemyPokemon()) === null || _a === void 0 ? void 0 : _a.name, encounterType: (_b = Battle.enemyPokemon()) === null || _b === void 0 ? void 0 : _b.encounterType }, options); + return this.pokeballs[ball].catchBonus(opts); + } + getBallQuantity(ball) { + const pokeball = this.pokeballs[ball]; + return pokeball ? pokeball.quantity() : 0; + } + getEPBonus(ball) { + const pokeballType = this.pokeballs[ball].type; + return pokeballType == GameConstants.Pokeball.Repeatball ? GameConstants.REPEATBALL_EP_MODIFIER : 1; + } + canAccess() { + return true; + } + fromJSON(json) { + if (json == null) { + return; + } + if (json.pokeballs != null) { + json.pokeballs.map((amt, type) => this.pokeballs[type].quantity(amt)); + } + } + toJSON() { + return { + 'pokeballs': this.pokeballs.map(p => p.quantity()), + }; + } + update(delta) { + // This method intentionally left blank + } +} +class PokedexHelper { + static initialize() { + pokedexFilterSettingKeys.forEach((filter) => { + Settings.getSetting(filter).observableValue.subscribe(() => { + PokedexHelper.scrollToTop(); + PokedexHelper.resetPokedexFlag.notifySubscribers(); + }); + }); + DisplayObservables.modalState.pokedexModalObservable.subscribe((modalState) => { + // Resetting scrolling only works before modal is fully hidden + if (modalState === 'hide') { + PokedexHelper.scrollToTop(); + } + }); + } + static getBackgroundColors(name) { + const pokemon = PokemonHelper.getPokemonByName(name); + if (!this.pokemonSeen(pokemon.id)()) { + return 'grey'; + } + if (pokemon.type2 == PokemonType.None) { + return GameConstants.TypeColor[pokemon.type1]; + } + return `linear-gradient(90deg,${GameConstants.TypeColor[pokemon.type1]} 50%, ${GameConstants.TypeColor[pokemon.type2]} 50%)`; + } + /** + * Returns true if you have seen the pokemon + * @param {number} id + * @returns {boolean} + */ + static pokemonSeen(id) { + return ko.pureComputed(() => { + try { + return App.game.statistics.pokemonEncountered[id]() > 0 || App.game.statistics.pokemonDefeated[id]() > 0 || App.game.statistics.pokemonCaptured[id]() > 0 || App.game.party.alreadyCaughtPokemon(id) || App.game.statistics.pokemonSeen[id]() > 0; + } + catch (error) { + return false; + } + }); + } + static formatSearch(value) { + if (/[^\d]/.test(value)) { + // non-integer, use as name filter + Settings.setSettingByName('pokedexNameFilter', value); + Settings.setSettingByName('pokedexIDFilter', -1); + } + else { + // integer, use as ID filter + Settings.setSettingByName('pokedexIDFilter', (value != '' ? +value : -1)); + Settings.setSettingByName('pokedexNameFilter', ''); + } + } + static getSearchString() { + const name = Settings.getSetting('pokedexNameFilter').value; + const id = Settings.getSetting('pokedexIDFilter').value; + return id == -1 ? name : id; + } + static getList() { + // Peek a computed to avoid subscribing to 1000s of statistics + const highestDex = ko.pureComputed(() => { + const highestSeen = App.game.statistics.pokemonSeen.highestID; + const highestEncountered = App.game.statistics.pokemonEncountered.highestID; + const highestDefeated = App.game.statistics.pokemonDefeated.highestID; + const highestCaught = App.game.statistics.pokemonCaptured.highestID; + return Math.max(highestSeen, highestEncountered, highestDefeated, highestCaught); + }).peek(); + const shadowPokemon = PokemonHelper.getAllShadowPokemon.peek(); + return pokemonList.filter((pokemon) => { + var _a, _b; + // Checks based on caught/shiny status + const alreadyCaught = App.game.party.alreadyCaughtPokemon(pokemon.id); + const alreadyCaughtShiny = App.game.party.alreadyCaughtPokemon(pokemon.id, true); + const alreadyCaughtShadow = App.game.party.alreadyCaughtPokemon(pokemon.id, false, true); + const alreadyCaughtPurified = App.game.party.alreadyCaughtPokemon(pokemon.id, false, true, true); + // If the Pokemon shouldn't be unlocked yet + const nativeRegion = PokemonHelper.calcNativeRegion(pokemon.name); + if (nativeRegion > player.highestRegion() || nativeRegion == GameConstants.Region.none && !alreadyCaught) { + return false; + } + // If not showing this region + const region = Settings.getSetting('pokedexRegionFilter').observableValue(); + if (region != null && region != nativeRegion) { + return false; + } + // Event Pokemon + if (pokemon.id <= 0 && !alreadyCaught) { + return false; + } + // If we haven't seen a pokemon this high yet + if (pokemon.id > highestDex) { + return false; + } + const nameFilterSetting = Settings.getSetting('pokedexNameFilter'); + if (nameFilterSetting.observableValue() != '') { + const nameFilter = nameFilterSetting.regex(); + const displayName = PokemonHelper.displayName(pokemon.name)(); + const partyName = (_a = App.game.party.getPokemonByName(pokemon.name)) === null || _a === void 0 ? void 0 : _a.displayName; + if (!nameFilter.test(displayName) && !nameFilter.test(pokemon.name) && !(partyName != undefined && nameFilter.test(partyName))) { + return false; + } + } + // Check ID + const filterID = Settings.getSetting('pokedexIDFilter').observableValue(); + if (filterID > -1 && filterID != Math.floor(pokemon.id)) { + return false; + } + // Check if either of the types match + const type1 = Settings.getSetting('pokedexType1Filter').observableValue(); + const type2 = Settings.getSetting('pokedexType2Filter').observableValue(); + if ([type1, type2].includes(PokemonType.None)) { + const type = (type1 == PokemonType.None) ? type2 : type1; + if (!PokedexHelper.isPureType(pokemon, type)) { + return false; + } + } + else if ((type1 != null && !pokemon.type.includes(type1)) || (type2 != null && !pokemon.type.includes(type2))) { + return false; + } + const hasBaseFormInSameRegion = () => pokemonList.some((p) => Math.floor(p.id) == Math.floor(pokemon.id) && p.id < pokemon.id && PokemonHelper.calcNativeRegion(p.name) == nativeRegion); + // Alternate forms that we haven't caught yet + if (!alreadyCaught && pokemon.id != Math.floor(pokemon.id) && hasBaseFormInSameRegion()) { + return false; + } + // Hide uncaught base forms if alternate non-regional form is caught + if (!alreadyCaught && pokemon.id == Math.floor(pokemon.id) && + App.game.party.caughtPokemon.some((p) => Math.floor(p.id) == pokemon.id && PokemonHelper.calcNativeRegion(p.name) == nativeRegion)) { + return false; + } + const caughtStatus = Settings.getSetting('pokedexCaughtFilter').observableValue(); + // Only uncaught + if (caughtStatus == 'uncaught' && alreadyCaught) { + return false; + } + // All caught + if (caughtStatus == 'caught' && !alreadyCaught) { + return false; + } + // Only caught not shiny + if (caughtStatus == 'caught-not-shiny' && (!alreadyCaught || alreadyCaughtShiny)) { + return false; + } + // Only caught shiny + if (caughtStatus == 'caught-shiny' && !alreadyCaughtShiny) { + return false; + } + // Only caught not shadow + if (caughtStatus == 'caught-not-shadow' && (!alreadyCaught || alreadyCaughtShadow || !shadowPokemon.has(pokemon.name))) { + return false; + } + // Only caught shadow + if (caughtStatus == 'caught-shadow' && (!alreadyCaughtShadow || alreadyCaughtPurified)) { + return false; + } + // Only caught purified + if (caughtStatus == 'caught-purified' && !alreadyCaughtPurified) { + return false; + } + /* Only base form if alternate exist (Unown, Basculin, ...) + * Mainline regional forms are shown as they are part of dex completion + */ + if (Settings.getSetting('pokedexHideAltFilter').observableValue() && !Number.isInteger(pokemon.id) && hasBaseFormInSameRegion()) { + return false; + } + // Only pokemon with a hold item + if (Settings.getSetting('pokedexHeldItemFilter').observableValue() && !BagHandler.displayName(pokemon.heldItem)) { + return false; + } + // Only pokemon with this pokerus status + const pokerusFilter = Settings.getSetting('pokedexPokerusFilter').observableValue(); + if (pokerusFilter != -1 && pokerusFilter !== ((_b = App.game.party.getPokemon(pokemon.id)) === null || _b === void 0 ? void 0 : _b.pokerus)) { + return false; + } + // Only pokemon with selected category + const categoryFilter = Settings.getSetting('pokedexCategoryFilter').observableValue(); + if (categoryFilter != -1) { + if (!alreadyCaught) { + return false; + } + const partyPokemon = App.game.party.getPokemon(pokemon.id); + // Categorized only + if (categoryFilter == -2 && partyPokemon.isUncategorized()) { + return false; + } + // Selected category + if (categoryFilter >= 0 && !partyPokemon.category.includes(categoryFilter)) { + return false; + } + } + const uniqueTransformation = Settings.getSetting('pokedexUniqueTransformationFilter').observableValue(); + // Only Base Pokémon with Mega available + if (uniqueTransformation == 'mega-available' && !PokemonHelper.hasMegaEvolution(pokemon.name)) { + // Another option: !(pokemon as PokemonListData).evolutions?.some((p) => p.restrictions.some(p => p instanceof MegaEvolveRequirement)) + return false; + } + // Only Base Pokémon without Mega Evolution + if (uniqueTransformation == 'mega-unobtained' && !PokemonHelper.hasUncaughtMegaEvolution(pokemon.name)) { + return false; + } + // Only Mega Pokémon + if (uniqueTransformation == 'mega-evolution' && !PokemonHelper.isMegaEvolution(pokemon.name)) { + return false; + } + return true; + }); + } + // Gender ratio + static getGenderRatioData(pokemon) { + const genderType = pokemon.gender.type; + const genderRatio = pokemon.gender.femaleRatio; + const genderObject = { 'male': 0, 'female': 0 }; + // console.log(pokemon); + genderObject.male = 100 - (100 * genderRatio); + genderObject.female = 100 * genderRatio; + return genderObject; + } + static isPureType(pokemon, type) { + return (pokemon.type.length === 1 && (type == null || pokemon.type[0] === type)); + } + static scrollToTop() { + document.querySelector('#pokedex-pokemon-list-container .scrolling-div-pokedex').scrollTop = 0; + } + static filteredListPartyPokemon() { + return PokedexHelper.filteredList().map((p) => App.game.party.getPokemon(p.id)).filter((p) => p !== undefined); + } +} +PokedexHelper.filteredList = ko.pureComputed(() => { + if (PokedexHelper.cachedFilteredList && DisplayObservables.modalState.pokedexModal !== 'show') { + return PokedexHelper.cachedFilteredList; + } + PokedexHelper.cachedFilteredList = PokedexHelper.getList(); + return PokedexHelper.cachedFilteredList; +}); +// Flag for the LazyLoader +PokedexHelper.resetPokedexFlag = ko.computed(() => DisplayObservables.modalState.pokedexModal === 'hidden'); +class PokedexPokemon { + constructor(name, id, type1, type2, kills, catches, shiny) { + this.name = name; + this.id = id; + this.type1 = type1; + this.type2 = type2; + this.kills = kills; + this.catches = catches; + this.shiny = shiny; + } +} +/// +var PokemonLocationType; +(function (PokemonLocationType) { + PokemonLocationType[PokemonLocationType["Route"] = 0] = "Route"; + PokemonLocationType[PokemonLocationType["Roaming"] = 1] = "Roaming"; + PokemonLocationType[PokemonLocationType["Dungeon"] = 2] = "Dungeon"; + PokemonLocationType[PokemonLocationType["DungeonBoss"] = 3] = "DungeonBoss"; + PokemonLocationType[PokemonLocationType["DungeonChest"] = 4] = "DungeonChest"; + PokemonLocationType[PokemonLocationType["Evolution"] = 5] = "Evolution"; + PokemonLocationType[PokemonLocationType["Egg"] = 6] = "Egg"; + PokemonLocationType[PokemonLocationType["Baby"] = 7] = "Baby"; + PokemonLocationType[PokemonLocationType["Shop"] = 8] = "Shop"; + PokemonLocationType[PokemonLocationType["Fossil"] = 9] = "Fossil"; + PokemonLocationType[PokemonLocationType["Safari"] = 10] = "Safari"; + PokemonLocationType[PokemonLocationType["BattleFrontier"] = 11] = "BattleFrontier"; + PokemonLocationType[PokemonLocationType["Wandering"] = 12] = "Wandering"; + PokemonLocationType[PokemonLocationType["Discord"] = 13] = "Discord"; + PokemonLocationType[PokemonLocationType["QuestLineReward"] = 14] = "QuestLineReward"; + PokemonLocationType[PokemonLocationType["TempBattleReward"] = 15] = "TempBattleReward"; + PokemonLocationType[PokemonLocationType["GymReward"] = 16] = "GymReward"; + PokemonLocationType[PokemonLocationType["DungeonReward"] = 17] = "DungeonReward"; + PokemonLocationType[PokemonLocationType["Trade"] = 18] = "Trade"; + PokemonLocationType[PokemonLocationType["GiftNPC"] = 19] = "GiftNPC"; + PokemonLocationType[PokemonLocationType["ShadowPokemon"] = 20] = "ShadowPokemon"; + PokemonLocationType[PokemonLocationType["DreamOrb"] = 21] = "DreamOrb"; + PokemonLocationType[PokemonLocationType["BattleCafe"] = 22] = "BattleCafe"; + PokemonLocationType[PokemonLocationType["SafariItem"] = 23] = "SafariItem"; +})(PokemonLocationType || (PokemonLocationType = {})); +class PokemonLocations { + static getCache(cacheName) { + let cache = this.pokemonLocationsCache[cacheName]; + if (!cache) { + this.pokemonLocationsCache[cacheName] = cache = {}; + } + return cache; + } + // RegionalCache is an array of caches, allowing the results from different maxRegions to co-exist + static getRegionalCache(cacheName) { + let cache = this.pokemonLocationsCache[cacheName]; + if (!cache) { + this.pokemonLocationsCache[cacheName] = cache = []; + } + return cache; + } + static initRegionalCacheLine(cache, maxRegion, defaultValue) { + const cacheLine = cache[maxRegion] = {}; + return this.initCacheLine(cacheLine, defaultValue); + } + static initCacheLine(cacheLine, defaultValue) { + this.pokemonNames.forEach(name => cacheLine[name] = new defaultValue()); + return cacheLine; + } + static getPokemonRegionRoutes(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonRegionRoutes.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, Object); + Routes.regionRoutes.forEach(routeData => { + var _a; + const region = routeData.region; + // If we only want to check up to a maximum region + if (maxRegion != GameConstants.Region.none && region > maxRegion) { + return false; + } + Object.entries(routeData.pokemon).forEach(([encounterType, pokemon]) => { + new Set(Object.values(pokemon).flat()).forEach((name) => { + if (name instanceof SpecialRoutePokemon) { + return false; + } + if (!cacheLine[name][region]) { + cacheLine[name][region] = new Array; + } + cacheLine[name][region].push({ route: routeData.number }); + }); + }); + (_a = routeData.pokemon.special) === null || _a === void 0 ? void 0 : _a.forEach(special => { + special.pokemon.forEach((name) => { + if (!cacheLine[name][region]) { + cacheLine[name][region] = new Array; + } + cacheLine[name][region].push({ route: routeData.number, requirements: special.req.hint() }); + }); + }); + return true; + }); + return cacheLine[pokemonName]; + } + static getPokemonDungeons(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonDungeons.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(dungeonList).forEach(([dungeonName, dungeon]) => { + // If we only want to check up to a maximum region + if (maxRegion != GameConstants.Region.none) { + const region = GameConstants.RegionDungeons.findIndex(d => d.includes(dungeonName)); + if (region > maxRegion) { + return false; + } + } + // Dungeon Grunt + dungeon.enemyList.forEach((enemy) => { + var _a, _b; + // Skip trainers + if (enemy instanceof DungeonTrainer) { + return; + } + if (typeof enemy === 'string') { + cacheLine[enemy].push({ dungeon: dungeonName }); + } + else if (enemy.hasOwnProperty('pokemon')) { + cacheLine[enemy.pokemon].push({ + dungeon: dungeonName, + requirements: (_b = (_a = enemy === null || enemy === void 0 ? void 0 : enemy.options) === null || _a === void 0 ? void 0 : _a.requirement) === null || _b === void 0 ? void 0 : _b.hint(), + }); + } + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonBossDungeons(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonBossDungeons.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(dungeonList).forEach(([dungeonName, dungeon]) => { + // If we only want to check up to a maximum region + if (maxRegion != GameConstants.Region.none) { + const region = GameConstants.RegionDungeons.findIndex(d => d.includes(dungeonName)); + if (region > maxRegion) { + return false; + } + } + // Dungeon Boss + dungeon.availableBosses(false, true).forEach(boss => { + var _a, _b; + const data = { + dungeon: dungeonName, + requirements: (_b = (_a = boss.options) === null || _a === void 0 ? void 0 : _a.requirement) === null || _b === void 0 ? void 0 : _b.hint(), + }; + cacheLine[boss.name].push(data); + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonChestDungeons(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonChestDungeons.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(dungeonList).forEach(([dungeonName, dungeon]) => { + // If we only want to check up to a maximum region + if (maxRegion != GameConstants.Region.none) { + const region = GameConstants.RegionDungeons.findIndex(d => d.includes(dungeonName)); + if (region > maxRegion) { + return false; + } + } + // Dungeon Chest + Object.values(dungeon.lootTable).flat().forEach(i => { + var _a; + if (this.pokemonNames.includes(i.loot)) { + const data = { + dungeon: dungeonName, + requirements: (_a = i.requirement) === null || _a === void 0 ? void 0 : _a.hint(), + }; + cacheLine[i.loot].push(data); + } + }); + }); + return cacheLine[pokemonName]; + } + static getShadowPokemonDungeons(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getShadowPokemonDungeons.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(dungeonList).forEach(([dungeonName, dungeon]) => { + // If we only want to check up to a maximum region + if (maxRegion != GameConstants.Region.none) { + const region = GameConstants.RegionDungeons.findIndex(d => d.includes(dungeonName)); + if (region > maxRegion) { + return false; + } + } + // Shadow Pokemon + new Set(dungeon.allShadowPokemon()).forEach(pokemon => { + cacheLine[pokemon].push(dungeonName); + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonEggs(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonEggs.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(App.game.breeding.hatchList).forEach(([eggType, eggArr]) => { + eggArr.forEach((pokemonArr, region) => { + // If we only want to check up to a maximum region + if (maxRegion != GameConstants.Region.none && region > maxRegion) { + return false; + } + pokemonArr.forEach(name => { + cacheLine[name].push(EggType[eggType]); + }); + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonShops(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonShops.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(TownList).forEach(([townName, town]) => { + // Check if the shop has items + const townShops = town.content.filter(c => c instanceof Shop && c.items); + if (townShops.length) { + // If we only want to check up to a maximum region + const region = town.region; + if (maxRegion != GameConstants.Region.none && region > maxRegion) { + return false; + } + townShops.find(ts => { + var _a; + return (_a = ts.items) === null || _a === void 0 ? void 0 : _a.forEach(item => { + if (this.pokemonNames.includes(item.name)) { + cacheLine[item.name].push(townName); + } + }); + }); + } + }); + return cacheLine[pokemonName]; + } + static getPokemonRoamingRegions(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonRoamingRegions.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(RoamingPokemonList.list).forEach(([region, regionArr]) => { + if (maxRegion != GameConstants.Region.none && (+region) > maxRegion) { + return false; + } + RoamingPokemonList.roamerGroups[region].forEach((group, i) => { + var _a; + (_a = regionArr[i]) === null || _a === void 0 ? void 0 : _a.forEach(r => { + var _a; + if (this.pokemonNames.includes(r.pokemon.name)) { + const data = { + region: +region, + requirements: (_a = r.unlockRequirement) === null || _a === void 0 ? void 0 : _a.hint(), + roamingGroup: group, + }; + cacheLine[r.pokemon.name].push(data); + } + }); + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonParents(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonParents.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(pokemonBabyPrevolutionMap).forEach(([parent, baby]) => { + if (maxRegion != GameConstants.Region.none && pokemonMap[parent].nativeRegion > maxRegion) { + return false; + } + cacheLine[baby].push(parent); + }); + return cacheLine[pokemonName]; + } + static getPokemonFossils(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonFossils.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(GameConstants.FossilToPokemon).forEach(([fossil, pokemon]) => { + cacheLine[pokemon].push(fossil); + }); + return cacheLine[pokemonName]; + } + static getPokemonSafariChance(pokemonName) { + const cache = this.getCache(this.getPokemonSafariChance.name); + if (cache[pokemonName]) { + return cache[pokemonName]; + } + const cacheLine = this.initCacheLine(cache, Object); + Object.entries(SafariPokemonList.list).forEach(([region]) => { + if (region == GameConstants.Region.kalos.toString()) { + // Friendly safari might cause infinite recursion + return; + } + const zoneList = SafariPokemonList.list[region](); + const safariWeight = zoneList.reduce((sum, p) => sum += p.weight, 0); + zoneList.forEach(safariPokemon => { + cacheLine[safariPokemon.name][+region] = cacheLine[safariPokemon.name][+region] || {}; + cacheLine[safariPokemon.name][+region][0] = +((SafariPokemon.calcPokemonWeight(safariPokemon) / safariWeight) * 100).toFixed(2); + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonPrevolution(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonPrevolution.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + const prevolutionPokemon = pokemonList.filter((p) => p.evolutions); + prevolutionPokemon.forEach((p) => p.evolutions.forEach(e => { + // ignore dummy evolutions + if (e.trigger === EvoTrigger.NONE) { + return false; + } + if (maxRegion != GameConstants.Region.none && p.nativeRegion > maxRegion) { + return false; + } + cacheLine[e.evolvedPokemon].push(e); + })); + return cacheLine[pokemonName]; + } + static getPokemonLevelPrevolution(pokemonName, maxRegion = GameConstants.Region.none) { + var _a; + const evolutionPokemon = pokemonList.find((p) => { var _a; return (_a = p.evolutions) === null || _a === void 0 ? void 0 : _a.find(e => e.trigger === EvoTrigger.LEVEL && e.evolvedPokemon == pokemonName); }); + if (maxRegion != GameConstants.Region.none && pokemonMap[evolutionPokemon.name].nativeRegion > maxRegion) { + return; + } + return (_a = evolutionPokemon === null || evolutionPokemon === void 0 ? void 0 : evolutionPokemon.evolutions) === null || _a === void 0 ? void 0 : _a.find(e => e.evolvedPokemon == pokemonName); + } + static getPokemonStonePrevolution(pokemonName, maxRegion = GameConstants.Region.none) { + var _a; + const evolutionPokemon = pokemonList.find((p) => { var _a; return (_a = p.evolutions) === null || _a === void 0 ? void 0 : _a.find(e => e.trigger === EvoTrigger.STONE && e.evolvedPokemon == pokemonName); }); + if (maxRegion != GameConstants.Region.none && pokemonMap[evolutionPokemon.name].nativeRegion > maxRegion) { + return; + } + return (_a = evolutionPokemon === null || evolutionPokemon === void 0 ? void 0 : evolutionPokemon.evolutions) === null || _a === void 0 ? void 0 : _a.find(e => e.evolvedPokemon == pokemonName); + } + static getPokemonBattleFrontier(pokemonName) { + const cache = this.getCache(this.getPokemonBattleFrontier.name); + if (cache[pokemonName]) { + return cache[pokemonName]; + } + const cacheLine = this.initCacheLine(cache, (Array)); + pokemonList.forEach(p => cacheLine[p.name] = []); + BattleFrontierMilestones.milestoneRewards.filter(m => m instanceof BattleFrontierMilestonePokemon).forEach(milestone => { + if (this.pokemonNames.includes(milestone._description)) { + cacheLine[milestone._description].push(milestone.stage); + } + }); + return cacheLine[pokemonName]; + } + static getPokemonWandering(pokemonName) { + const cache = this.getCache(this.getPokemonWandering.name); + if (cache[pokemonName]) { + return cache[pokemonName]; + } + const cacheLine = this.initCacheLine(cache, (Array)); + Berry.baseWander.forEach(pokemon => { + cacheLine[pokemon] = ['Always']; + }); + App.game.farming.berryData.forEach((berry) => { + berry.wander.forEach(pokemon => { + if (cacheLine[pokemon][0] !== 'Always') { + cacheLine[pokemon].push(BerryType[berry.type]); + } + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonDiscord(pokemonName) { + const cache = this.getCache(this.getPokemonDiscord.name); + if (cache[pokemonName]) { + return cache[pokemonName]; + } + const cacheLine = this.initCacheLine(cache, (Array)); + App.game.discord.codes.forEach(code => { + if (this.pokemonNames.includes(code.name)) { + cacheLine[code.name].push(code.price); + } + }); + return cacheLine[pokemonName]; + } + static getPokemonTempBattleReward(pokemonName) { + const cache = this.getCache(this.getPokemonTempBattleReward.name); + if (cache[pokemonName]) { + return cache[pokemonName]; + } + const cacheLine = this.initCacheLine(cache, (Array)); + Object.entries(TemporaryBattleList).forEach(tempBattle => { + var _a, _b, _c, _d, _e; + const firstTimeRewardFunction = (_b = (_a = tempBattle[1].optionalArgs) === null || _a === void 0 ? void 0 : _a.firstTimeRewardFunction) === null || _b === void 0 ? void 0 : _b.toString(); + this.getPokemonRewards(firstTimeRewardFunction).forEach(pokemon => { + cacheLine[pokemon].push(tempBattle[0]); + }); + const rewardFunction = (_d = (_c = tempBattle[1].optionalArgs) === null || _c === void 0 ? void 0 : _c.rewardFunction) === null || _d === void 0 ? void 0 : _d.toString(); + this.getPokemonRewards(rewardFunction).forEach(pokemon => { + cacheLine[pokemon].push(tempBattle[0]); + }); + if (((_e = tempBattle[1].optionalArgs) === null || _e === void 0 ? void 0 : _e.isTrainerBattle) === false) { + tempBattle[1].getPokemonList().forEach(p => { + cacheLine[p.name].push(tempBattle[0]); + }); + } + }); + return cacheLine[pokemonName]; + } + static getPokemonGymReward(pokemonName) { + const cache = this.getCache(this.getPokemonGymReward.name); + if (cache[pokemonName]) { + return cache[pokemonName]; + } + const cacheLine = this.initCacheLine(cache, (Array)); + Object.values(GymList).forEach(gym => { + var _a; + const rewardFunction = (_a = gym.rewardFunction) === null || _a === void 0 ? void 0 : _a.toString(); + this.getPokemonRewards(rewardFunction).forEach(pokemon => { + cacheLine[pokemon].push(gym.leaderName); + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonDungeonReward(pokemonName) { + const cache = this.getCache(this.getPokemonDungeonReward.name); + if (cache[pokemonName]) { + return cache[pokemonName]; + } + const cacheLine = this.initCacheLine(cache, (Array)); + Object.values(dungeonList).forEach(dungeon => { + var _a; + const rewardFunction = (_a = dungeon.rewardFunction) === null || _a === void 0 ? void 0 : _a.toString(); + this.getPokemonRewards(rewardFunction).forEach(pokemon => { + cacheLine[pokemon].push(dungeon.name); + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonQuestLineReward(pokemonName) { + const cache = this.getCache(this.getPokemonQuestLineReward.name); + if (cache[pokemonName]) { + return cache[pokemonName]; + } + const cacheLine = this.initCacheLine(cache, (Array)); + App.game.quests.questLines().forEach(questLine => questLine.quests().forEach(quest => { + var _a; + const rewardFunction = (_a = quest.customReward) === null || _a === void 0 ? void 0 : _a.toString(); + this.getPokemonRewards(rewardFunction).forEach(pokemon => { + cacheLine[pokemon].push(questLine.name); + }); + })); + return cacheLine[pokemonName]; + } + static getPokemonTrades(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonTrades.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(TownList).forEach(([townName, town]) => { + var _a, _b, _c, _d, _e, _f; + // If we only want to check up to a maximum region + if (maxRegion != GameConstants.Region.none && town.region > maxRegion) { + return false; + } + const townShops = town.content.filter(c => c instanceof Shop); + if (townShops.length) { + const townTrades = {}; + for (let i = 0; i < townShops.length; i++) { + const shop = townShops[i]; + let deals; + if (shop instanceof GemMasterShop) { + deals = (_b = (_a = GemDeals.list)[shop.shop]) === null || _b === void 0 ? void 0 : _b.call(_a); + } + else if (shop instanceof ShardTraderShop) { + deals = (_d = (_c = ShardDeal.list)[shop.location]) === null || _d === void 0 ? void 0 : _d.call(_c); + } + else if (shop instanceof BerryMasterShop) { + deals = (_f = (_e = BerryDeal.list)[shop.location]) === null || _f === void 0 ? void 0 : _f.call(_e); + } + deals === null || deals === void 0 ? void 0 : deals.forEach(deal => { + if (this.pokemonNames.includes(deal.item.itemType.type)) { + townTrades[deal.item.itemType.type] = true; + } + }); + } + Object.keys(townTrades).forEach(pokemon => { + cacheLine[pokemon].push(townName); + }); + } + }); + return cacheLine[pokemonName]; + } + static getPokemonGifts(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonGifts.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + Object.entries(TownList).forEach(([townName, town]) => { + var _a; + // If we only want to check up to a maximum region + if (maxRegion != GameConstants.Region.none && town.region > maxRegion) { + return false; + } + const npcs = (_a = town.npcs) === null || _a === void 0 ? void 0 : _a.filter(n => n instanceof GiftNPC); + npcs === null || npcs === void 0 ? void 0 : npcs.forEach(npc => { + var _a; + const rewardFunction = (_a = npc.giftFunction) === null || _a === void 0 ? void 0 : _a.toString(); + this.getPokemonRewards(rewardFunction).forEach(pokemon => { + var _a, _b; + cacheLine[pokemon].push({ + town: townName, + npc: npc.name, + requirements: (_b = (_a = npc.options) === null || _a === void 0 ? void 0 : _a.requirement) === null || _b === void 0 ? void 0 : _b.hint(), + }); + }); + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonDreamOrbs(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonDreamOrbs.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, (Array)); + // Dream orbs are unavailable before Unova + if (maxRegion !== GameConstants.Region.none && maxRegion < GameConstants.Region.unova) { + return cacheLine[pokemonName]; + } + App.game.dreamOrbController.orbs.forEach(orb => orb.items.forEach(dreamOrbLoot => { + if (dreamOrbLoot.item.type === ItemType.item) { + const item = ItemList[dreamOrbLoot.item.id]; + if (item instanceof PokemonItem && this.pokemonNames.includes(item.type)) { + cacheLine[item.type].push(orb.color); + } + } + })); + return cacheLine[pokemonName]; + } + static getBattleCafeCombination(pokemonName, maxRegion = GameConstants.Region.none) { + var _a; + const cache = this.getRegionalCache(this.getBattleCafeCombination.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, Object); + if (maxRegion !== GameConstants.Region.none && maxRegion < GameConstants.Region.galar) { + return cacheLine[pokemonName]; + } + cacheLine['Milcery (Cheesy)'] = { spin: GameConstants.AlcremieSpins.Any3600 }; + let sweet, spin; + for (sweet of GameHelper.enumNumbers(GameConstants.AlcremieSweet)) { + for (spin of GameHelper.enumNumbers(GameConstants.AlcremieSpins)) { + const spinReward = (_a = BattleCafeController.evolutions[sweet][spin]) === null || _a === void 0 ? void 0 : _a.name; + if (this.pokemonNames.includes(spinReward)) { + cacheLine[spinReward] = { spin: spin, sweet: sweet }; + } + } + } + return cacheLine[pokemonName]; + } + static getPokemonSafariItem(pokemonName, maxRegion = GameConstants.Region.none) { + const cache = this.getRegionalCache(this.getPokemonSafariItem.name); + if (cache[maxRegion]) { + return cache[maxRegion][pokemonName]; + } + const cacheLine = this.initRegionalCacheLine(cache, maxRegion, Object); + Object.entries(SafariItemController.list).forEach(([region, list]) => { + if (maxRegion !== GameConstants.Region.none && maxRegion < Number(region)) { + return; + } + list.forEach(item => { + const pokemonItem = item.item.id; + if (this.pokemonNames.includes(pokemonItem)) { + cacheLine[pokemonItem][region] = { chance: item.weight / list.reduce((acc, it) => acc + it.weight, 0) }; + if (item.requirement) { + cacheLine[pokemonItem][region].requirement = item.requirement.hint(); + } + } + }); + }); + return cacheLine[pokemonName]; + } + static getPokemonRewards(rewardFunction) { + // Example reward function: App.game.party.gainPokemonByName('Eevee') + const pokemonRewardRegex = /gainPokemonByName\('(.+?)'/g; + const rewards = []; + let match; + while ((match = pokemonRewardRegex.exec(rewardFunction)) != null) { + // match[1] is the contents of the capture group, e.g. "Eevee" + rewards.push(match[1]); + } + return rewards; + } +} +/* +PRETTY MUCH ONLY USED BY THE BOT BELOW +*/ +PokemonLocations.pokemonLocationsCache = {}; +PokemonLocations.pokemonNames = pokemonList.map(p => p.name); +PokemonLocations.getPokemonLocations = (pokemonName, maxRegion = GameConstants.MAX_AVAILABLE_REGION) => { + const encounterTypes = {}; + // Routes + const regionRoutes = PokemonLocations.getPokemonRegionRoutes(pokemonName, maxRegion); + if (Object.keys(regionRoutes).length) { + encounterTypes[PokemonLocationType.Route] = regionRoutes; + } + // Dungeons + const dungeons = PokemonLocations.getPokemonDungeons(pokemonName, maxRegion); + if (dungeons.length) { + encounterTypes[PokemonLocationType.Dungeon] = dungeons; + } + // Dungeon Boss + const bossDungeons = PokemonLocations.getPokemonBossDungeons(pokemonName, maxRegion); + if (bossDungeons.length) { + encounterTypes[PokemonLocationType.DungeonBoss] = bossDungeons; + } + // Dungeon Chest + const chestDungeons = PokemonLocations.getPokemonChestDungeons(pokemonName, maxRegion); + if (chestDungeons.length) { + encounterTypes[PokemonLocationType.DungeonChest] = chestDungeons; + } + // Shadow Pokemon + const shadowPokemon = PokemonLocations.getShadowPokemonDungeons(pokemonName, maxRegion); + if (shadowPokemon.length) { + encounterTypes[PokemonLocationType.ShadowPokemon] = shadowPokemon; + } + // Eggs + const eggs = PokemonLocations.getPokemonEggs(pokemonName, maxRegion); + if (eggs.length) { + encounterTypes[PokemonLocationType.Egg] = eggs; + } + // Shops + const shops = PokemonLocations.getPokemonShops(pokemonName, maxRegion); + if (shops.length) { + encounterTypes[PokemonLocationType.Shop] = shops; + } + // Roaming + const roaming = PokemonLocations.getPokemonRoamingRegions(pokemonName, maxRegion); + if (roaming.length) { + encounterTypes[PokemonLocationType.Roaming] = roaming; + } + // Baby + const parents = PokemonLocations.getPokemonParents(pokemonName, maxRegion); + if (parents.length) { + encounterTypes[PokemonLocationType.Baby] = parents; + } + // Fossil + const fossils = PokemonLocations.getPokemonFossils(pokemonName); + if (fossils.length) { + encounterTypes[PokemonLocationType.Fossil] = fossils; + } + // Safari + const safariChance = PokemonLocations.getPokemonSafariChance(pokemonName); + if (Object.keys(safariChance).length) { + encounterTypes[PokemonLocationType.Safari] = safariChance; + } + // Evolution + const evolutions = PokemonLocations.getPokemonPrevolution(pokemonName, maxRegion); + if (evolutions.length) { + encounterTypes[PokemonLocationType.Evolution] = evolutions; + } + // Battle Frontier + const battleFrontier = PokemonLocations.getPokemonBattleFrontier(pokemonName); + if (battleFrontier.length) { + encounterTypes[PokemonLocationType.BattleFrontier] = battleFrontier; + } + // Wandering + const wandering = PokemonLocations.getPokemonWandering(pokemonName); + if (wandering.length) { + encounterTypes[PokemonLocationType.Wandering] = wandering; + } + // Discord + const discord = PokemonLocations.getPokemonDiscord(pokemonName); + if (discord.length) { + encounterTypes[PokemonLocationType.Discord] = discord; + } + // Temp battle reward + const tempBattle = PokemonLocations.getPokemonTempBattleReward(pokemonName); + if (tempBattle.length) { + encounterTypes[PokemonLocationType.TempBattleReward] = tempBattle; + } + // Gym reward + const gymReward = PokemonLocations.getPokemonGymReward(pokemonName); + if (gymReward.length) { + encounterTypes[PokemonLocationType.GymReward] = gymReward; + } + // Dungeon reward + const dungeonReward = PokemonLocations.getPokemonDungeonReward(pokemonName); + if (dungeonReward.length) { + encounterTypes[PokemonLocationType.DungeonReward] = dungeonReward; + } + // Quest Line reward + const questLineReward = PokemonLocations.getPokemonQuestLineReward(pokemonName); + if (questLineReward.length) { + encounterTypes[PokemonLocationType.QuestLineReward] = questLineReward; + } + // Trades + const trades = PokemonLocations.getPokemonTrades(pokemonName, maxRegion); + if (trades.length) { + encounterTypes[PokemonLocationType.Trade] = trades; + } + // Gift NPC + const gifts = PokemonLocations.getPokemonGifts(pokemonName, maxRegion); + if (gifts.length) { + encounterTypes[PokemonLocationType.GiftNPC] = gifts; + } + // Dream Orbs + const dreamOrbs = PokemonLocations.getPokemonDreamOrbs(pokemonName, maxRegion); + if (dreamOrbs.length) { + encounterTypes[PokemonLocationType.DreamOrb] = dreamOrbs; + } + // Battle Café + const combination = PokemonLocations.getBattleCafeCombination(pokemonName, maxRegion); + if (Object.keys(combination).length) { + encounterTypes[PokemonLocationType.BattleCafe] = combination; + } + // Safari Items + const safariItems = PokemonLocations.getPokemonSafariItem(pokemonName, maxRegion); + if (Object.keys(safariItems).length) { + encounterTypes[PokemonLocationType.SafariItem] = safariItems; + } + // Return the list of items + return encounterTypes; +}; +PokemonLocations.isObtainableAndNotEvable = (pokemonName) => { + var _a; + const locations = PokemonLocations.getPokemonLocations(pokemonName); + const isEvable = locations[PokemonLocationType.Dungeon] || + locations[PokemonLocationType.DungeonBoss] || + locations[PokemonLocationType.DungeonChest] || + ((_a = locations[PokemonLocationType.Evolution]) === null || _a === void 0 ? void 0 : _a.some((evo) => evo.trigger === EvoTrigger.STONE)) || // Only stone evolutions gives EVs + locations[PokemonLocationType.Roaming] || + locations[PokemonLocationType.Route] || + locations[PokemonLocationType.Safari] || + locations[PokemonLocationType.Shop] || + locations[PokemonLocationType.Wandering] || + locations[PokemonLocationType.Trade] || + locations[PokemonLocationType.ShadowPokemon] || + locations[PokemonLocationType.DreamOrb] || + locations[PokemonLocationType.BattleCafe] || + locations[PokemonLocationType.SafariItem]; + return !isEvable && Object.keys(locations).length > 0; +}; +PokemonLocations; +class BulletinBoard extends TownContent { + static getLocation(bulletinBoard) { + switch (bulletinBoard) { + case GameConstants.BulletinBoards.Sevii4567: + return 'Sevii Islands 4567'; + case GameConstants.BulletinBoards.Hoppy: + return 'Magikarp Jump'; + case GameConstants.BulletinBoards.Armor: + return 'Isle of Armor'; + case GameConstants.BulletinBoards.Crown: + return 'Crown Tundra'; + default: + return GameConstants.BulletinBoards[bulletinBoard]; + } + } + cssClass() { + return 'btn btn-secondary'; + } + text() { + return 'Bulletin Board'; + } + onclick() { + BulletinBoard.selectedBulletinBoard(this); + $('#bulletinBoardModal').modal('show'); + } + areaStatus() { + if (this.getQuests().filter((q) => q.state() == QuestLineState.inactive).length) { + return areaStatus.incomplete; + } + return areaStatus.completed; + } + getQuests() { + return App.game.quests.questLines().filter(q => { + if (q.state() == QuestLineState.ended) { + return false; + } + if (q.requirement ? (!q.requirement.isCompleted() && q.state() !== QuestLineState.suspended) : false) { + return false; + } + if (q.bulletinBoard !== GameConstants.BulletinBoards.All && q.bulletinBoard !== this.board) { + return false; + } + return true; + }); + } + constructor(board) { + super([new QuestLineCompletedRequirement('Tutorial Quests')]); + this.board = board; + } +} +BulletinBoard.selectedBulletinBoard = ko.observable(undefined); +/// +class Quest { + constructor(amount, pointsReward) { + this.amount = isNaN(amount) ? 0 : amount; + this.pointsReward = pointsReward; + this.initial = ko.observable(null); + this.claimed = ko.observable(false); + this.notified = false; + this.onLoadCalled = false; + this.suspended = false; + } + static canComplete() { + return true; + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : 'Generic Quest Description. This should be overriden.'; + } + static generateData() { + return [1, 0]; + } + static randomizeReward(pointsReward) { + const randomPointBonus = 0.9 + SeededRand.float(0.2); // random between 0.9 and 1.1 + return Math.ceil(pointsReward * randomPointBonus); + } + get xpReward() { + return 100 + (this.pointsReward / 10); + } + //#region Quest Status + claim() { + var _a; + if (this.isCompleted() && !this.claimed()) { + App.game.quests.addXP(this.xpReward); + if (this.customReward !== undefined) { + this.customReward(); + } + if (((_a = this.optionalArgs) === null || _a === void 0 ? void 0 : _a.clearedMessage) !== undefined) { + Quest.questObservable(this); + $('#questStepClearedModal').modal('show'); + } + this.deleteFocusSub(); + this.claimed(true); + if (this.pointsReward) { + App.game.wallet.gainQuestPoints(this.pointsReward); + Notifier.notify({ + message: `You have completed your quest!\nYou claimed ${this.pointsReward.toLocaleString('en-US')}!`, + strippedMessage: `You have completed your quest and claimed ${this.pointsReward.toLocaleString('en-US')} Quest Points!`, + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.General.quest_completed, + }); + App.game.logbook.newLog(LogBookTypes.QUEST, createLogContent.completedQuestWithPoints({ + quest: this.description, + points: this.pointsReward.toLocaleString('en-US'), + })); + } + else { + Notifier.notify({ + message: 'You have completed a quest!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.General.quest_completed, + }); + App.game.logbook.newLog(LogBookTypes.QUEST, createLogContent.completedQuest({ quest: this.description })); + } + GameHelper.incrementObservable(App.game.statistics.questsCompleted); + return true; + } + return false; + } + quit(shouldConfirm = false) { + if (shouldConfirm) { + Notifier.confirm({ + title: 'Quit Quest', + message: 'Are you sure?\n\nYou can start the quest again later but you will lose all progress!', + type: NotificationConstants.NotificationOption.warning, + confirm: 'Quit', + }).then(confirmed => { + if (confirmed) { + this.initial(null); + } + }); + } + else { + this.initial(null); + } + } + begin() { + var _a; + this.initial((_a = this.initialValue) !== null && _a !== void 0 ? _a : this.focus()); + this.onLoad(); + } + set focus(value) { + this._focus = value; + this.createProgressObservables(); + } + get focus() { + return this._focus; + } + createProgressObservables() { + var _a, _b, _c; + // Dispose of our old subscriber if one exists + (_a = this.focusSub) === null || _a === void 0 ? void 0 : _a.dispose(); + // Subscribe to the new focus + this.focusValue = this._focus(); + this.focusSub = (_c = (_b = this._focus).subscribe) === null || _c === void 0 ? void 0 : _c.call(_b, (newValue) => { + // If we aren't actively completing this quests, don't do anything + if (this.inProgress()) { + // If the focus goes down, adjust our initial value + if (newValue < this.focusValue) { + this.initial(this.initial() - (this.focusValue - newValue)); + } + // Prevent progress on suspended quests by adjusting the initial value + if (this.suspended && newValue > this.focusValue) { + this.initial(this.initial() + (newValue - this.focusValue)); + } + } + this.focusValue = newValue; + }); + // Calculate our progress + this.progress = ko.pureComputed(() => { + if (this.initial() !== null) { + return Math.min(1, (this.focus() - this.initial()) / this.amount); + } + else { + return 0; + } + }); + this.progressText = ko.pureComputed(() => { + if (this.initial() !== null) { + return `${Math.min((this.focus() - this.initial()), this.amount).toLocaleString('en-US')} / ${this.amount.toLocaleString('en-US')}`; + } + else { + return `0 / ${this.amount.toLocaleString('en-US')}`; + } + }); + this.inProgress = ko.pureComputed(() => { + var _a; + return this.initial() !== null && (!this.claimed() || ((_a = this.mainQuest) === null || _a === void 0 ? void 0 : _a.inProgress())); + }); + // This computed has a side effect - creating a notification - so we cannot safely make it a pureComputed + // This will only be a problem if we make it subscribe to a function which lives longer than itself + // Since it is only subscribing to observables on `this`, and the function is being kept on `this`, we shouldn't have a problem + this.isCompleted = ko.computed(() => { + const completed = this.progress() == 1 || this.claimed(); + if (!this.autoComplete && completed && !this.notified) { + Notifier.notify({ + message: `You can complete your quest for ${this.pointsReward.toLocaleString('en-US')}!`, + strippedMessage: `You can complete your quest for ${this.pointsReward.toLocaleString('en-US')} Quest Points!`, + type: NotificationConstants.NotificationOption.success, + timeout: 5e3, + sound: NotificationConstants.NotificationSound.Quests.quest_ready_to_complete, + setting: NotificationConstants.NotificationSetting.General.quest_ready_to_complete, + }); + this.notified = true; + } + return completed; + }); + } + onLoad() { + if (typeof this._onLoad === 'function' && !this.onLoadCalled) { + this._onLoad(); + this.onLoadCalled = true; + } + } + complete(bypassAutoCompleter = false) { + if (bypassAutoCompleter) { + this.deleteAutoCompleter(); + // Was consequently disposed on auto completion. + this.deleteFocusSub(); + } + this.initial(this.focus() - this.amount); + } + createAutoCompleter() { + this.autoComplete = true; + this.autoCompleter = this.isCompleted.subscribe(() => { + if (this.isCompleted()) { + this.claim(); + this.deleteAutoCompleter(); + } + }); + } + deleteAutoCompleter() { + var _a; + (_a = this.autoCompleter) === null || _a === void 0 ? void 0 : _a.dispose(); + } + deleteFocusSub(fromMainQuest = false) { + var _a; + if (fromMainQuest >= !!this.mainQuest) { + (_a = this.focusSub) === null || _a === void 0 ? void 0 : _a.dispose(); + return true; + } + return false; + } + withDescription(description) { + this.customDescription = description; + return this; + } + withOnLoad(onLoad) { + this._onLoad = onLoad; + return this; + } + withCustomReward(customReward) { + this.customReward = typeof customReward === 'function' ? customReward : undefined; + return this; + } + withOptionalArgs(optionalArgs) { + this.optionalArgs = optionalArgs; + return this; + } + withInitialValue(initialValue) { + this.initialValue = initialValue; + return this; + } + asSubQuest(mainQuest) { + this.mainQuest = mainQuest; + this.autoComplete = true; + } + getClearedMessage() { + return this.optionalArgs.clearedMessage; + } + getNpcDisplayName() { + return this.optionalArgs.npcDisplayName; + } + getNpcImage() { + var _a; + const npcImageName = (_a = this.optionalArgs) === null || _a === void 0 ? void 0 : _a.npcImageName; + return `assets/images/npcs/${npcImageName}.png`; + } + //#endregion + toJSON() { + return { + index: this.index || 0, + customDescription: this.customDescription, + data: [this.amount, this.pointsReward], + initial: this.initial(), + claimed: this.claimed(), + notified: this.notified, + }; + } + fromJSON(json) { + if (!json) { + this.index = 0; + this.claimed(false); + this.initial(null); + this.notified = false; + } + this.index = json.hasOwnProperty('index') ? json.index : 0; + this.claimed(json.hasOwnProperty('claimed') ? json.claimed : false); + this.initial(json.hasOwnProperty('initial') ? json.initial : null); + this.notified = json.hasOwnProperty('notified') ? json.notified : false; + } +} +Quest.questObservable = ko.observable(); +/// +class DefeatPokemonsQuest extends Quest { + constructor(killsNeeded, reward, route, region, customDescription = undefined) { + super(killsNeeded, reward); + this.route = route; + this.region = region; + this.focus = App.game.statistics.routeKills[this.region][this.route]; + this.customDescription = customDescription; + } + static generateData() { + const amount = SeededRand.intBetween(100, 500); + const region = SeededRand.intBetween(0, player.highestRegion()); + // Only use unlocked routes + const possibleRoutes = Routes.getRoutesByRegion(region).map(route => route.number).filter(route => MapHelper.accessToRoute(route, region)); + // If no routes unlocked in this region, just use the first route of the region + const route = possibleRoutes.length ? SeededRand.fromArray(possibleRoutes) : GameConstants.StartingRoutes[region]; + const reward = this.calcReward(amount, route, region); + return [amount, reward, route, region]; + } + static calcReward(killsNeeded, route, region) { + const attacksPerPokemon = Math.ceil(Math.min(4, PokemonFactory.routeHealth(route, region) / Math.max(1, App.game.party.pokemonAttackObservable()))); + const reward = Math.ceil(GameConstants.DEFEAT_POKEMONS_BASE_REWARD * attacksPerPokemon * killsNeeded); + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Defeat ${this.amount.toLocaleString('en-US')} Pokémon on ${Routes.getName(this.route, this.region, true)}.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.route); + json.data.push(this.region); + return json; + } +} +/// +class CapturePokemonsQuest extends Quest { + constructor(capturesNeeded, reward) { + super(capturesNeeded, reward); + this.focus = App.game.statistics.totalPokemonCaptured; + } + static generateData() { + const amount = SeededRand.intBetween(100, 500); + const reward = this.calcReward(amount); + return [amount, reward]; + } + static calcReward(amount) { + const reward = amount * GameConstants.CAPTURE_POKEMONS_BASE_REWARD; + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Capture or hatch ${this.amount.toLocaleString('en-US')} Pokémon.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class CapturePokemonTypesQuest extends Quest { + constructor(capturesNeeded, reward, type) { + super(capturesNeeded, reward); + this.type = type; + this.focus = ko.pureComputed(() => pokemonMap.filter(p => p.type.includes(this.type)).map(p => App.game.statistics.pokemonCaptured[p.id]()).reduce((a, b) => a + b, 0)); + } + static typeWeights() { + const types = new Array(GameHelper.enumLength(PokemonType) - 1).fill(0); + Routes.regionRoutes.filter(r => r.isUnlocked()).forEach(r => { + Object.values(r.pokemon).flat().forEach(p => { + const pokemon = pokemonMap[p]; + if (!pokemon || pokemon.id <= 0) { + return; + } + pokemon.type.forEach(t => types[t]++); + }); + }); + const max = Math.max(...types); + // Calculate the weight + return types.map(v => ((-v + max) / max) * (this.maxWeight - this.minWeight)) + // map the type and rounded values + .map((weight, type) => ({ type, weight: Math.round((weight + this.minWeight) * 100) / 100 })); + } + static generateData() { + const amount = SeededRand.intBetween(50, 250); + this.weights = this.typeWeights(); + const type = SeededRand.fromArray(this.weights.filter(w => w.weight < this.maxWeight).map(w => w.type)); + const reward = this.calcReward(amount, type); + return [amount, reward, type]; + } + static calcReward(amount, type) { + const reward = amount * GameConstants.CAPTURE_POKEMONS_BASE_REWARD * this.weights[type].weight * 2; + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Capture or hatch ${this.amount.toLocaleString('en-US')} ${PokemonType[this.type]}-type Pokémon.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.type); + return json; + } +} +CapturePokemonTypesQuest.maxWeight = 4; +CapturePokemonTypesQuest.minWeight = 1.2; +CapturePokemonTypesQuest.weights = []; +/// +class ClearBattleFrontierQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.battleFrontierTotalStagesCompleted; + } + static canComplete() { + return App.game.statistics.battleFrontierTotalStagesCompleted() > 1; + } + static generateData() { + const amount = SeededRand.intBetween(50, 200); + const reward = this.calcReward(amount); + return [amount, reward]; + } + static calcReward(amount) { + const reward = Math.ceil(amount * GameConstants.DEFEAT_POKEMONS_BASE_REWARD * 8); + return super.randomizeReward(reward); + } + get description() { + const suffix = this.amount > 1 ? 's' : ''; + return `Clear ${this.amount.toLocaleString('en-US')} Stages in the Battle Frontier.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class GainFarmPointsQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.totalFarmPoints; + } + static canComplete() { + return App.game.farming.canAccess(); + } + static generateData() { + const amount = SeededRand.intBetween(500, 5000); + const reward = this.calcReward(amount); + return [amount, reward]; + } + static calcReward(amount) { + const reward = Math.ceil(amount * GameConstants.GAIN_FARM_POINTS_BASE_REWARD); + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Gain ${this.amount.toLocaleString('en-US')} Farm Points.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class GainMoneyQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.totalMoney; + } + static generateData() { + const highestRegion = player.highestRegion(); + const gymAmount = Object.values(GymList).reduce((max, gym) => { + if (App.game.statistics.gymsDefeated[GameConstants.getGymIndex(gym.town)]()) { + // 1.3 raised to variable power so we account for gyms from early regions being easier and better for money. + return Math.max(max, (gym.moneyReward) * Math.pow(1.3, (highestRegion - GameConstants.getGymRegion(gym.town)))); + } + return max; + }, 0) || GymList[GameConstants.KantoGyms[0]].moneyReward; + const baseAmount = gymAmount * (1 + highestRegion) * 2; + const maxAmount = Math.ceil(baseAmount * (3 + highestRegion)); + const amount = SeededRand.intBetween(baseAmount, maxAmount); + const reward = GainMoneyQuest.calcReward(amount, baseAmount); + return [amount, reward]; + } + static calcReward(amount, baseAmount) { + const reward = Math.ceil(amount / baseAmount * GameConstants.GAIN_MONEY_BASE_REWARD); + return GainMoneyQuest.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Gain ${this.amount.toLocaleString('en-US')} Pokédollars.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class GainTokensQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.totalDungeonTokens; + } + static generateData() { + const highestRegion = player.highestRegion(); + const dungeonAmount = Object.values(dungeonList).reduce((max, dungeon) => { + if (App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(dungeon.name)]()) { + return Math.max(max, dungeon.tokenCost); + } + return max; + }, 0) || dungeonList[GameConstants.KantoDungeons[0]].tokenCost; + const baseAmount = dungeonAmount; + const maxAmount = Math.ceil(baseAmount * (3 + highestRegion)); + const amount = SeededRand.intBetween(baseAmount, maxAmount); + const reward = GainTokensQuest.calcReward(amount, baseAmount); + return [amount, reward]; + } + static calcReward(amount, baseAmount) { + const reward = Math.ceil(amount / baseAmount * GameConstants.GAIN_TOKENS_BASE_REWARD); + return GainTokensQuest.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Gain ${this.amount.toLocaleString('en-US')} Dungeon Tokens.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class GainGemsQuest extends Quest { + constructor(amount, reward, type) { + super(amount, reward); + this.type = type; + this.focus = App.game.statistics.gemsGained[this.type]; + } + static canComplete() { + return App.game.gems.canAccess(); + } + static typeWeights() { + const types = new Array(GameHelper.enumLength(PokemonType) - 1).fill(0); + Routes.regionRoutes.filter(r => r.isUnlocked()).forEach(r => { + Object.values(r.pokemon).flat().forEach(p => { + const pokemon = pokemonMap[p]; + if (!pokemon || pokemon.id <= 0) { + return; + } + pokemon.type.forEach(t => types[t]++); + }); + }); + const max = Math.max(...types); + // Calculate the weight + return types.map(v => ((-v + max) / max) * (this.maxWeight - this.minWeight)) + // map the type and rounded values + .map((weight, type) => ({ type, weight: Math.round((weight + this.minWeight) * 100) / 100 })); + } + static generateData() { + const amount = SeededRand.intBetween(200, 600); + this.weights = this.typeWeights(); + const type = SeededRand.fromArray(this.weights.filter(w => w.weight < this.maxWeight).map(w => w.type)); + const reward = this.calcReward(type, amount); + return [amount, reward, type]; + } + static calcReward(type, amount) { + const reward = amount * GameConstants.DEFEAT_POKEMONS_BASE_REWARD * this.weights[type].weight * 0.5; + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Gain ${this.amount.toLocaleString('en-US')} ${PokemonType[this.type]} gems.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.type); + return json; + } +} +GainGemsQuest.maxWeight = 4; +GainGemsQuest.minWeight = 1.2; +GainGemsQuest.weights = []; +/// +class HatchEggsQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.totalPokemonHatched; + } + static canComplete() { + return App.game.breeding.canAccess(); + } + static generateData() { + const highestRegion = player.highestRegion(); + const amount = SeededRand.intBetween(1, (10 + (5 * highestRegion))); + const reward = this.calcReward(amount); + return [amount, reward]; + } + static calcReward(amount) { + const reward = Math.ceil(amount * GameConstants.HATCH_EGGS_BASE_REWARD); + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Hatch ${this.amount.toLocaleString('en-US')} ${GameConstants.pluralizeString('Egg', this.amount)}.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class MineLayersQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.undergroundLayersMined; + } + static canComplete() { + return App.game.underground.canAccess(); + } + static generateData() { + const amount = SeededRand.intBetween(1, 3); + const reward = this.calcReward(amount); + return [amount, reward]; + } + static calcReward(amount) { + const reward = Math.ceil(amount * GameConstants.MINE_LAYERS_BASE_REWARD); + return super.randomizeReward(reward); + } + get description() { + if (this.customDescription) { + return this.customDescription; + } + const suffix = this.amount > 1 ? 's' : ''; + return `Mine ${this.amount.toLocaleString('en-US')} layer${suffix} in the Underground.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class MineItemsQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.undergroundItemsFound; + } + static canComplete() { + return App.game.underground.canAccess(); + } + static generateData() { + const amount = SeededRand.intBetween(3, 15); + const reward = this.calcReward(amount); + return [amount, reward]; + } + static calcReward(amount) { + const reward = Math.ceil(amount * GameConstants.MINE_ITEMS_BASE_REWARD); + return super.randomizeReward(reward); + } + get description() { + if (this.customDescription) { + return this.customDescription; + } + const suffix = this.amount > 1 ? 's' : ''; + return `Mine ${this.amount.toLocaleString('en-US')} item${suffix} in the Underground.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class CatchShiniesQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.totalShinyPokemonCaptured; + } + static generateData() { + const amount = 1; + const reward = this.calcReward(amount); + return [amount, reward]; + } + static calcReward(amount) { + const reward = Math.ceil(amount * GameConstants.SHINY_BASE_REWARD); + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Catch ${this.amount.toLocaleString('en-US')} shiny Pokémon.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class CatchShadowsQuest extends Quest { + constructor(amount, reward) { + super(amount, reward); + this.focus = App.game.statistics.totalShadowPokemonCaptured; + } + static canComplete() { + return App.game.statistics.totalShadowPokemonCaptured() > 1; + } + static generateData() { + const amount = Math.ceil(Math.random() * 5); + const reward = this.calcReward(amount); + return [amount, reward]; + } + static calcReward(amount) { + const reward = Math.ceil(amount * GameConstants.SHADOW_BASE_REWARD); + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Catch ${this.amount.toLocaleString('en-US')} Shadow Pokémon.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + return json; + } +} +/// +class DefeatGymQuest extends Quest { + constructor(amount, reward, gymTown) { + super(amount, reward); + this.gymTown = gymTown; + this.region = GameConstants.getGymRegion(this.gymTown); + if (this.region == GameConstants.Region.none) { + throw new Error(`Invalid gym town for quest: ${this.gymTown}`); + } + this.focus = App.game.statistics.gymsDefeated[GameConstants.getGymIndex(this.gymTown)]; + } + // Only add Defeat Gym Quest if the player has defeated the first gym (Brock). + static canComplete() { + return App.game.badgeCase.hasBadge(BadgeEnums.Boulder); + } + static generateData() { + const amount = SeededRand.intBetween(5, 20); + let maxRegion = player.highestRegion(); + // Check if first gym of highest region has been cleared. If not, pick one region lower than highest. + if (!App.game.badgeCase.hasBadge(GymList[GameConstants.RegionGyms[player.highestRegion()][0]].badgeReward)) { + maxRegion -= 1; + } + const region = SeededRand.intBetween(0, maxRegion); + // Only use cleared gyms. + const possibleGyms = GameConstants.RegionGyms[region].filter(gymTown => GymList[gymTown].flags.quest && GymList[gymTown].clears()); + const gymTown = SeededRand.fromArray(possibleGyms); + const reward = this.calcReward(amount, gymTown); + return [amount, reward, gymTown]; + } + static calcReward(amount, gymTown) { + const gym = GymList[gymTown]; + const playerDamage = App.game.party.pokemonAttackObservable(); + let attacksToWin = 0; + for (const pokemon of gym.getPokemonList()) { + attacksToWin += Math.ceil(Math.min(4, pokemon.maxHealth / Math.max(1, playerDamage))); + } + const reward = Math.min(5000, Math.ceil(attacksToWin * GameConstants.DEFEAT_POKEMONS_BASE_REWARD * GameConstants.ACTIVE_QUEST_MULTIPLIER * amount)); + return super.randomizeReward(reward); + } + get description() { + var _a; + if (this.customDescription) { + return this.customDescription; + } + const elite = this.gymTown.includes('Elite') || this.gymTown.includes('Champion'); + const displayName = (_a = GymList[this.gymTown]) === null || _a === void 0 ? void 0 : _a.displayName; + const leaderName = GymList[this.gymTown].leaderName.replace(/\d/g, ''); + const desc = []; + desc.push('Defeat'); + if (displayName === null || displayName === void 0 ? void 0 : displayName.includes('Trial')) { + desc.push(`${displayName} at ${this.gymTown}`); + } + else if (displayName || elite) { + desc.push(displayName !== null && displayName !== void 0 ? displayName : this.gymTown); + } + else { + desc.push(`${leaderName}'s Gym at ${this.gymTown}`); + } + desc.push(`in ${GameConstants.camelCaseToString(GameConstants.Region[this.region])}`); + desc.push(`${this.amount.toLocaleString('en-US')} times.`); + return desc.join(' '); + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.gymTown); + return json; + } +} +/// +class DefeatDungeonQuest extends Quest { + constructor(amount, reward, dungeon) { + super(amount, reward); + this.dungeon = dungeon; + this.region = GameConstants.getDungeonRegion(this.dungeon); + if (this.region == GameConstants.Region.none) { + throw new Error(`Invalid dungeon for quest: ${this.dungeon}`); + } + this.focus = App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(this.dungeon)]; + } + static generateData() { + // Allow up to highest region + const amount = SeededRand.intBetween(5, 20); + const region = SeededRand.intBetween(0, player.highestRegion()); + // Only use unlocked dungeons + const possibleDungeons = GameConstants.RegionDungeons[region].filter(dungeon => TownList[dungeon].isUnlocked()); + // If no dungeons unlocked in this region, just use the first dungeon of the region + const dungeon = possibleDungeons.length ? SeededRand.fromArray(possibleDungeons) : GameConstants.RegionDungeons[region][0]; + const reward = this.calcReward(amount, dungeon); + return [amount, reward, dungeon]; + } + static calcReward(amount, dungeon) { + const playerDamage = App.game.party.calculateClickAttack() + (App.game.party.pokemonAttackObservable() / GameConstants.QUEST_CLICKS_PER_SECOND); + const attacksToDefeatPokemon = Math.ceil(Math.min(4, dungeonList[dungeon].baseHealth / playerDamage)); + const averageTilesToBoss = 13; + const attacksToCompleteDungeon = attacksToDefeatPokemon * averageTilesToBoss; + const completeDungeonsReward = attacksToCompleteDungeon * GameConstants.DEFEAT_POKEMONS_BASE_REWARD * GameConstants.ACTIVE_QUEST_MULTIPLIER * amount; + let region, route; + for (region = player.highestRegion(); region >= 0; region--) { + route = QuestHelper.highestOneShotRoute(region); // returns 0 if no routes in this region can be one shot + if (route) { + break; + } + } + if (!route) { + route = 1, region = GameConstants.Region.kanto; + } + const tokens = PokemonFactory.routeDungeonTokens(route, region); + const routeKillsPerDungeon = dungeonList[dungeon].tokenCost / tokens; + const collectTokensReward = routeKillsPerDungeon * GameConstants.DEFEAT_POKEMONS_BASE_REWARD * amount; + const reward = Math.min(5000, Math.ceil(completeDungeonsReward + collectTokensReward)); + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Defeat the ${this.dungeon} dungeon in ${GameConstants.camelCaseToString(GameConstants.Region[this.region])} ${this.amount.toLocaleString('en-US')} times.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.dungeon); + return json; + } +} +/// +class UsePokeballQuest extends Quest { + constructor(amount, reward, pokeball) { + super(amount, reward); + this.pokeball = pokeball; + this.focus = App.game.statistics.pokeballsUsed[this.pokeball]; + } + static generateData() { + const possiblePokeballs = [GameConstants.Pokeball.Pokeball]; + if (TownList['Lavender Town'].isUnlocked()) { + possiblePokeballs.push(GameConstants.Pokeball.Greatball); + } + if (TownList['Fuchsia City'].isUnlocked()) { + possiblePokeballs.push(GameConstants.Pokeball.Ultraball); + } + const pokeball = SeededRand.fromArray(possiblePokeballs); + const amount = SeededRand.intBetween(100, 500); + const reward = this.calcReward(amount, pokeball); + return [amount, reward, pokeball]; + } + static calcReward(amount, pokeball) { + // Reward for Greatballs is 4x Pokeballs, Ultraballs are 9x Pokeballs + const reward = Math.ceil(amount * (pokeball + 1) * (pokeball + 1) * GameConstants.DEFEAT_POKEMONS_BASE_REWARD); + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Use ${this.amount.toLocaleString('en-US')} ${ItemList[GameConstants.Pokeball[this.pokeball]].displayName}s.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.pokeball); + return json; + } +} +/// +class UseOakItemQuest extends Quest { + constructor(amount, reward, item) { + super(amount, reward); + this.item = item; + this.focus = App.game.statistics.oakItemUses[this.item]; + } + static canComplete() { + return App.game.oakItems.canAccess() && !App.game.challenges.list.disableOakItems.active(); + } + static generateData() { + const possibleItems = [ + OakItemType.Magic_Ball, + OakItemType.Amulet_Coin, + // OakItemType.Rocky_Helmet, + OakItemType.Exp_Share, + // OakItemType.Sprayduck, + // OakItemType.Shiny_Charm, + // OakItemType.Magma_Stone, + // OakItemType.Cell_Battery, + // OakItemType.Squirtbottle, + // OakItemType.Sprinklotad, + // OakItemType.Explosive_Charge, + // OakItemType.Treasure_Scanner, + ]; + const oakItem = SeededRand.fromArray(possibleItems); + const amount = SeededRand.intBetween(100, 500); + const reward = this.calcReward(amount, oakItem); + return [amount, reward, oakItem]; + } + static calcReward(amount, item) { + const reward = amount * GameConstants.USE_OAK_ITEM_BASE_REWARD; + return super.randomizeReward(reward); + } + get description() { + if (this.customDescription) { + return this.customDescription; + } + const desc = []; + desc.push(`Equip the ${GameConstants.humanifyString(OakItemType[this.item])} and`); + if (this.item == OakItemType.Magic_Ball) { + desc.push(`capture ${this.amount.toLocaleString('en-US')} wild Pokémon.`); + } + else if (this.item == OakItemType.Amulet_Coin) { + desc.push(`earn Pokédollars ${this.amount.toLocaleString('en-US')} times.`); + } + else if (this.item == OakItemType.Exp_Share) { + desc.push(`defeat ${this.amount.toLocaleString('en-US')} Pokémon.`); + } + else { + desc.push(`gain its benefit ${this.amount.toLocaleString('en-US')} times.`); + } + return desc.join(' '); + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.item); + return json; + } +} +/// +class HarvestBerriesQuest extends Quest { + constructor(amount, reward, berryType) { + super(amount, reward); + this.berryType = berryType; + this.focus = App.game.statistics.berriesHarvested[this.berryType]; + } + static canComplete() { + return App.game.farming.canAccess(); + } + static generateData() { + // Getting available Berries (always include Gen 1 Berries) + const availableBerries = App.game.farming.berryData.filter(berry => (App.game.farming.unlockedBerries[berry.type]() && berry.growthTime[3] < 12000) || berry.type < BerryType.Persim); + const berry = SeededRand.fromArray(availableBerries); + const maxAmt = Math.min(300, Math.ceil(432000 / berry.growthTime[3])); + const minAmt = Math.min(10, Math.ceil(maxAmt / 2)); + const amount = SeededRand.intBetween(minAmt, maxAmt); + const reward = this.calcReward(amount, berry.type); + return [amount, reward, berry.type]; + } + static calcReward(amount, berryType) { + const harvestTime = App.game.farming.berryData[berryType].growthTime[3]; + const harvestAmt = Math.max(4, Math.ceil(App.game.farming.berryData[berryType].harvestAmount / 2)); + const plantAmt = amount / harvestAmt; + const fieldAmt = plantAmt / App.game.farming.plotList.length; + const reward = Math.ceil(fieldAmt * Math.pow(harvestTime, .7) * 30); + return super.randomizeReward(reward); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Harvest ${this.amount.toLocaleString('en-US')} ${BerryType[this.berryType]} ${GameConstants.pluralizeString('Berry', this.amount)} at the farm.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.berryType); + return json; + } +} +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +class QuestHelper { + static createQuest(questType, data) { + if (!this.quests[questType]) { + console.error(`Error: Invalid quest type - ${questType}.`); + return; + } + // Creating randomly generated quest + if (!data) { + const QuestClass = this.quests[questType]; + return new QuestClass(...QuestClass.generateData()); + } + return new this.quests[questType](...data); + } + static generateQuestList(seed, amount = 10, uniqueQuestTypes = true) { + const quests = []; + SeededRand.seed(+seed); + // Only use unlocked quest types + const QuestTypes = new Set(Object.entries(this.quests).filter(([key, quest]) => quest.canComplete()).map(([key]) => key)); + while (quests.length < amount && QuestTypes.size) { + const questType = SeededRand.fromArray(Array.from(QuestTypes)); + if (uniqueQuestTypes) { + QuestTypes.delete(questType); + } + const quest = this.createQuest(questType); + quest.index = quests.length; + quests.push(quest); + } + return quests; + } + static highestOneShotRoute(region) { + const routes = Routes.getRoutesByRegion(region).map(r => r.number); + const first = Math.min(...routes); + const last = Math.max(...routes); + const attack = Math.max(1, App.game.party.calculatePokemonAttack(PokemonType.None, PokemonType.None, false, region, true, false, WeatherType.Clear)); + for (let route = last; route >= first; route--) { + if (PokemonFactory.routeHealth(route, region) < attack) { + return route; + } + } + return 0; + } +} +QuestHelper.quests = { + DefeatPokemonsQuest, + CapturePokemonsQuest, + CapturePokemonTypesQuest, + ClearBattleFrontierQuest, + GainFarmPointsQuest, + GainMoneyQuest, + GainTokensQuest, + GainGemsQuest, + HatchEggsQuest, + MineLayersQuest, + MineItemsQuest, + CatchShiniesQuest, + CatchShadowsQuest, + DefeatGymQuest, + DefeatDungeonQuest, + UsePokeballQuest, + UseOakItemQuest, + HarvestBerriesQuest, +}; +class QuestLine { + constructor(name, description, requirement, bulletinBoard = GameConstants.BulletinBoards.None, disablePausing = false // applies to bulletin board quests only + ) { + this.name = name; + this.description = description; + this.requirement = requirement; + this.bulletinBoard = bulletinBoard; + this.disablePausing = disablePausing; + this.state = ko.observable(QuestLineState.inactive).extend({ numeric: 0 }); + this.pausableStates = [GameConstants.GameState.town, GameConstants.GameState.fighting]; + this.name = name; + this.description = description; + this.quests = ko.observableArray(); + this.totalQuests = 0; + this.curQuest = ko.pureComputed(() => { + const acc = 0; + return this.quests().map((quest) => { + return +quest.isCompleted(); + }) + .reduce((acc, iscompleted) => { + return acc + iscompleted; + }, 0); + }); + this.curQuestInitial = ko.observable(); + this.curQuestInitial.equalityComparer = () => { + return false; + }; //Always update subscriptions, even if same data pushed in + this.curQuestObject = ko.pureComputed(() => { + this.quests(); //register dependency on this computed so it will update + if (this.totalQuests > 0 && this.curQuest() < this.totalQuests) { + return this.quests()[this.curQuest()]; + } + else { + return { progress: () => { + return 0; + }, progressText: () => { + return ''; + } }; + } + }); + this.autoBegin = this.curQuest.subscribe((num) => { + if (this.curQuest() < this.totalQuests) { + if (this.curQuestObject().initial() == null && this.state() != QuestLineState.suspended) { + this.beginQuest(this.curQuest()); + } + } + else { + this.state(QuestLineState.ended); + } + }); + } + addQuest(quest) { + this.totalQuests++; + quest.index = this.totalQuests; + quest.inQuestLine = true; + quest.parentQuestLine = this; + quest.createAutoCompleter(); + this.quests.push(quest); + } + beginQuest(index = 0, initial, notifyStart = false) { + const quest = this.quests()[index]; + if (initial != undefined) { + quest.initial(initial); + } + else { + quest.begin(); + } + quest.onLoad(); + this.curQuestInitial(quest.initial()); + this.state(QuestLineState.started); + if (notifyStart) { + Notifier.notify({ + title: 'New Quest Line Started!', + message: `${this.description}\n"${this.name}" added to the Quest List!`, + type: NotificationConstants.NotificationOption.success, + timeout: 5 * GameConstants.MINUTE, + }); + } + } + resumeAt(index, initial) { + if (initial != undefined) { + for (let i = 0; i < Math.min(index, this.totalQuests); i++) { + this.quests()[i].complete(true); + } + if (index < this.totalQuests) { + this.beginQuest(index, initial); + } + } + else { + this.beginQuest(0); + } + } + suspendQuest(skipPausableCheck = false) { + if ((!skipPausableCheck && !this.isPausable()) || this.state() == QuestLineState.suspended) { + // Do nothing if already suspended or not pausable. + return; + } + // Mark quest (or sub quests if multi quest) as suspended to prevent progress + const quest = this.quests()[this.curQuest()]; + if (quest instanceof MultipleQuestsQuest) { + quest.quests.forEach((q) => q.suspended = true); + } + quest.suspended = true; + this.state(QuestLineState.suspended); + } + resumeSuspendedQuest() { + if (this.state() != QuestLineState.suspended) { + return; + } + // Re-activate suspended quest + const quest = this.quests()[this.curQuest()]; + if (quest instanceof MultipleQuestsQuest) { + quest.quests.forEach((q) => q.suspended = false); + } + quest.suspended = false; + this.state(QuestLineState.started); + } + isPausable() { + if (this.disablePausing || this.bulletinBoard == GameConstants.BulletinBoards.None + || !this.pausableStates.includes(App.game.gameState)) { + return false; + } + return true; + } + get pauseTooltip() { + if (this.disablePausing || this.bulletinBoard == GameConstants.BulletinBoards.None) { + return 'This quest line cannot be paused. It is either a story, progression related, or otherwise required quest.'; + } + if (!this.pausableStates.includes(App.game.gameState)) { + return 'Quest Lines can only be paused while in a town or fighting on a route.'; + } + return 'Pausing this quest line will remove it from your quest list and prevent any progress.

    It can be resumed from the current step at the Bulletin Board it was originally accepted.'; + } + toJSON() { + var _a, _b, _c; + const json = { + state: this.state(), + name: this.name, + quest: this.curQuest(), + initial: (_c = (_b = (_a = this.curQuestObject()).initial) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : this.curQuestInitial(), + }; + if (this.curQuestObject() instanceof MultipleQuestsQuest) { + json.initial = this.curQuestObject().quests.map((q) => q.isCompleted() ? true : q.initial()); + } + return json; + } +} +/* Static class used to handle Quest Lines */ +var _a; +class QuestLineHelper { + /* Kanto QuestLines */ + static createTutorial() { + const tutorial = new QuestLine('Tutorial Quests', 'A short set of quests to get you going.'); + // Defeat Starter + const defeatStarter = new CustomQuest(1, 10, 'Defeat the Pokémon. Click to deal damage!', () => App.game.statistics.totalPokemonDefeated()).withInitialValue(0); // Initial of 0 so it auto completes if bugged + tutorial.addQuest(defeatStarter); + // Capture 1 pokemon + const captureOne = new CapturePokemonsQuest(1, 20).withDescription('Capture 1 Pokémon. When you defeat a Pokémon, a Poké Ball is thrown and you have a chance to capture it.').withInitialValue(1); // Initial of 1 so it auto completes if bugged + tutorial.addQuest(captureOne); + // Kill 10 on Route 2 + const routeTwo = new DefeatPokemonsQuest(10, 20, 2, GameConstants.Region.kanto).withDescription('Defeat 10 Pokémon on Route 2. Click Route 2 on the map to move there and begin fighting.').withInitialValue(0); // Initial of 0 so it auto completes if bugged + tutorial.addQuest(routeTwo); + // Say bye to mom + const talkToMom = new TalkToNPCQuest(PalletMom1, 'Go back to Pallet Town and say bye to mom.'); + tutorial.addQuest(talkToMom); + // Buy pokeballs + const buyPokeballs = new BuyPokeballsQuest(10, 20, GameConstants.Pokeball.Pokeball).withInitialValue(0); // Initial of 0 so it auto completes if bugged + tutorial.addQuest(buyPokeballs); + // Learn about catching from the Old Man + const OldManReward = () => { + $('#npc-modal').one('hidden.bs.modal', () => { + Information.show({ + steps: [ + { + element: document.getElementById('pokeballSelector'), + intro: 'Select which Poké Ball types to catch Pokémon with based on their caught/shiny status.
    Hover over the names for more info.

    Capturing Pokémon gains you Dungeon Tokens.

    Try now by clicking the "Caught" selector to change it.', + }, + ], + exitOnEsc: false, + showButtons: false, + }); + const caughtSelector = document.querySelector('tr[data-name="Caught"] img.pokeball-small.clickable.pokeball-selected'); + caughtSelector.addEventListener('click', () => { + Information.hide(); + $('#pokeballSelectorModal').one('shown.bs.modal', null, () => { + // Need to set a timeout, otherwise it messes up the modal layout + setTimeout(() => { + Information.show({ + steps: [ + { + element: document.querySelector('#pokeballSelectorModal .modal-body'), + intro: 'Select the Poké Ball to use this type of ball to capture already caught Pokémon, which will give you Dungeon Tokens when captured.', + }, + ], + // Needed for IntroJs on modals + overlayOpacity: 0, + }); + }, 100); + // Hide the IntroJS overlay once the user selects the Pokeball + const selectPokeball = document.querySelectorAll('#pokeballSelectorModal .clickable')[1]; + selectPokeball.addEventListener('click', () => { + Information.hide(); + }, { + once: true, + }); + }); + }, { + once: true, + }); + }); + }; + const talkToOldMan = new TalkToNPCQuest(ViridianCityOldMan2, 'Talk to the Old Man in Viridian City to learn about catching.').withCustomReward(OldManReward); + tutorial.addQuest(talkToOldMan); + const catch5Pidgey = new CaptureSpecificPokemonQuest('Pidgey', 5, false, 30).withDescription('Use what you\'ve learned to catch 5 Pidgey. Talk to the Old Man again if you need a reminder.'); + tutorial.addQuest(catch5Pidgey); + // Buy Dungeon ticket + const buyDungeonTicket = new CustomQuest(1, 50, 'Buy the Dungeon Ticket from Viridian City Shop.', () => +App.game.keyItems.hasKeyItem(KeyItemType.Dungeon_ticket)).withInitialValue(0); + tutorial.addQuest(buyDungeonTicket); + // Clear Viridian Forest + const clearViridianForest = new DefeatDungeonQuest(1, 50, 'Viridian Forest').withDescription('Gather 50 Dungeon Tokens by (re)capturing Pokémon, then clear the Viridian Forest dungeon.').withInitialValue(0); + tutorial.addQuest(clearViridianForest); + // Defeat Pewter Gym + const pewterReward = () => { + Notifier.notify({ message: 'Tutorial completed!', type: NotificationConstants.NotificationOption.success }); + Information.show({ + steps: [ + { + element: document.getElementById('questDisplayContainer'), + intro: 'Click "List" to see the current quests that can be completed for Quest Points.', + }, + { + element: document.getElementById('startMenu'), + intro: 'See the badges you\'ve earned in the Badge Case. Badges influence the max level of your Pokémon.', + }, + ], + }); + }; + const pewter = new DefeatGymQuest(1, 0, 'Pewter City').withDescription('Defeat Pewter City Gym. Click the town on the map to move there, then click the Gym button to start the battle.').withInitialValue(0).withCustomReward(pewterReward); + tutorial.addQuest(pewter); + App.game.quests.questLines().push(tutorial); + } + // Available upon talking with Bill's Grandpa. + static createBillsGrandpaQuestLine() { + const BillsGrandpaQuestLine = new QuestLine('Bill\'s Grandpa Treasure Hunt', 'Check the hints and bring Bill\'s Grandpa the Pokémon he wants to see.', new RouteKillRequirement(10, GameConstants.Region.kanto, 25), GameConstants.BulletinBoards.Kanto); + const talkToBillsGrandpa1 = new TalkToNPCQuest(BillsGrandpa1, 'Talk to Bill\'s Grandpa in Bill\'s House.'); + BillsGrandpaQuestLine.addQuest(talkToBillsGrandpa1); + const pinkBalloon = new CaptureSpecificPokemonQuest('Jigglypuff', 1).withDescription('Catch the desired Pokémon.'); + const punchNormal = new CustomQuest(100, 0, 'Defeat 100 Normal-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Normal)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + BillsGrandpaQuestLine.addQuest(new MultipleQuestsQuest([ + pinkBalloon, + punchNormal, + ], 'Bill\'s Grandpa wants you to catch a Pokémon that is pink and like a balloon.')); + // Talk to Bill's Grandpa after catching a Jigglypuff + const talkToBillsGrandpa2 = new TalkToNPCQuest(BillsGrandpa2, 'Show your Jigglypuff to Bill\'s Grandpa.').withCustomReward(this.itemReward('Moon_stone', 1, 'Bill\'s Grandpa')); + BillsGrandpaQuestLine.addQuest(talkToBillsGrandpa2); + const blueRound = new CaptureSpecificPokemonQuest('Oddish', 1).withDescription('Catch the desired Pokémon.'); + const punchGrass = new CustomQuest(100, 0, 'Defeat 100 Grass-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Grass)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + BillsGrandpaQuestLine.addQuest(new MultipleQuestsQuest([ + blueRound, + punchGrass, + ], 'Bill\'s Grandpa wants you to catch a Pokémon that is round, blue, and has leaves growing on its head.')); + // Talk to Bill's Grandpa after catching an Oddish + const talkToBillsGrandpa3 = new TalkToNPCQuest(BillsGrandpa3, 'Show your Oddish to Bill\'s Grandpa.').withCustomReward(this.itemReward('Leaf_stone', 1, 'Bill\'s Grandpa')); + BillsGrandpaQuestLine.addQuest(talkToBillsGrandpa3); + const redSphere = new CaptureSpecificPokemonQuest('Staryu', 1).withDescription('Catch the desired Pokémon.'); + const punchWater = new CustomQuest(100, 0, 'Defeat 100 Water-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Water)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + BillsGrandpaQuestLine.addQuest(new MultipleQuestsQuest([ + redSphere, + punchWater, + ], 'Bill\'s Grandpa wants you to catch a Pokémon that has a red sphere in its body and is shaped like a star.')); + // Talk to Bill's Grandpa after catching a Staryu + const talkToBillsGrandpa4 = new TalkToNPCQuest(BillsGrandpa4, 'Show your Staryu to Bill\'s Grandpa.').withCustomReward(this.itemReward('Water_stone', 1, 'Bill\'s Grandpa')); + BillsGrandpaQuestLine.addQuest(talkToBillsGrandpa4); + const loyalRoar = new CaptureSpecificPokemonQuest('Growlithe', 1).withDescription('Catch the desired Pokémon.'); + const punchFire = new CustomQuest(100, 0, 'Defeat 100 Fire-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Fire)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + BillsGrandpaQuestLine.addQuest(new MultipleQuestsQuest([ + loyalRoar, + punchFire, + ], 'Bill\'s Grandpa wants you to catch a Pokémon that is very loyal and supposedly roars pretty well.')); + // Talk to Bill's Grandpa after catching a Growlithe + const talkToBillsGrandpa5 = new TalkToNPCQuest(BillsGrandpa5, 'Show your Growlithe to Bill\'s Grandpa.').withCustomReward(this.itemReward('Fire_stone', 1, 'Bill\'s Grandpa')); + BillsGrandpaQuestLine.addQuest(talkToBillsGrandpa5); + const yellowAndRed = new CaptureSpecificPokemonQuest('Pikachu', 1).withDescription('Catch the desired Pokémon.'); + const punchElectric = new CustomQuest(100, 0, 'Defeat 100 Electric-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Electric)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + BillsGrandpaQuestLine.addQuest(new MultipleQuestsQuest([ + yellowAndRed, + punchElectric, + ], 'Bill\'s Grandpa wants you to catch a Pokémon that has a yellow body and red cheeks.')); + // Talk to Bill's Grandpa after catching a Pikachu + const talkToBillsGrandpa6 = new TalkToNPCQuest(BillsGrandpa6, 'Show your Pikachu to Bill\'s Grandpa.').withCustomReward(this.itemReward('Thunder_stone', 1, 'Bill\'s Grandpa')); + BillsGrandpaQuestLine.addQuest(talkToBillsGrandpa6); + const fightBillsGrandpa = new DefeatTemporaryBattleQuest('Bill\'s Grandpa', 'Bill\'s Grandpa would like to have a battle with you!'); + BillsGrandpaQuestLine.addQuest(fightBillsGrandpa); + // Talk to Bill's Grandpa after battling him + const EeveeReward = () => { + App.game.party.gainPokemonByName('Eevee'); + Notifier.notify({ + title: BillsGrandpaQuestLine.name, + message: 'Bill\'s Grandpa has given you an Eevee, treat it well!', + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.General.new_catch, + timeout: 3e4, + }); + }; + const talkToBillsGrandpa7 = new TalkToNPCQuest(BillsGrandpa7, 'Talk to Bill\'s Grandpa one last time.').withCustomReward(EeveeReward); + BillsGrandpaQuestLine.addQuest(talkToBillsGrandpa7); + App.game.quests.questLines().push(BillsGrandpaQuestLine); + } + // Started upon defeating Cerulean City's gym. + static createRocketKantoQuestLine() { + const rocketKantoQuestLine = new QuestLine('Team Rocket', 'Some nasty villains are up to no good.'); + const clearRocketGameCorner = new DefeatDungeonQuest(1, 0, 'Rocket Game Corner').withDescription('Illegal activity is afoot. Clear the Rocket Game Corner in Celadon City.') + .withOptionalArgs({ + clearedMessage: 'I see that you raise Pokémon with utmost care. A child like you would never understand what I hope to achieve. I shall step aside this time! I hope we meet again...', + npcDisplayName: 'Team Rocket Boss Giovanni', + npcImageName: 'Team Rocket Boss Giovanni', + }); + rocketKantoQuestLine.addQuest(clearRocketGameCorner); + const clearSilphCo1 = new DefeatDungeonQuest(1, 0, 'Silph Co.').withDescription('Team Rocket has occupied Silph Co. Clear Silph Co. in Saffron City to find the Card Key.') + .withOptionalArgs({ + clearedMessage: 'What kept you $playername$? Hahaha! I thought you\'d turn up if I waited here! I guess Team Rocket slowed you down! Not that I care! I saw you in Saffron, so I decided to see if you got better!', + npcDisplayName: 'Rival Blue', + npcImageName: 'Rival Blue', + }); + rocketKantoQuestLine.addQuest(clearSilphCo1); + const clearBlue = new DefeatTemporaryBattleQuest('Blue 5', 'Blue is getting in your way. Defeat him in Silph Co.'); + rocketKantoQuestLine.addQuest(clearBlue); + const clearSilphCo2 = new DefeatDungeonQuest(1, 0, 'Silph Co.').withDescription('Team Rocket has occupied Silph Co. Clear Silph Co. in Saffron City once more to foil their plans.') + .withOptionalArgs({ + clearedMessage: 'Arrgh!! I lost again!? Blast it all! You ruined our plans for Silph! But Team Rocket will never fall! $playername$, never forget that all Pokémon exist for Team Rocket! I must go, but I shall return!', + npcDisplayName: 'Team Rocket Boss Giovanni', + npcImageName: 'Team Rocket Boss Giovanni', + }); + rocketKantoQuestLine.addQuest(clearSilphCo2); + const ViridianGymReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + Notifier.notify({ + title: rocketKantoQuestLine.name, + message: 'The President of Silph Co. has rewarded you with a Master Ball!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const clearViridianGym = new DefeatGymQuest(1, 0, 'Viridian City').withCustomReward(ViridianGymReward).withDescription('If you take down Team Rocket\'s leader one more time they will surely never come back from this! Clear Viridian City Gym.'); + rocketKantoQuestLine.addQuest(clearViridianGym); + App.game.quests.questLines().push(rocketKantoQuestLine); + } + // Started upon defeating Fuchsia City's gym. + static createUndergroundQuestLine() { + const undergroundQuestLine = new QuestLine('Mining Expedition', 'Explore the underground!'); + //Buy Explorer Kit (no reward) + const buyExplorerKit = new CustomQuest(1, 0, 'Buy the Explorer Kit from Cinnabar Island Shop.', () => +App.game.keyItems.hasKeyItem(KeyItemType.Explorer_kit)).withInitialValue(0); + undergroundQuestLine.addQuest(buyExplorerKit); + // Mine 5 layers in the Underground + const oldAmberReward = () => { + // Gain an Old Amber + ItemList.Old_amber.gain(1); + Notifier.notify({ + title: undergroundQuestLine.name, + message: 'You have gained an Old Amber fossil!\nYou can breed this in the hatchery.', + type: NotificationConstants.NotificationOption.success, + timeout: GameConstants.MINUTE, + }); + }; + const mineLayers = new MineLayersQuest(5, 0).withDescription('Mine 5 layers in the Underground.').withCustomReward(oldAmberReward); + undergroundQuestLine.addQuest(mineLayers); + App.game.quests.questLines().push(undergroundQuestLine); + } + // Started upon defeating Cinnabar Island's gym. + static createBillSeviiQuestLine() { + const billSeviiQuestLine = new QuestLine('Bill\'s Errand', 'Bill has asked you to journey to the Sevii Islands with him to set up a digital connection to mainland Kanto.'); + const talktoCelio1 = new TalkToNPCQuest(OneIslandCelio1, 'Use the Subregional Travel button at the top of the map to travel to the Sevii Islands and speak with Celio on One Island.'); + billSeviiQuestLine.addQuest(talktoCelio1); + const talktoGameCornerOwner1 = new TalkToNPCQuest(TwoIslandGameCornerOwner1, 'Ask the Game Corner owner on Two Island about the meteorite.'); + billSeviiQuestLine.addQuest(talktoGameCornerOwner1); + const clearBikerGangTemporaryBattles = new CustomQuest(3, 0, 'A biker gang has invaded Three island. They will not let you continue to Berry Forest. Defeat the Biker Goons.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Biker Goon 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Biker Goon 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Biker Goon 3')]()); + billSeviiQuestLine.addQuest(clearBikerGangTemporaryBattles); + const clearCueBallPaxtonTemporaryBattle = new DefeatTemporaryBattleQuest('Cue Ball Paxton', 'Defeat the biker gang\'s leader.'); + billSeviiQuestLine.addQuest(clearCueBallPaxtonTemporaryBattle); + const clearBerryForest = new DefeatDungeonQuest(1, 0, 'Berry Forest').withDescription('Find Lostelle. Clear Berry Forest.'); + billSeviiQuestLine.addQuest(clearBerryForest); + const talktoGameCornerOwner2 = new TalkToNPCQuest(TwoIslandGameCornerOwner2, 'Lostelle has been found. Return to the Game Corner owner on Two Island.').withCustomReward(() => ItemList.Meteorite_Bills_Errand.gain(1)); + billSeviiQuestLine.addQuest(talktoGameCornerOwner2); + const BillsErrandReward = () => { + App.game.wallet.gainQuestPoints(1000, true); + Notifier.notify({ + title: billSeviiQuestLine.name, + message: 'Celio has rewarded you with 1,000 Quest Points!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const talktoCelio2 = new TalkToNPCQuest(OneIslandCelio2, 'Deliver the meteorite to Celio on One Island.').withCustomReward(BillsErrandReward); + billSeviiQuestLine.addQuest(talktoCelio2); + App.game.quests.questLines().push(billSeviiQuestLine); + } + // Started upon defeating Viridian City's gym. + static createPersonsofInterestQuestLine() { + const personsofInterestQuestLine = new QuestLine('Persons of Interest', 'Some people want to talk to you.'); + const talktoBreeder = new TalkToNPCQuest(SaffronBreeder, 'Talk to the Breeder in Saffron City.', 250); + personsofInterestQuestLine.addQuest(talktoBreeder); + const talktoGemScientist = new TalkToNPCQuest(PewterScientist, 'Talk to the Gem Scientist in Pewter City.', 250); + personsofInterestQuestLine.addQuest(talktoGemScientist); + App.game.quests.questLines().push(personsofInterestQuestLine); + } + /* Johto QuestLines */ + // Started upon defeating Ecruteak City's gym + static createSickAmpharosQuestLine() { + const sickAmpharosQuestLine = new QuestLine('The Sick Ampharos', 'Jasmine\'s Ampharos seems to be sick!'); + const clearOlivineLighthouse = new DefeatDungeonQuest(1, 0, 'Olivine Lighthouse').withDescription('Clear the Olivine Lighthouse dungeon in Olivine City.'); + sickAmpharosQuestLine.addQuest(clearOlivineLighthouse); + const talkToJasmine1 = new TalkToNPCQuest(OlivineLighthouseJasmine1, 'Talk to Jasmine in the Olivine Lighthouse.'); + sickAmpharosQuestLine.addQuest(talkToJasmine1); + const talkToHerbalist1 = new TalkToNPCQuest(CianwoodCityPharmacist1, 'Talk to the Pharmacist in Cianwood City.'); + sickAmpharosQuestLine.addQuest(talkToHerbalist1); + const clearCianwoodCityGym = new DefeatGymQuest(1, 0, 'Cianwood City').withDescription('The Pharmacist said he needs some time to finish Amphys medicine. Clear the Cianwood City Gym in the meantime.'); + sickAmpharosQuestLine.addQuest(clearCianwoodCityGym); + const talkToHerbalist2 = new TalkToNPCQuest(CianwoodCityPharmacist2, 'Talk to the Pharmacist in Cianwood City.'); + sickAmpharosQuestLine.addQuest(talkToHerbalist2); + const giveMedicineToAmphy = new TalkToNPCQuest(OlivineLighthouseMedicineAmphy, 'Give Amphy their medicine in the Olivine Lighthouse.'); + sickAmpharosQuestLine.addQuest(giveMedicineToAmphy); + const talkToJasmine2 = new TalkToNPCQuest(OlivineLighthouseJasmine2, 'Talk to Jasmine in the Olivine Lighthouse.'); + sickAmpharosQuestLine.addQuest(talkToJasmine2); + App.game.quests.questLines().push(sickAmpharosQuestLine); + } + // Started upon defeating Ecruteak City's gym. + static createRocketJohtoQuestLine() { + const rocketJohtoQuestLine = new QuestLine('Team Rocket Again', 'Team Rocket is up to no good again!'); + const defeatRedGyarados = new DefeatTemporaryBattleQuest('Red Gyarados', 'Defeat the rampaging Red Gyarados!'); + rocketJohtoQuestLine.addQuest(defeatRedGyarados); + const clearTeamRocketHideout = new DefeatDungeonQuest(1, 0, 'Team Rocket\'s Hideout').withDescription('Clear the Team Rocket\'s Hideout dungeon in Mahogany Town'); + rocketJohtoQuestLine.addQuest(clearTeamRocketHideout); + const radioTowerReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + Notifier.notify({ + title: rocketJohtoQuestLine.name, + message: 'The grateful radio director gave you a Master Ball!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const clearRadioTower = new DefeatDungeonQuest(1, 0, 'Radio Tower').withDescription('Clear the Radio Tower dungeon in Goldenrod City').withCustomReward(radioTowerReward); + rocketJohtoQuestLine.addQuest(clearRadioTower); + App.game.quests.questLines().push(rocketJohtoQuestLine); + } + // Available upon clearing Route 37 + static createJohtoBeastsQuestLine() { + const johtoBeastsQuestLine = new QuestLine('The Legendary Beasts', 'Investigate the legends surrounding the strange Burned Tower in Ecruteak City.', new RouteKillRequirement(10, GameConstants.Region.johto, 37), GameConstants.BulletinBoards.Johto, true); + const talktoEusine1 = new TalkToNPCQuest(EcruteakEusine, 'Talk to Eusine in Ecruteak City.'); + johtoBeastsQuestLine.addQuest(talktoEusine1); + const clearBurnedTower = new DefeatDungeonQuest(1, 0, 'Burned Tower').withDescription('Clear the Burned Tower.'); + johtoBeastsQuestLine.addQuest(clearBurnedTower); + const clearSilver = new DefeatTemporaryBattleQuest('Silver 3', 'Defeat Silver.'); + johtoBeastsQuestLine.addQuest(clearSilver); + const talktoPokéfanDerek = new TalkToNPCQuest(EcruteakPokéfan, 'Talk to Pokéfan Derek in Ecruteak City.').withCustomReward(() => App.game.quests.getQuestLine('Eusine\'s Chase').beginQuest(0, undefined, true)); + johtoBeastsQuestLine.addQuest(talktoPokéfanDerek); + const catchRaikou = new CaptureSpecificPokemonQuest('Raikou', 1, true); + const catchEntei = new CaptureSpecificPokemonQuest('Entei', 1, true); + const catchSuicune = new CaptureSpecificPokemonQuest('Suicune'); + johtoBeastsQuestLine.addQuest(new MultipleQuestsQuest([ + catchRaikou, + catchEntei, + catchSuicune, + ], 'Catch the Legendary Beasts.')); + App.game.quests.questLines().push(johtoBeastsQuestLine); + } + static createJohtoSuicuneQuestLine() { + const johtoSuicuneQuestLine = new QuestLine('Eusine\'s Chase', 'Eusine is looking for Suicune.'); + const clearCianwoodSuicune = new DefeatTemporaryBattleQuest('Suicune 1', 'Find Suicune.'); + johtoSuicuneQuestLine.addQuest(clearCianwoodSuicune); + const talktoEusine2 = new TalkToNPCQuest(CianwoodEusine, 'Talk to Eusine in Cianwood City.'); + johtoSuicuneQuestLine.addQuest(talktoEusine2); + const clearEusine = new DefeatTemporaryBattleQuest('Eusine', 'Defeat Eusine.'); + johtoSuicuneQuestLine.addQuest(clearEusine); + const clearRoute42Suicune = new DefeatTemporaryBattleQuest('Suicune 2', 'Find Suicune.'); + johtoSuicuneQuestLine.addQuest(clearRoute42Suicune); + const talktoEusine3 = new TalkToNPCQuest(MahoganyEusine, 'Talk to Eusine in Mahogany Town.'); + johtoSuicuneQuestLine.addQuest(talktoEusine3); + const clearVermilionSuicune = new DefeatTemporaryBattleQuest('Suicune 3', 'Find Suicune.'); + johtoSuicuneQuestLine.addQuest(clearVermilionSuicune); + const talktoEusine4 = new TalkToNPCQuest(VermilionEusine, 'Talk to Eusine in Vermilion City.'); + johtoSuicuneQuestLine.addQuest(talktoEusine4); + const clearRoute14Suicune = new DefeatTemporaryBattleQuest('Suicune 4', 'Find Suicune.'); + johtoSuicuneQuestLine.addQuest(clearRoute14Suicune); + const talktoEusine5 = new TalkToNPCQuest(FuchsiaEusine, 'Talk to Eusine in Fuchsia City.'); + johtoSuicuneQuestLine.addQuest(talktoEusine5); + const clearRoute25Suicune = new DefeatTemporaryBattleQuest('Suicune 5', 'Find Suicune.'); + johtoSuicuneQuestLine.addQuest(clearRoute25Suicune); + const talktoEusine6 = new TalkToNPCQuest(BillsHouseEusine, 'Talk to Eusine in Bill\'s House.'); + johtoSuicuneQuestLine.addQuest(talktoEusine6); + const catchRoute25Suicune = new CaptureSpecificPokemonQuest('Suicune'); + johtoSuicuneQuestLine.addQuest(catchRoute25Suicune); + App.game.quests.questLines().push(johtoSuicuneQuestLine); + } + // Lugia Quest - Available upon clearing Rocket Johto questline + static createlugiaJohtoQuestLine() { + const lugiaJohtoQuestLine = new QuestLine('Whirl Guardian', 'The Kimono Girls of Ecruteak City need help.', new QuestLineCompletedRequirement('Team Rocket Again'), GameConstants.BulletinBoards.Johto); + const talktoZuki = new TalkToNPCQuest(Zuki, 'Talk to Kimono Girl Zuki in Violet City.'); + lugiaJohtoQuestLine.addQuest(talktoZuki); + const helpZuki = new HatchEggsQuest(25, 0); + lugiaJohtoQuestLine.addQuest(helpZuki); + const talktoNaoko = new TalkToNPCQuest(Naoko, 'Talk to Kimono Girl Naoko in the Ilex Forest.'); + lugiaJohtoQuestLine.addQuest(talktoNaoko); + const helpNaoko = new DefeatDungeonQuest(1, 0, 'Ilex Forest').withDescription('Clear Ilex Forest to lead Naoko to safety.'); + lugiaJohtoQuestLine.addQuest(helpNaoko); + const kimonoReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Ultraball, 50, false); + Notifier.notify({ + title: lugiaJohtoQuestLine.name, + message: 'Kimono Girl Miki has given you a package containing 50 Ultra Balls.', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const talktoMiki = new TalkToNPCQuest(Miki, 'Talk to Kimono Girl Miki at the Ecruteak City Dance Theatre.').withCustomReward(kimonoReward); + lugiaJohtoQuestLine.addQuest(talktoMiki); + const talktoSayo = new TalkToNPCQuest(Sayo, 'Talk to Kimono Girl Sayo in the Ice Path.'); + lugiaJohtoQuestLine.addQuest(talktoSayo); + const helpSayo = new DefeatDungeonQuest(1, 0, 'Ice Path').withDescription('Clear the Ice Path to give Sayo a push.'); + lugiaJohtoQuestLine.addQuest(helpSayo); + const talktoKuni = new TalkToNPCQuest(Kuni, 'Talk to Kimono Girl Kuni in Goldenrod City.'); + lugiaJohtoQuestLine.addQuest(talktoKuni); + const helpKuni = new DefeatDungeonQuest(1, 0, 'Radio Tower').withDescription('Clear the Radio Tower to get rid of any lingering Team Rocket activity.'); + lugiaJohtoQuestLine.addQuest(helpKuni); + const talktoKimonoGirlsWhirl = new TalkToNPCQuest(KimonoGirlsWhirl, 'Meet the Kimono Girls at the Whirl Islands.').withCustomReward(() => ItemList.Tidal_Bell_Lugia.gain(1)); + lugiaJohtoQuestLine.addQuest(talktoKimonoGirlsWhirl); + const LugiaCatch = new CaptureSpecificPokemonQuest('Lugia').withDescription('Catch Lugia in the Whirl Islands.'); + lugiaJohtoQuestLine.addQuest(LugiaCatch); + App.game.quests.questLines().push(lugiaJohtoQuestLine); + } + // Ho-Oh Quest - Available upon clearing Lugia questline + static createhoohJohtoQuestLine() { + const hoohJohtoQuestLine = new QuestLine('Rainbow Guardian', 'The Kimono Girls of Ecruteak City wish to speak with you again.', new MultiRequirement([new QuestLineStepCompletedRequirement('Whirl Guardian', 9), new ObtainedPokemonRequirement('Raikou'), new ObtainedPokemonRequirement('Entei'), new ObtainedPokemonRequirement('Suicune')]), GameConstants.BulletinBoards.Johto); + const talkKimonoGirlsEcruteak = new TalkToNPCQuest(KimonoGirlsEcruteak, 'Meet the Kimono Girls at the Ecruteak Dance Theatre.'); + hoohJohtoQuestLine.addQuest(talkKimonoGirlsEcruteak); + const clearKimonoGirls = new DefeatTemporaryBattleQuest('Kimono Girls', 'Prove your abilities as a trainer to the Kimono Girls of Ecruteak City.').withCustomReward(() => ItemList.Clear_Bell_Hooh.gain(1)); + hoohJohtoQuestLine.addQuest(clearKimonoGirls); + const HoohCatch = new CaptureSpecificPokemonQuest('Ho-Oh').withDescription('Catch Ho-Oh in the Tin Tower.'); + hoohJohtoQuestLine.addQuest(HoohCatch); + App.game.quests.questLines().push(hoohJohtoQuestLine); + } + // Available upon completing Bill's Errand + static createCelebiJohtoQuestLine() { + const celebiJohtoQuestLine = new QuestLine('Unfinished Business', 'A request from Professor Oak.', new QuestLineCompletedRequirement('Bill\'s Errand'), GameConstants.BulletinBoards.Kanto); + const talktoProfOak1 = new TalkToNPCQuest(PalletCelebiProfOak1, 'Talk to Professor Oak in Pallet Town.'); + celebiJohtoQuestLine.addQuest(talktoProfOak1); + const talktoProfIvy = new TalkToNPCQuest(CelebiProfIvy, 'Talk to Professor Ivy in her lab in the Sevii Islands.').withCustomReward(() => ItemList.GS_Ball_Celebi.gain(1)); + celebiJohtoQuestLine.addQuest(talktoProfIvy); + const talktoProfOak2 = new TalkToNPCQuest(PalletCelebiProfOak2, 'Deliver the GS Ball to Professor Oak in Pallet Town.'); + celebiJohtoQuestLine.addQuest(talktoProfOak2); + const talktoKurt1 = new TalkToNPCQuest(AzaleaCelebiKurt2, 'Deliver the GS Ball to Kurt in Azalea Town in Johto.'); + celebiJohtoQuestLine.addQuest(talktoKurt1); + const talktoKurt2 = new TalkToNPCQuest(AzaleaCelebiKurt4, 'Talk to Kurt again after becoming Champion of Johto.'); + celebiJohtoQuestLine.addQuest(talktoKurt2); + const talktoProfOak3 = new TalkToNPCQuest(AzaleaCelebiOak1, 'Talk to Professor Oak in Azalea Town.'); + celebiJohtoQuestLine.addQuest(talktoProfOak3); + const talktoIlexForestShrine1 = new TalkToNPCQuest(IlexForestShrine1, 'Investigate the shrine in Ilex Forest.'); + celebiJohtoQuestLine.addQuest(talktoIlexForestShrine1); + const clearSpikyEaredPichu = new DefeatTemporaryBattleQuest('Spiky-eared Pichu', 'Defeat the strange Pichu.'); + celebiJohtoQuestLine.addQuest(clearSpikyEaredPichu); + const talktoProfOak4 = new TalkToNPCQuest(AzaleaCelebiOak2, 'Talk to Professor Oak in Azalea Town.'); + celebiJohtoQuestLine.addQuest(talktoProfOak4); + const talktoTohjoFallsTimeDistortion = new TalkToNPCQuest(TohjoFallsCelebiTimeDistortion, 'Investigate the Time Distortion in Tohjo Falls.'); + celebiJohtoQuestLine.addQuest(talktoTohjoFallsTimeDistortion); + const clearGiovanni = new DefeatTemporaryBattleQuest('Rocket Boss Giovanni', 'Defeat Giovanni.'); + celebiJohtoQuestLine.addQuest(clearGiovanni); + const talktoProfOak5 = new TalkToNPCQuest(AzaleaCelebiOak3, 'Talk to Professor Oak in Azalea Town.'); + celebiJohtoQuestLine.addQuest(talktoProfOak5); + const talktoIlexForestShrine2 = new TalkToNPCQuest(IlexForestShrine2, 'Investigate the shrine in Ilex Forest.'); + celebiJohtoQuestLine.addQuest(talktoIlexForestShrine2); + const CelebiCatch = new CaptureSpecificPokemonQuest('Celebi').withDescription('Play with the Celebi in Ilex Forest.'); + celebiJohtoQuestLine.addQuest(CelebiCatch); + const talktoProfOak6 = new TalkToNPCQuest(AzaleaCelebiOak5, 'Talk to Professor Oak in Azalea Town.'); + celebiJohtoQuestLine.addQuest(talktoProfOak6); + App.game.quests.questLines().push(celebiJohtoQuestLine); + } + /* Hoenn QuestLines */ + // Started upon defeating Mauville City's gym. + static createAquaMagmaHoennQuestLine() { + const aquaMagmaHoennQuestLine = new QuestLine('Land vs. Water', 'Put a stop to the schemes of Team Aqua and Team Magma!'); + const clearMtChimney = new DefeatDungeonQuest(1, 0, 'Mt. Chimney Crater').withDescription('Stop Team Magma at Mt. Chimney Crater.'); + aquaMagmaHoennQuestLine.addQuest(clearMtChimney); + const clearWeatherInstitute = new DefeatDungeonQuest(1, 0, 'Weather Institute').withDescription('Stop Team Aqua at the Weather Institute.'); + aquaMagmaHoennQuestLine.addQuest(clearWeatherInstitute); + const clearMagmaHideout = new DefeatDungeonQuest(1, 0, 'Magma Hideout').withDescription('Raid the Team Magma hideout.'); + aquaMagmaHoennQuestLine.addQuest(clearMagmaHideout); + const clearAquaHideout = new DefeatDungeonQuest(1, 0, 'Aqua Hideout').withDescription('Raid the Team Aqua hideout.'); + aquaMagmaHoennQuestLine.addQuest(clearAquaHideout); + const seafloorCavernReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + Notifier.notify({ + title: aquaMagmaHoennQuestLine.name, + message: 'You found a Master Ball!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const clearSeafloorCavern = new DefeatDungeonQuest(1, 0, 'Seafloor Cavern').withDescription('Team Aqua\'s leader Archie escaped from their hideout. Find him in the Seafloor Cavern and put a stop to this once and for all!').withCustomReward(seafloorCavernReward); + aquaMagmaHoennQuestLine.addQuest(clearSeafloorCavern); + App.game.quests.questLines().push(aquaMagmaHoennQuestLine); + } + // Weather Trio - Available upon clearing Aqua/Magma questline + static createWeatherTrioQuestLine() { + const weatherTrioQuestLine = new QuestLine('The Weather Trio', 'Put an ancient battle to rest.', new QuestLineCompletedRequirement('Land vs. Water'), GameConstants.BulletinBoards.Hoenn); + const weatherBattle1 = new TalkToNPCQuest(WeatherBattle1, 'Investigate the commotion in Sootopolis City.'); + weatherTrioQuestLine.addQuest(weatherBattle1); + const clearCaveOfOrigin = new DefeatDungeonQuest(1, 0, 'Cave of Origin').withDescription('Explore the Cave of Origin to find Wallace.'); + weatherTrioQuestLine.addQuest(clearCaveOfOrigin); + const talkToWallace1 = new TalkToNPCQuest(Wallace1, 'Talk to Wallace in the Cave of Origin to learn how to stop Kyogre and Groudon from fighting.'); + weatherTrioQuestLine.addQuest(talkToWallace1); + const clearSkyPillar = new DefeatDungeonQuest(1, 0, 'Sky Pillar').withDescription('Climb the Sky Pillar to find the super-ancient Pokémon Rayquaza.'); + weatherTrioQuestLine.addQuest(clearSkyPillar); + const weatherBattle2 = new TalkToNPCQuest(WeatherBattle2, 'Return to Sootopolis City to see what Rayquaza will do.'); + weatherTrioQuestLine.addQuest(weatherBattle2); + const talkToWallace2 = new TalkToNPCQuest(Wallace2, 'Talk to Wallace in the Cave of Origin about the aftermath of the battle.'); + weatherTrioQuestLine.addQuest(talkToWallace2); + const catchRayquaza = new CaptureSpecificPokemonQuest('Rayquaza'); + const catchKyogre = new CaptureSpecificPokemonQuest('Kyogre'); + const catchGroudon = new CaptureSpecificPokemonQuest('Groudon'); + weatherTrioQuestLine.addQuest(new MultipleQuestsQuest([ + catchRayquaza, + catchKyogre, + catchGroudon, + ], 'Catch the Weather Trio.')); + App.game.quests.questLines().push(weatherTrioQuestLine); + } + // Deoxys - Available post-E4 + static createDeoxysQuestLine() { + const deoxysQuestLine = new QuestLine('Mystery of Deoxys', 'Discover the mystery of Deoxys.', new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), GameConstants.BulletinBoards.Hoenn); + // Defeat 50 Pokemon on route 129 + const route129 = new DefeatPokemonsQuest(50, 0, 129, GameConstants.Region.hoenn); + deoxysQuestLine.addQuest(route129); + // Defeat 500 Psychic type Pokemon + const psychicGemReward = () => { + App.game.gems.gainGems(500, PokemonType.Psychic); + Notifier.notify({ + title: deoxysQuestLine.name, + message: 'You have gained 500 Psychic gems!', + type: NotificationConstants.NotificationOption.success, + }); + }; + const defeatPsychic = new CustomQuest(500, 0, 'Defeat 500 Psychic-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Psychic)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }).withCustomReward(psychicGemReward); + deoxysQuestLine.addQuest(defeatPsychic); + // Capture 200 Psychic type Pokemon + const mindPlateReward = () => { + ItemList.Mind_plate.gain(20); + Notifier.notify({ + title: deoxysQuestLine.name, + message: 'You have gained 20 Mind Plates!', + type: NotificationConstants.NotificationOption.success, + }); + }; + const catchPsychic = new CapturePokemonTypesQuest(200, 0, PokemonType.Psychic).withDescription('Capture or hatch 200 Psychic-type Pokémon.').withCustomReward(mindPlateReward); + deoxysQuestLine.addQuest(catchPsychic); + // Reach stage 100 in battle frontier + const reachStage100Reward = () => { + Notifier.notify({ + title: deoxysQuestLine.name, + message: 'Quest line completed!\nYou have uncovered the Mystery of Deoxys!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const deoxysMilestone = BattleFrontierMilestones.milestoneRewards.find(m => m.pokemonName === 'Deoxys'); + // Initial value of 0. Should not be required unless the save is corrupt. + const reachStage100 = new CustomQuest(1, 0, 'Enter the Battle Frontier and defeat stage 100.', () => +deoxysMilestone.obtained()).withInitialValue(0).withCustomReward(reachStage100Reward); + deoxysQuestLine.addQuest(reachStage100); + App.game.quests.questLines().push(deoxysQuestLine); + } + // Eon Duo - Available post-E4 + static createEonDuoQuestLine() { + const eonDuoQuestLine = new QuestLine('The Eon Duo', 'Track down the elusive Eon Duo.', new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), GameConstants.BulletinBoards.Hoenn); + const television1 = new TalkToNPCQuest(Television1, 'Watch a news report in Littleroot Town about a mysterious Pokémon.'); + eonDuoQuestLine.addQuest(television1); + const television2 = new TalkToNPCQuest(Television2, 'Change channels to watch a different TV station in Littleroot town.'); + eonDuoQuestLine.addQuest(television2); + const ticketClaim = new TalkToNPCQuest(TicketClaim, 'Go to Hoenn Pokémon League to claim your Eon ticket.'); + eonDuoQuestLine.addQuest(ticketClaim); + const southernIslandClearing = new TalkToNPCQuest(SouthernIsland1, 'Claim your Eon Ticket in the Start Menu and investigate the Southern Island.'); + eonDuoQuestLine.addQuest(southernIslandClearing); + const catchLatias = new CaptureSpecificPokemonQuest('Latias', 1, true); + const catchLatios = new CaptureSpecificPokemonQuest('Latios', 1, true); + eonDuoQuestLine.addQuest(new MultipleQuestsQuest([ + catchLatias, + catchLatios, + ], 'Catch or hatch the Eon Duo.')); + App.game.quests.questLines().push(eonDuoQuestLine); + } + // Ruby/Sapphire - Available post-E4 + static createRubySapphireSeviiQuestLine() { + const rubySapphireSeviiQuestLine = new QuestLine('Celio\'s Errand', 'Celio has asked you to help him set up a digital connection between the Sevii Islands and Hoenn.', new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), GameConstants.BulletinBoards.Hoenn); + const talktoCelio3 = new TalkToNPCQuest(OneIslandCelio4, 'Speak with Celio on One Island in Sevii.'); + rubySapphireSeviiQuestLine.addQuest(talktoCelio3); + const talktoRocketGrunts = new TalkToNPCQuest(SeviiRocketGrunts, 'Eavesdrop on the Team Rocket Grunts at Mt. Ember.'); + rubySapphireSeviiQuestLine.addQuest(talktoRocketGrunts); + const clearSeviiRocketGrunts1 = new CustomQuest(2, 0, 'Two Team Rocket Grunts are blocking the entrance to Ruby Path. Defeat them.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Sevii Rocket Grunt 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Sevii Rocket Grunt 2')]()); + rubySapphireSeviiQuestLine.addQuest(clearSeviiRocketGrunts1); + const clearRubyPath = new DefeatDungeonQuest(1, 0, 'Ruby Path').withDescription('Locate the Ruby. Clear Ruby Path in Mt. Ember.'); + rubySapphireSeviiQuestLine.addQuest(clearRubyPath); + const talktoRuby = new TalkToNPCQuest(SeviiRuby, 'Take the Ruby in Ruby Path').withCustomReward(() => ItemList.Celios_Errand_Ruby.gain(1)); + rubySapphireSeviiQuestLine.addQuest(talktoRuby); + const talktoCelio4 = new TalkToNPCQuest(OneIslandCelio5, 'Return the Ruby to Celio on One Island'); + rubySapphireSeviiQuestLine.addQuest(talktoCelio4); + const clearIcefallCave = new DefeatDungeonQuest(1, 0, 'Icefall Cave').withDescription('Help Lorelei with Team Rocket Grunts by clearing Icefall Cave on Four Island.'); + rubySapphireSeviiQuestLine.addQuest(clearIcefallCave); + const talktoLorelei = new TalkToNPCQuest(SeviiLorelei, 'Talk to Lorelei in Icefall Cave'); + rubySapphireSeviiQuestLine.addQuest(talktoLorelei); + const talktoGideon = new TalkToNPCQuest(SeviiGideon2, 'Talk to Gideon in Dotted Hole'); + rubySapphireSeviiQuestLine.addQuest(talktoGideon); + const clearSeviiRocketGrunts2 = new CustomQuest(3, 0, 'Defeat the Three Team Rocket Grunts in Rocket Warehouse.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Sevii Rocket Grunt 3')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Sevii Rocket Grunt 4')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Sevii Rocket Grunt 5')]()); + rubySapphireSeviiQuestLine.addQuest(clearSeviiRocketGrunts2); + const clearSeviiAriana = new DefeatTemporaryBattleQuest('Sevii Rocket Ariana', 'Defeat Team Rocket Executive Ariana in Rocket Warehouse.'); + rubySapphireSeviiQuestLine.addQuest(clearSeviiAriana); + const clearSeviiArcher = new DefeatTemporaryBattleQuest('Sevii Rocket Archer', 'Defeat Team Rocket Executive Archer in Rocket Warehouse.'); + rubySapphireSeviiQuestLine.addQuest(clearSeviiArcher); + const clearSeviiGideon = new DefeatTemporaryBattleQuest('Scientist Gideon', 'Defeat Scientist Gideon to reclaim the Sapphire.').withCustomReward(() => ItemList.Celios_Errand_Sapphire.gain(1)); + rubySapphireSeviiQuestLine.addQuest(clearSeviiGideon); + const talktoCelio5 = new TalkToNPCQuest(OneIslandCelio6, 'Return the Sapphire to Celio on One Island'); + rubySapphireSeviiQuestLine.addQuest(talktoCelio5); + App.game.quests.questLines().push(rubySapphireSeviiQuestLine); + } + // Rocket Pinkan - Available post-Orange + static createPinkanThemeparkQuestLine() { + const pinkanThemeparkQuestLine = new QuestLine('Team Rocket\'s Pinkan Theme Park', 'Help Team Rocket build a theme park on Pinkan Island?', new GymBadgeRequirement(BadgeEnums.Elite_OrangeChampion), GameConstants.BulletinBoards.Sevii4567); + const talktoTeamRocket = new TalkToNPCQuest(ThemeparkTeamRocket1, 'Talk to Team Rocket on Pinkan Island to hear about their plans.'); + pinkanThemeparkQuestLine.addQuest(talktoTeamRocket); + const farmPinkan = new HarvestBerriesQuest(1, 0, BerryType.Pinkan).withDescription('Mutate and harvest 1 Pinkan Berry at the farm.'); + pinkanThemeparkQuestLine.addQuest(farmPinkan); + const defeatPinkans = new MultipleQuestsQuest([ + new DefeatPokemonsQuest(500, 0, 41, GameConstants.Region.kanto), + new DefeatPokemonsQuest(500, 0, 42, GameConstants.Region.kanto), + ], 'Help Team Rocket recruit some Pinkan Pokémon').withCustomReward(() => App.game.farming.gainBerry(BerryType.Pinkan, 20)); + pinkanThemeparkQuestLine.addQuest(defeatPinkans); + const collectPinkanMaterials = new MultipleQuestsQuest([ + new GainGemsQuest(1000, 0, PokemonType.Fairy), + new CustomQuest(10, 0, 'Gain 10 Pixie Plates', () => player.itemList.Pixie_plate()), + ], 'Collect Fairy Gems and Pixie Plates'); + pinkanThemeparkQuestLine.addQuest(collectPinkanMaterials); + const talktoTeamRocket2 = new TalkToNPCQuest(ThemeparkTeamRocket4, 'Talk to Team Rocket on Pinkan Island to open the theme park!'); + pinkanThemeparkQuestLine.addQuest(talktoTeamRocket2); + const clearPinkanTeamRocket = new DefeatTemporaryBattleQuest('Pinkan Jessie & James', 'Defeat Team Rocket Jessie & James on Pinkan Island.'); + pinkanThemeparkQuestLine.addQuest(clearPinkanTeamRocket); + const clearPinkanOfficerJenny = new DefeatTemporaryBattleQuest('Pinkan Officer Jenny', 'Oh no! Officer Jenny has showed up. She\'s not happy! No time to plead your case, it\'s time to battle!'); + pinkanThemeparkQuestLine.addQuest(clearPinkanOfficerJenny); + App.game.quests.questLines().push(pinkanThemeparkQuestLine); + } + // Regi Trio Quest - Available upon clearing Mossdeep City's Gym + static createRegiTrioQuestLine() { + const regiTrioQuestLine = new QuestLine('The Three Golems', 'Discover the secrets of the Sealed Chamber.', new GymBadgeRequirement(BadgeEnums.Mind), GameConstants.BulletinBoards.Hoenn); + const clearSealedChamber = new DefeatDungeonQuest(1, 0, 'Sealed Chamber').withDescription('Enter the Sealed Chamber to find clues.'); + regiTrioQuestLine.addQuest(clearSealedChamber); + const readEntranceSign = new TalkToNPCQuest(SCEntrance, 'Investigate the strange markings in the Sealed Chamber.'); + regiTrioQuestLine.addQuest(readEntranceSign); + const mazeStep1 = new TalkToNPCQuest(SCMazeLeft, 'Navigate the maze inside the Sealed Chamber.'); + regiTrioQuestLine.addQuest(mazeStep1); + const mazeStep2 = new TalkToNPCQuest(SCMazeLeft, 'Navigate the maze inside the Sealed Chamber.'); + regiTrioQuestLine.addQuest(mazeStep2); + const mazeStep3 = new TalkToNPCQuest(SCMazeStraight, 'Navigate the maze inside the Sealed Chamber.'); + regiTrioQuestLine.addQuest(mazeStep3); + const mazeStep4 = new TalkToNPCQuest(SCMazeStraight, 'Navigate the maze inside the Sealed Chamber.'); + regiTrioQuestLine.addQuest(mazeStep4); + const mazeStep5 = new TalkToNPCQuest(SCMazeRight, 'Navigate the maze inside the Sealed Chamber.'); + regiTrioQuestLine.addQuest(mazeStep5); + const readSCHints = new TalkToNPCQuest(SCHints, 'Investigate the hidden message at the end of the Sealed Chamber maze.'); + regiTrioQuestLine.addQuest(readSCHints); + const regiHint1 = new DefeatPokemonsQuest(100, 0, 111, GameConstants.Region.hoenn, 'Release Regirock'); + const regiHint2 = new DefeatPokemonsQuest(100, 0, 105, GameConstants.Region.hoenn, 'Release Regice'); + const regiHint3 = new DefeatPokemonsQuest(100, 0, 120, GameConstants.Region.hoenn, 'Release Registeel'); + regiTrioQuestLine.addQuest(new MultipleQuestsQuest([ + regiHint1, + regiHint2, + regiHint3, + ], 'Explore Hoenn by defeating Pokémon on the hinted routes to release the Regi Trio.')); + const catchRegirock = new CaptureSpecificPokemonQuest('Regirock'); + const catchRegice = new CaptureSpecificPokemonQuest('Regice'); + const catchRegisteel = new CaptureSpecificPokemonQuest('Registeel'); + regiTrioQuestLine.addQuest(new MultipleQuestsQuest([ + catchRegirock, + catchRegice, + catchRegisteel, + ], 'Catch the Regi Trio.')); + App.game.quests.questLines().push(regiTrioQuestLine); + } + // Jirachi Quest - Available post-E4 + static createJirachiQuestLine() { + const jirachiQuestLine = new QuestLine('Wish Maker', 'Harness the power of the Millennium Comet and make a wish!', new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), GameConstants.BulletinBoards.Hoenn); + const millenniumFest = new TalkToNPCQuest(MillenniumFest, 'Attend the opening ceremony of the Millennium Festival near Lavaridge Town.'); + jirachiQuestLine.addQuest(millenniumFest); + const clownRocket = new DefeatTemporaryBattleQuest('Clown Jessie & James', 'Defeat Team Rocket Jessie & James at the Millennium Festival near Lavaridge Town.'); + jirachiQuestLine.addQuest(clownRocket); + const talkToButler1 = new TalkToNPCQuest(Butler1, 'Learn the legend of the Millennium Comet from Butler near Lavaridge Town.'); + jirachiQuestLine.addQuest(talkToButler1); + const clearMtChimney2 = new DefeatDungeonQuest(1, 0, 'Mt. Chimney Crater').withDescription('Climb to the Mt. Chimney Crater to get a better view of the Millennium Comet as it passes.').withCustomReward(() => ItemList.Crystalline_Cocoon_Jirachi.gain(1)); + jirachiQuestLine.addQuest(clearMtChimney2); + const catchAbsol = new CaptureSpecificPokemonQuest('Absol', 1, true).withDescription('You are being stalked by Absol, the Disaster Pokémon. Capture it or hatch your own to befriend it.'); + jirachiQuestLine.addQuest(catchAbsol); + const cocoonHatch = new TalkToNPCQuest(CocoonHatch, 'Examine the crystalline cocoon Butler gave you while at the Mt. Chimney Crater.'); + jirachiQuestLine.addQuest(cocoonHatch); + const fightButler1 = new DefeatTemporaryBattleQuest('Butler 1', 'Butler has followed you to the Mt. Chimney Crater and is trying to kidnap Jirachi!'); + jirachiQuestLine.addQuest(fightButler1); + const fightButler2 = new DefeatTemporaryBattleQuest('Butler 2', 'Butler has escaped through the Jagged Pass and hooked Jirachi up to some sort of machine. Fight him to free Jirachi.'); + jirachiQuestLine.addQuest(fightButler2); + const fightMetaGroudon1 = new DefeatTemporaryBattleQuest('Meta Groudon', 'Butler\'s attempts to resurrect Groudon have gone terribly wrong! Fight the resulting abomination!'); + jirachiQuestLine.addQuest(fightMetaGroudon1); + const catchJirachi = new CaptureSpecificPokemonQuest('Jirachi', 1, true).withDescription('Jirachi has escaped in the chaos and is roaming Hoenn. Catch or hatch Jirachi.'); + jirachiQuestLine.addQuest(catchJirachi); + App.game.quests.questLines().push(jirachiQuestLine); + } + // Meta Groudon Quest - Available post-Jirachi, must have obtained Groudon + static createMetaGroudonQuestLine() { + const metaGroudonQuestLine = new QuestLine('A Meta Discovery', 'Help Butler\'s wish come true, responsibly.', new MultiRequirement([new ObtainedPokemonRequirement('Groudon'), new QuestLineCompletedRequirement('Wish Maker')]), GameConstants.BulletinBoards.Hoenn); + const talkToButler2 = new TalkToNPCQuest(Butler2, 'Talk to Butler in the Jagged Pass to learn about his new plan.'); + metaGroudonQuestLine.addQuest(talkToButler2); + const butlerMaterials1 = new CaptureSpecificPokemonQuest('Electrode', 100, true).withDescription('Catch or hatch 100 Electrode'); + const butlerMaterials2 = new MineLayersQuest(25, 0); + const butlerMaterials3 = new CatchShiniesQuest(3, 0); + metaGroudonQuestLine.addQuest(new MultipleQuestsQuest([ + butlerMaterials1, + butlerMaterials2, + butlerMaterials3, + ], 'Gather the materials Butler needs to rebuild his resurrection machine.')); + const calibrateMachine = new CaptureSpecificPokemonQuest('Groudon', 5, true).withDescription('Calibrate the machine by catching or hatching 5 Groudon'); + metaGroudonQuestLine.addQuest(calibrateMachine); + const talkToButler3 = new TalkToNPCQuest(Butler3, 'Deliver the materials to Butler in Mt. Chimney Crater and start the resurrection machine.'); + metaGroudonQuestLine.addQuest(talkToButler3); + const catchMetaGroudon = new CaptureSpecificPokemonQuest('Meta Groudon').withDescription('Butler has revived Meta Groudon at Mt. Chimney Crater. Catch Meta Groudon.'); + metaGroudonQuestLine.addQuest(catchMetaGroudon); + App.game.quests.questLines().push(metaGroudonQuestLine); + } + // Orre Questlines - Available post-Hoenn-E4 + static createOrreColosseumQuestLine() { + const orreColosseumQuestLine = new QuestLine('Shadows in the Desert', 'Explore Orre and uncover the origin of Shadow Pokémon.', new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), GameConstants.BulletinBoards.Hoenn); + const exploreStand = new TalkToNPCQuest(ExploreStand, 'Travel to Orre and explore the Outskirt Stand.'); + orreColosseumQuestLine.addQuest(exploreStand); + const fightWillie = new DefeatTemporaryBattleQuest('Willie', 'Fight Willie'); + orreColosseumQuestLine.addQuest(fightWillie); + const fightFolly = new DefeatTemporaryBattleQuest('Folly', 'Fight Folly the Shady Guy in Phenac City'); + orreColosseumQuestLine.addQuest(fightFolly); + const checkSack = new TalkToNPCQuest(Sack, 'Check what is in the mysterious sack.'); // Step 3 + orreColosseumQuestLine.addQuest(checkSack); + const defeatShadowsPhenac = new CustomQuest(10, 0, 'Defeat 10 trainers who are using Shadow Pokémon in Phenac City.', () => App.game.statistics.totalShadowPokemonDefeated()); + orreColosseumQuestLine.addQuest(defeatShadowsPhenac); + const talkToEsCade1 = new TalkToNPCQuest(EsCade1, 'Talk to the Mayor of Phenac City about the criminals you have been fighting.'); + orreColosseumQuestLine.addQuest(talkToEsCade1); + const talkToRui1 = new TalkToNPCQuest(Rui1, 'Meet up with Rui again in Phenac City.'); // Step 6 + orreColosseumQuestLine.addQuest(talkToRui1); + const fightPyriteTown = new DefeatDungeonQuest(5, 0, 'Pyrite Town Battles').withDescription('Fight trainers in Pyrite Town to flush out the criminals.'); + orreColosseumQuestLine.addQuest(fightPyriteTown); + const talkToDuking1 = new TalkToNPCQuest(Duking1, 'Talk to the distraught bodybuilder Duking in Pyrite Town.'); + orreColosseumQuestLine.addQuest(talkToDuking1); + const fightPyriteColosseum = new DefeatDungeonQuest(5, 0, 'Pyrite Colosseum').withDescription('Fight trainers in Pyrite Colosseum to flush out the criminals.'); // Step 9 + orreColosseumQuestLine.addQuest(fightPyriteColosseum); + const fightPyriteBuilding = new DefeatDungeonQuest(5, 0, 'Pyrite Building').withDescription('No sign of Shadow Pokémon so far. Fight trainers at the Pyrite Building to flush out the criminals.'); + orreColosseumQuestLine.addQuest(fightPyriteBuilding); + const talkToDoken1 = new TalkToNPCQuest(Doken1, 'Interrogate Hunter Doken in the Pyrite Building to find out who has taken Plusle, and where to.'); + orreColosseumQuestLine.addQuest(talkToDoken1); + const clearPyriteCave = new DefeatDungeonQuest(1, 0, 'Pyrite Cave').withDescription('Find Miror B. and rescue Duking\'s Plusle in Pyrite Cave!') + .withOptionalArgs({ + clearedMessage: 'How, how, how dare you! Don\'t you dare think you\'ll get away with your latest outrage! One of these days, I will take great pleasure in kicking you about with my elegant dance steps! Oh, and I\'m not giving up our Shadow Pokémon plan!', + npcDisplayName: 'Miror B.', + npcImageName: 'Cipher Admin Miror B', + }); + orreColosseumQuestLine.addQuest(clearPyriteCave); + const freePlusle = new TalkToNPCQuest(FreePlusle, 'Free Duking\'s Plusle.'); //Step 13 + orreColosseumQuestLine.addQuest(freePlusle); + const talkToRui2 = new TalkToNPCQuest(Rui2, 'Discuss your next move with Rui at Pyrite Colosseum.'); + orreColosseumQuestLine.addQuest(talkToRui2); + const clearAgatePeons = new CustomQuest(3, 0, 'Defeat the Team Cipher Peons looting Agate Village.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Cipher Peon Doven')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Cipher Peon Silton')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Cipher Peon Kass')]()); + orreColosseumQuestLine.addQuest(clearAgatePeons); + const fightRelicCave = new DefeatDungeonQuest(1, 0, 'Relic Cave').withDescription('Rui is worried her grandpa is in trouble. Search for him by clearing Relic Cave.'); + orreColosseumQuestLine.addQuest(fightRelicCave); + const talkToGrandpaEagun = new TalkToNPCQuest(GrandpaEagun1, 'Find out more about Relic Cave from Grandpa Eagun.'); // Step 17 + orreColosseumQuestLine.addQuest(talkToGrandpaEagun); + const fightMtBattle = new DefeatDungeonQuest(1, 0, 'Mt. Battle').withDescription('There\'s rumors of more Team Cipher activity at Mt. Battle. Go investigate!') + .withOptionalArgs({ + clearedMessage: 'This isn\'t over yet. Stronger Pokémon are being made even now. You\'d better get serious about training your Pokémon for our next meeting. Daahahah!', + npcDisplayName: 'Dakim', + npcImageName: 'Cipher Admin Dakim', + }); + orreColosseumQuestLine.addQuest(fightMtBattle); + const talkToRui3 = new TalkToNPCQuest(Rui3, 'Discuss your next move with Rui at Mt. Battle.'); + orreColosseumQuestLine.addQuest(talkToRui3); + const fightTheUnder = new DefeatDungeonQuest(1, 0, 'The Under').withDescription('Track down the TV broadcast coming from The Under in Pyrite Town. Clear The Under.') + .withOptionalArgs({ + clearedMessage: 'Aiyeeeeh! How dare you! How could I get bested by a mere child? Remember this! I\'ll get you back for this!', + npcDisplayName: 'Venus', + npcImageName: 'Cipher Admin Venus', + }); + orreColosseumQuestLine.addQuest(fightTheUnder); + const searchTheStudio = new TalkToNPCQuest(SearchTheStudio, 'Search Venus\' Studio in the Under for clues.'); // Step 21 + orreColosseumQuestLine.addQuest(searchTheStudio); + const fightCipherLab = new DefeatDungeonQuest(1, 0, 'Cipher Lab').withDescription('Follow the secret tunnel to the Cipher Lab and clear out the enemies.') + .withOptionalArgs({ + clearedMessage: 'Humph! Your struggle to get here was all in vain! The Shadow Pokémon we produced have already been moved elsewhere. And that, of course, includes the ultimate Shadow Pokémon I created for the boss! Wahahahah!', + npcDisplayName: 'Ein', + npcImageName: 'Cipher Admin Ein', + }); + orreColosseumQuestLine.addQuest(fightCipherLab); + const fightRealgamTower = new DefeatDungeonQuest(5, 0, 'Realgam Tower Battles').withDescription('Team Cipher has taken over Realgam Tower! Fight to kick them out!'); + orreColosseumQuestLine.addQuest(fightRealgamTower); + const talkToEsCade2 = new TalkToNPCQuest(EsCade2, 'From the top of Realgam Tower, you see Mayor Es Cade. Go ask him for help.'); //Step 24 + orreColosseumQuestLine.addQuest(talkToEsCade2); + const fightRealgamColosseum = new DefeatDungeonQuest(10, 0, 'Realgam Colosseum').withDescription('Team Cipher\'s leaders have holed up in the Realgam Colosseum. Fight them to end this once and for all!'); + orreColosseumQuestLine.addQuest(fightRealgamColosseum); + const watchEviceEscape = new TalkToNPCQuest(EviceEscape, 'Just when you have him cornered, Evice calls in a helicopter. Watch him escape the Realgam Colosseum.'); // Step 26 + orreColosseumQuestLine.addQuest(watchEviceEscape); + App.game.quests.questLines().push(orreColosseumQuestLine); + } + /* Sinnoh QuestLines */ + // Started upon defeating Oreburgh City's gym. + static createGalacticSinnohQuestLine() { + const galacticSinnohQuestLine = new QuestLine('A New World', 'End Team Galactic\'s plan to destroy the world and create a new one in its place.'); + const clearValleyWindworks = new DefeatDungeonQuest(1, 0, 'Valley Windworks').withDescription('Team Galactic is stealing energy. Clear Valley Windworks.'); + galacticSinnohQuestLine.addQuest(clearValleyWindworks); + const clearTeamGalacticEternaBuilding = new DefeatDungeonQuest(1, 0, 'Team Galactic Eterna Building').withDescription('Team Galactic is kidnapping Pokémon now. Clear Team Galactic Eterna Building in Eterna City.'); + galacticSinnohQuestLine.addQuest(clearTeamGalacticEternaBuilding); + const clearPastoriaCityGym = new DefeatGymQuest(1, 0, 'Pastoria City').withDescription('All is quiet. Team Galactic isn\'t doing anything. Maybe they learned their lesson. Just keep traveling, I guess. Clear the Pastoria City Gym.'); + galacticSinnohQuestLine.addQuest(clearPastoriaCityGym); + const clearCyrus1TemporaryBattle = new DefeatTemporaryBattleQuest('Galactic Boss Cyrus', 'The boss of Team Galactic has been spotted in Celestic Town!'); + galacticSinnohQuestLine.addQuest(clearCyrus1TemporaryBattle); + const clearCanalaveCityGym = new DefeatGymQuest(1, 0, 'Canalave City').withDescription('Cyrus is gone. Nothing to do but proceed. Adventure awaits! Clear the Canalave City Gym.'); + galacticSinnohQuestLine.addQuest(clearCanalaveCityGym); + const clearLakeValor = new DefeatDungeonQuest(1, 0, 'Lake Valor').withDescription('A commotion was heard at Lake Valor. You must protect the lake\'s guardian! Clear Lake Valor.'); + galacticSinnohQuestLine.addQuest(clearLakeValor); + const clearLakeVerity = new DefeatDungeonQuest(1, 0, 'Lake Verity').withDescription('Lake Valor\'s guardian was taken. Better try again at the next lake. Clear Lake Verity.'); + galacticSinnohQuestLine.addQuest(clearLakeVerity); + const clearLakeAcuity = new DefeatDungeonQuest(1, 0, 'Lake Acuity').withDescription('Lake Verity\'s guardian was also taken. Only one lake remains. Clear Lake Acuity.'); + galacticSinnohQuestLine.addQuest(clearLakeAcuity); + const clearTeamGalacticHQ = new DefeatDungeonQuest(1, 0, 'Team Galactic HQ').withDescription('You failed to protect any of the lake guardians. They have been taken to Veilstone City. So that\'s what that strange building was... Clear Team Galactic HQ in Veilstone City.'); + galacticSinnohQuestLine.addQuest(clearTeamGalacticHQ); + const clearSpearPillar = new DefeatDungeonQuest(1, 0, 'Spear Pillar').withDescription('The lake guardians have been rescued, but Cyrus has used them to forge the Red Chain. He is taking it to the top of Mount Coronet. Follow him! Clear Spear Pillar.'); + galacticSinnohQuestLine.addQuest(clearSpearPillar); + const DistortionWorldReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + MapHelper.moveToTown('Mt. Coronet'); + Notifier.notify({ + title: galacticSinnohQuestLine.name, + message: 'You found a Master Ball!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const clearDistortionWorld = new DefeatDungeonQuest(1, 0, 'Distortion World') + .withDescription('Cyrus planned to use the Red Chain to enslave Dialga and Palkia, but he accidentally angered Giratina and has been taken to its realm. A portal has appeared on top of Mount Coronet. Use it to follow Cyrus and end his threat once and for all. Clear Distortion World.') + .withCustomReward(DistortionWorldReward); + galacticSinnohQuestLine.addQuest(clearDistortionWorld); + App.game.quests.questLines().push(galacticSinnohQuestLine); + } + // Manaphy Quest - Available upon defeating Eterna City's Gym + static createManaphyQuestLine() { + const manaphyQuestLine = new QuestLine('Recover the Precious Egg!', 'A rare egg is at the Sandgem Lab! Surely it should be easy to hatch one little egg, right?', new GymBadgeRequirement(BadgeEnums.Forest), GameConstants.BulletinBoards.Sinnoh); + const talkHastings1 = new TalkToNPCQuest(ManaphyHastings1, 'Speak to Professor Hastings in Sandgem Town.'); + manaphyQuestLine.addQuest(talkHastings1); + const investigateBoulders = new TalkToNPCQuest(ManaphyBoulders, 'Search for clues in Eterna Forest.'); + manaphyQuestLine.addQuest(investigateBoulders); + const catchPolitoedSubstitutes = new CapturePokemonTypesQuest(50, 0, PokemonType.Water).withDescription('Catch or hatch 50 Water-type Pokémon, and see if those boulders are really just boulders.'); + manaphyQuestLine.addQuest(catchPolitoedSubstitutes); + const clearManaphyGoRock1 = new DefeatTemporaryBattleQuest('Manaphy Go-Rock MGrunt 1', 'Time to give those mysterious boulders the soaking of their life! Return to the Eterna Forest, and prepare for a battle.'); + manaphyQuestLine.addQuest(clearManaphyGoRock1); + const talkGoRockCommander1 = new TalkToNPCQuest(ManaphyGoRockCommander, 'Speak to the Go-Rock Commander in the Eterna Forest.'); + manaphyQuestLine.addQuest(talkGoRockCommander1); + const clearManaphyGoRock2 = new DefeatTemporaryBattleQuest('Manaphy Go-Rock FGrunt 1', 'Chase the fleeing Go-Rock Squad through the Eterna Forest!'); + manaphyQuestLine.addQuest(clearManaphyGoRock2); + const clearManaphyGoRock3 = new CustomQuest(3, 0, 'Keep chasing the Go-Rock Squad through the Eterna Forest, but... didn\'t they already pass that tree?', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Manaphy Go-Rock MGrunt 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Manaphy Go-Rock MGrunt 3')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Manaphy Go-Rock FGrunt 2')]()); + manaphyQuestLine.addQuest(clearManaphyGoRock3); + const talkGoRockGrunt1 = new TalkToNPCQuest(ManaphyGoRock, 'The Go-Rock Squad are definitely going in circles, but they\'re too dumb to realise it. Interrogate one on their method of navigating the Eterna Forest!'); + manaphyQuestLine.addQuest(talkGoRockGrunt1); + const defeatParasect = new DefeatDungeonBossQuest('Eterna Forest', 'Parasect').withDescription('They\'re using Parasect to navigate the Eterna Forest. Clear out a Parasect and they should get trapped!'); + manaphyQuestLine.addQuest(defeatParasect); + const clearManaphyGoRock4 = new DefeatTemporaryBattleQuest('Manaphy Go-Rock MGrunt 4', 'Now you\'ve muddied the path, continue the Eterna Forest chase!'); + manaphyQuestLine.addQuest(clearManaphyGoRock4); + const clearManaphyCommander1 = new DefeatTemporaryBattleQuest('Manaphy Go-Rock Commander', 'You\'ve cornered the Go-Rock Commander outside the Old Chateau! Time to finish this.'); + manaphyQuestLine.addQuest(clearManaphyCommander1); + const talkHastings2 = new TalkToNPCQuest(ManaphyHastings2, 'Return the egg to Professor Hastings in Sandgem Town. '); + manaphyQuestLine.addQuest(talkHastings2); + const talkHastings3 = new TalkToNPCQuest(ManaphyHastings3, 'Professor Hastings has headed off to Canalave to do more research on Manaphy. Check in on him when you can!'); + manaphyQuestLine.addQuest(talkHastings3); + const happinyChase1 = new TalkToNPCQuest(HappinyWitness1, 'A little girl\'s Happiny stole the egg! Search for witnesses east of Canalave!'); + manaphyQuestLine.addQuest(happinyChase1); + const happinyChase2 = new TalkToNPCQuest(HappinyWitness2, 'The Happiny headed north out of Jubilife! Ask for witnesses in the next town.'); + manaphyQuestLine.addQuest(happinyChase2); + const happinyChase3 = new TalkToNPCQuest(HappinyWitness3, 'The Happiny went north, through the Eterna Forest. Ask if anyone\'s seen it in Eterna City.'); + manaphyQuestLine.addQuest(happinyChase3); + const happinyChase4 = new TalkToNPCQuest(HappinyWitness4, 'Search for someone who\'s seen the Happiny Egg-napper! It was last seen heading east across Route 211.'); + manaphyQuestLine.addQuest(happinyChase4); + const happinyChase5 = new TalkToNPCQuest(HappinyWitness5, 'Keep asking around and following the Happiny Egg-thief! It was heading south, towards Solaceon Town.'); + manaphyQuestLine.addQuest(happinyChase5); + const happinyChase6 = new TalkToNPCQuest(HappinyWitness6, 'Hopefully you can finally catch up to this Happiny at Hearthome City. Ask around for any witnesses.'); + manaphyQuestLine.addQuest(happinyChase6); + const happinyChase7 = new TalkToNPCQuest(HappinyWitness7, 'The Happiny went through Mt. Coronet again? This time it went west through the Southern path. Ask around for witnesses on the other side.'); + manaphyQuestLine.addQuest(happinyChase7); + const happinyChase8 = new TalkToNPCQuest(HappinyWitness8, 'The Happiny fled from Oreburgh and headed west, through the Oreburgh Gate. Search for another witness on the far side.'); + manaphyQuestLine.addQuest(happinyChase8); + const happinyChase9 = new TalkToNPCQuest(HappinyWitness9, 'Search for evidence of the Happiny\'s path after turning south from Jubilife City.'); + manaphyQuestLine.addQuest(happinyChase9); + const clearManaphyGoRock5 = new DefeatTemporaryBattleQuest('Manaphy Go-Rock Pincher', 'An ex-Go-Rock in Sandgem Town has turned to Pokémon Pinching, and wants to steal the egg first. But after all you\'ve been through to get it, he\'s in for a rude awakening'); + manaphyQuestLine.addQuest(clearManaphyGoRock5); + const happinyChase10 = new TalkToNPCQuest(HappinyBoulders, 'After leaving Sandgem, the Happiny went south-east, across the water. There\'s only one place it could be now...'); + manaphyQuestLine.addQuest(happinyChase10); + const catchBunearySubstitutes = new CapturePokemonTypesQuest(50, 0, PokemonType.Fighting).withDescription('Oh no, you\'re not gonna let more boulders stop you now. Catch or hatch 50 Fighting-types and smash right through them.'); + manaphyQuestLine.addQuest(catchBunearySubstitutes); + const clearManaphyHappiny = new DefeatTemporaryBattleQuest('Manaphy Egg Protectors', 'Time to head back to Pal Park and teach this little pink snot not to steal important eggs!'); + manaphyQuestLine.addQuest(clearManaphyHappiny); + const talkHastings4 = new TalkToNPCQuest(ManaphyHastings4, 'The egg hatched after your battle with the egg-nappers! Bring Manaphy back to Hastings in Canalave City, and close off this mission for good.'); + manaphyQuestLine.addQuest(talkHastings4); + App.game.quests.questLines().push(manaphyQuestLine); + } + // Giratina quest - Available post-E4, must have obtained Azelf, Mesprit, and Uxie + static createGiratinaQuestLine() { + const giratinaQuestLine = new QuestLine('Zero\'s Ambition', 'Help Zero find an entrance to the Distortion World.', new MultiRequirement([new ObtainedPokemonRequirement('Uxie'), new ObtainedPokemonRequirement('Mesprit'), new ObtainedPokemonRequirement('Azelf'), new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion)]), GameConstants.BulletinBoards.Sinnoh); + const talktoZero1 = new TalkToNPCQuest(FightAreaZero1, 'Talk to Zero in the Fight Area.'); + giratinaQuestLine.addQuest(talktoZero1); + const readSinnohMyth = new TalkToNPCQuest(CanalaveSinnohMyth, 'Read the recently discovered book in Canalave City.'); + giratinaQuestLine.addQuest(readSinnohMyth); + const talktoZero2 = new TalkToNPCQuest(FightAreaZero2, 'Report to Zero what was in the book.'); + giratinaQuestLine.addQuest(talktoZero2); + const talktoMesprit = new TalkToNPCQuest(VerityMesprit, 'At Lake Verity, ask Mesprit about the Distortion World.'); + giratinaQuestLine.addQuest(talktoMesprit); + const obtain10PurpleShards = new CustomQuest(10, 0, 'Obtain 10 Purple Shards.', () => player.itemList.Purple_shard()); + giratinaQuestLine.addQuest(obtain10PurpleShards); + const talktoAzelf = new TalkToNPCQuest(ValorAzelf, 'At Lake Valor, ask Azelf about the Distortion World.'); + giratinaQuestLine.addQuest(talktoAzelf); + const obtain10OchreShards = new CustomQuest(10, 0, 'Obtain 10 Ochre Shards.', () => player.itemList.Ochre_shard()); + giratinaQuestLine.addQuest(obtain10OchreShards); + const talktoUxie = new TalkToNPCQuest(AcuityUxie, 'At Lake Acuity, ask Uxie about the Distortion World.'); + giratinaQuestLine.addQuest(talktoUxie); + const obtain10CrimsonShards = new CustomQuest(10, 0, 'Obtain 10 Crimson Shards.', () => player.itemList.Crimson_shard()); + giratinaQuestLine.addQuest(obtain10CrimsonShards); + const clearSendoffSpring = new DefeatDungeonQuest(1, 0, 'Sendoff Spring').withDescription('Clear Sendoff Spring to meet the Lake Trio.'); + giratinaQuestLine.addQuest(clearSendoffSpring); + const talktoLakeTrio = new TalkToNPCQuest(SendoffSpringLakeTrio, 'Talk to the Lake Trio in Sendoff Spring.'); + giratinaQuestLine.addQuest(talktoLakeTrio); + const chargeDistortionKey = new MultipleQuestsQuest([ + new GainGemsQuest(500, 0, PokemonType.Ghost), + new CustomQuest(1, 0, 'Gain 1 Spooky Plate.', () => player.itemList.Spooky_plate()), + ], 'Charge the key to the Distortion World.'); + giratinaQuestLine.addQuest(chargeDistortionKey); + const talktoZero3 = new TalkToNPCQuest(SendoffSpringZero1, 'Talk to Zero in Sendoff Spring.'); + giratinaQuestLine.addQuest(talktoZero3); + const clearZero = new DefeatTemporaryBattleQuest('Zero', 'Defeat Zero to protect the key.'); + giratinaQuestLine.addQuest(clearZero); + const catchGiratina = new CaptureSpecificPokemonQuest('Giratina (Altered)', 1, false).withDescription('Catch the ruler of the Distortion World.'); + giratinaQuestLine.addQuest(catchGiratina); + const talktoZero4 = new TalkToNPCQuest(SendoffSpringZero2, 'Talk to Zero in Sendoff Spring.'); + giratinaQuestLine.addQuest(talktoZero4); + App.game.quests.questLines().push(giratinaQuestLine); + } + /* Unova QuestLines */ + // Started upon defeating Virbank City's gym. + static createPlasmaUnovaQuestLine() { + const plasmaUnovaQuestLine = new QuestLine('Hollow Truth and Ideals', 'Prevent Team Plasma from using these dangerous Splicers.'); + const clearVirbankGrunt = new DefeatTemporaryBattleQuest('Team Plasma Grunt 1', 'A Team Plasma Grunt in Virbank City would like to steal your Pokémon. Defeat the grunt.'); + plasmaUnovaQuestLine.addQuest(clearVirbankGrunt); + const clearCastliaSewers = new DefeatDungeonQuest(10, 0, 'Castelia Sewers').withDescription('Some Team Plasma Grunts were seen entering the Castelia Sewers. Clear Castelia Sewers.'); + plasmaUnovaQuestLine.addQuest(clearCastliaSewers); + const talktoPlasmaGrunt1 = new TalkToNPCQuest(PlasmaGrunt1, 'Investigate the Perfectly Ordinary Frigate.'); + plasmaUnovaQuestLine.addQuest(talktoPlasmaGrunt1); + const clearNimbasaGym = new DefeatGymQuest(1, 0, 'Nimbasa City').withDescription('Seems there\'s nothing suspicious going on in Castelia City. Time to continue your journey. Clear the Nimbasa Gym.'); + plasmaUnovaQuestLine.addQuest(clearNimbasaGym); + const clearNimbasaGrunts = new CustomQuest(2, 0, 'Hugh thinks some Team Plasma Grunts in Nimbasa City are stealing Pokémon. Defeat the grunts.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunt 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunt 3')]()); + plasmaUnovaQuestLine.addQuest(clearNimbasaGrunts); + const talktoPlasmaGrunt2 = new TalkToNPCQuest(PlasmaGrunt2, 'They are definitely stealing Pokémon. Investigate the Totally Unsuspicious Frigate.'); + plasmaUnovaQuestLine.addQuest(talktoPlasmaGrunt2); + const clearDriftveilGrunts = new CustomQuest(4, 0, 'Defeat the Team Plasma Grunts on the Totally Unsuspicious Frigate.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunt 4')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunt 5')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunts 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunts 2')]()); + plasmaUnovaQuestLine.addQuest(clearDriftveilGrunts); + const talktoZinzolinReward = () => { + MapHelper.moveToTown('Driftveil City'); + }; + const talktoZinzolin = new TalkToNPCQuest(DriftveilZinzolin, 'Talk to Zinzolin.').withCustomReward(talktoZinzolinReward); + plasmaUnovaQuestLine.addQuest(talktoZinzolin); + const unovaRoute13 = new DefeatPokemonsQuest(10, 0, 13, GameConstants.Region.unova).withDescription('The Frigate is gone. Nothing to do but move forward. Clear route 13.'); + plasmaUnovaQuestLine.addQuest(unovaRoute13); + const clearLacunosaGrunt = new DefeatTemporaryBattleQuest('Team Plasma Grunt 6', 'You have stumbled upon Zinzolin and a Team Plasma Grunt in Lacunosa Town. Defeat the grunt.'); + plasmaUnovaQuestLine.addQuest(clearLacunosaGrunt); + const clearZinzolin1 = new DefeatTemporaryBattleQuest('Zinzolin 1', 'Defeat Zinzolin.'); + plasmaUnovaQuestLine.addQuest(clearZinzolin1); + const clearOpelucidGym = new DefeatGymQuest(1, 0, 'Opelucid City').withDescription('Defeat the Opelucid City gym leader to obtain the DNA Splicers before Team Plasma does!'); + plasmaUnovaQuestLine.addQuest(clearOpelucidGym); + const clearOpelucidGrunts = new CustomQuest(3, 0, 'Team Plasma has stolen the DNA Splicers and is assaulting the city with an army of grunts and shadows! Defend against the Team Plasma Assault!', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunt 7')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunt 8')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Team Plasma Grunt 9')]()); + plasmaUnovaQuestLine.addQuest(clearOpelucidGrunts); + const clearZinzolin2 = new DefeatTemporaryBattleQuest('Zinzolin 2', 'Defeat Zinzolin.'); + plasmaUnovaQuestLine.addQuest(clearZinzolin2); + const clearPlasmaShadow1Reward = () => { + MapHelper.moveToTown('Opelucid City'); + }; + const clearPlasmaShadow1 = new DefeatTemporaryBattleQuest('Plasma Shadow 1', 'Defeat the Plasma Shadow.').withCustomReward(clearPlasmaShadow1Reward); + plasmaUnovaQuestLine.addQuest(clearPlasmaShadow1); + const clearPlasmaFrigateReward = () => { + MapHelper.moveToTown('Humilau City'); + }; + const clearPlasmaFrigate = new DefeatDungeonQuest(1, 0, 'Plasma Frigate') + .withDescription('Team Plasma has fled the scene with the stolen DNA Splicers. Find and clear out the Plasma Frigate.') + .withCustomReward(clearPlasmaFrigateReward); + plasmaUnovaQuestLine.addQuest(clearPlasmaFrigate); + const clearGiantChasm = new DefeatDungeonQuest(1, 0, 'Giant Chasm').withDescription('Team Plasma\'s leader Ghetsis plans on using the DNA Splicers on Kyurem in Giant Chasm. Clear the dungeon to end his evil plans.'); + plasmaUnovaQuestLine.addQuest(clearGiantChasm); + const talktoColress = new TalkToNPCQuest(GiantChasmColress, 'Talk to Colress on the Plasma Frigate.'); + plasmaUnovaQuestLine.addQuest(talktoColress); + const clearColress = new DefeatTemporaryBattleQuest('Colress 3', 'Defeat Colress.'); + plasmaUnovaQuestLine.addQuest(clearColress); + const clearPlasmaShadow2 = new CustomQuest(3, 0, 'Defeat the Plasma Shadows.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Plasma Shadow 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Plasma Shadow 3')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Plasma Shadow 4')]()); + plasmaUnovaQuestLine.addQuest(clearPlasmaShadow2); + const talktoShadowTriad = new TalkToNPCQuest(GiantChasmShadowTriad, 'Talk to the Shadow Triad.'); + plasmaUnovaQuestLine.addQuest(talktoShadowTriad); + const clearGhetsis1 = new DefeatTemporaryBattleQuest('Ghetsis 1', 'Ghetsis has done something to the legendary Dragon-type Pokémon inside Giant Chasm!'); + plasmaUnovaQuestLine.addQuest(clearGhetsis1); + const ghetsisReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + Notifier.notify({ + title: plasmaUnovaQuestLine.name, + message: 'You found a Master Ball!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + App.game.keyItems.gainKeyItem(KeyItemType.DNA_splicers, true); + $('#temporaryBattleWonModal').one('hidden.bs.modal', () => { + KeyItemController.showGainModal(KeyItemType.DNA_splicers); + }); + }; + const clearGhetsis2 = new DefeatTemporaryBattleQuest('Ghetsis 2', 'Defeat Ghetsis one final time!').withCustomReward(ghetsisReward); + plasmaUnovaQuestLine.addQuest(clearGhetsis2); + App.game.quests.questLines().push(plasmaUnovaQuestLine); + } + // Swords of Justice quest + static createSwordsQuestLine() { + const swordsofJusticeQuest = new QuestLine('Swords of Justice', 'The Swords of Justice sense something bad is about to happen, will you be able to help them out?', new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion), GameConstants.BulletinBoards.Unova); + const talkToOldManSwords = new TalkToNPCQuest(OldManSwords, 'Talk to the Old Man in Mistralton Cave for clues on where the Swords of Justice are.'); + swordsofJusticeQuest.addQuest(talkToOldManSwords); + const searchForCobalion1 = new DefeatDungeonQuest(5, 0, 'Mistralton Cave').withDescription('Search around Mistralton Cave to see if you can find Cobalion, as the Old Man said.'); + swordsofJusticeQuest.addQuest(searchForCobalion1); + const talkToCobalion1 = new TalkToNPCQuest(Cobalion1, 'It looks like you\'ve found Cobalion! Talk to them.'); + swordsofJusticeQuest.addQuest(talkToCobalion1); + const reuniteTerrakion = new DefeatDungeonQuest(5, 0, 'Victory Road Unova').withDescription('Start reuniting the Swords of Justice once again. You should probably start looking for Terrakion around Unova\'s Victory Road.'); + swordsofJusticeQuest.addQuest(reuniteTerrakion); + const talkToTerrakion1 = new TalkToNPCQuest(Terrakion1, 'You\'ve found Terrakion! Talk to them about the reunion.'); + swordsofJusticeQuest.addQuest(talkToTerrakion1); + const proveTerrakion = new DefeatTemporaryBattleQuest('Terrakion 1', 'Defeat Terrakion to prove you\'re worthy of their trust.'); + swordsofJusticeQuest.addQuest(proveTerrakion); + const talkToCobalion2 = new TalkToNPCQuest(Cobalion2, 'Talk to Cobalion at the Moor of Icirrus to learn where to find Virizion.'); + swordsofJusticeQuest.addQuest(talkToCobalion2); + const reuniteVirizion = new DefeatDungeonQuest(5, 0, 'Pinwheel Forest').withDescription('Now that you know where to find Virizion, search for them in Pinwheel Forest.'); + swordsofJusticeQuest.addQuest(reuniteVirizion); + const talkToVirizion1 = new TalkToNPCQuest(Virizion1, 'Now that you\'ve found Virizion, tell them to meet the others at the Moor of Icirrus.'); + swordsofJusticeQuest.addQuest(talkToVirizion1); + const proveVirizion = new GainGemsQuest(5000, 0, PokemonType.Grass).withDescription('Virizion is asking you to gather 5,000 Grass Gems to prove you\'re a trustworthy ally. Collect the gems and return to Pinwheel Forest to prove your worth.'); + swordsofJusticeQuest.addQuest(proveVirizion); + const talkToVirizion2 = new TalkToNPCQuest(Virizion2, 'Now that you\'ve gathered all of the Grass Gems, talk to Virizion in Pinwheel Forest once again.'); + swordsofJusticeQuest.addQuest(talkToVirizion2); + const talkToCobalion3 = new TalkToNPCQuest(Cobalion3, 'Meet up with the Swords of Justice at Moor of Icirrus and talk to Cobalion.'); + swordsofJusticeQuest.addQuest(talkToCobalion3); + const defeatSwordsofJustice = new DefeatTemporaryBattleQuest('Swords of Justice 1', 'They need you to prove you\'re strong enough to deal with the possible dangers. Defeat the Swords of Justice!'); + swordsofJusticeQuest.addQuest(defeatSwordsofJustice); + const searchForKyurem1 = new DefeatDungeonQuest(5, 0, 'Giant Chasm').withDescription('Now that you\'ve proven you\'re strong enough to help, take Cobalion\'s advice and search for Kyurem in the Giant Chasm.'); + swordsofJusticeQuest.addQuest(searchForKyurem1); + const talkToCobalion4 = new TalkToNPCQuest(Cobalion4, 'Report your findings to Cobalion at the Moor of Icirrus.'); + swordsofJusticeQuest.addQuest(talkToCobalion4); + const defeatKyurem1 = new DefeatTemporaryBattleQuest('Kyurem 1', 'Looks like Cobalion has seen Kyurem near Lacunosa Town. Go there and defeat Kyurem before it hurts any citizens.'); + swordsofJusticeQuest.addQuest(defeatKyurem1); + const talkToCobalion5 = new TalkToNPCQuest(Cobalion5, 'Seems like Kyurem has fled the town. You should talk to Cobalion while you\'re there.'); + swordsofJusticeQuest.addQuest(talkToCobalion5); + const searchForKyurem2 = new DefeatDungeonQuest(5, 0, 'Giant Chasm').withDescription('Kyurem is probably hiding in the Giant Chasm. Find its lair.'); + swordsofJusticeQuest.addQuest(searchForKyurem2); + const defeatKyurem2 = new DefeatTemporaryBattleQuest('Kyurem 2', 'You\'ve finally found Kyurem! Defeat it with the help of the Swords of Justice.'); + swordsofJusticeQuest.addQuest(defeatKyurem2); + const TalkToCobalion6 = new TalkToNPCQuest(Cobalion6, 'Kyurem has injured the Swords of Justice, go check on Cobalion.'); + swordsofJusticeQuest.addQuest(TalkToCobalion6); + const defeatKyurem3 = new DefeatTemporaryBattleQuest('Kyurem 3', 'Defeat Kyurem and stop it from causing any more harm!'); + swordsofJusticeQuest.addQuest(defeatKyurem3); + const TalkToCobalion7 = new TalkToNPCQuest(Cobalion7, 'Talk to Cobalion.'); + const TalkToTerrakion2 = new TalkToNPCQuest(Terrakion2, 'Talk to Terrakion.'); + const TalkToVirizion3 = new TalkToNPCQuest(Virizion3, 'Talk to Virizion.'); + swordsofJusticeQuest.addQuest(new MultipleQuestsQuest([TalkToCobalion7, TalkToTerrakion2, TalkToVirizion3], 'You\'ve finally defeated Kyurem, sealing it within the Giant Chasm forever. Talk to the Swords of Justice in the Giant Chasm.')); + const CatchCobalion = new CaptureSpecificPokemonQuest('Cobalion').withDescription('Capture the Leader of the Swords of Justice, Cobalion, in Mistralton Cave.'); + const CatchTerrakion = new CaptureSpecificPokemonQuest('Terrakion').withDescription('Capture the Toughest of the Swords of Justice, Terrakion, in Victory Road.'); + const CatchVirizion = new CaptureSpecificPokemonQuest('Virizion').withDescription('Capture the Cleverest of the Swords of Justice, Virizion, in Pinwheel Forest.'); + swordsofJusticeQuest.addQuest(new MultipleQuestsQuest([CatchCobalion, CatchTerrakion, CatchVirizion], 'The Swords of Justice all depart for their homes to wait for your arrival. Go catch your new friends and add them to your team!')); + App.game.quests.questLines().push(swordsofJusticeQuest); + } + // Genesect quest - Available after clearing P2 lab + static createGenesectQuestLine() { + const genesectQuestLine = new QuestLine('The Legend Awakened', 'Learn about the powerful Pokémon discovered under the P2 Laboratory.', new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('P2 Laboratory')), GameConstants.BulletinBoards.Unova); + const investigateP2 = new TalkToNPCQuest(InvestigateP2, 'Investigate the basement of the P2 Laboratory.'); + genesectQuestLine.addQuest(investigateP2); + const battleRedGenesect1 = new DefeatTemporaryBattleQuest('Red Genesect 1', 'Fight the mysterious Pokémon in the Castelia Sewers.'); + genesectQuestLine.addQuest(battleRedGenesect1); + const fightCasteliaSewers = new DefeatDungeonQuest(1, 0, 'Castelia Sewers').withDescription('Search the Castelia Sewers for clues about the Red Genesect.'); + genesectQuestLine.addQuest(fightCasteliaSewers); + const talkToAncientBugHunter = new TalkToNPCQuest(AncientBugHunter1, 'Talk to the Ancient Bug Hunter in the Castelia Sewers.'); + genesectQuestLine.addQuest(talkToAncientBugHunter); + const fightDriveGenesect = new CustomQuest(4, 0, 'Defeat the four Genesect surrounding Castelia City.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Genesect Burn')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Genesect Chill')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Genesect Douse')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Genesect Shock')]()); + genesectQuestLine.addQuest(fightDriveGenesect); + const battleRedGenesect2 = new DefeatTemporaryBattleQuest('Red Genesect 2', 'The Red Genesect is trying to escape the Castelia Sewers, stop it!'); + genesectQuestLine.addQuest(battleRedGenesect2); + const watchGenesectFight = new TalkToNPCQuest(GenesectFight, 'Witness the battle between the Red Genesect and another powerful Pokémon in Castelia City.'); + genesectQuestLine.addQuest(watchGenesectFight); + const digP2 = new MineLayersQuest(5, 0).withDescription('The Red Genesect has crashed into the P2 Lab and escaped underground. Start digging to learn more.'); + genesectQuestLine.addQuest(digP2); + const catchGenesect = new CaptureSpecificPokemonQuest('Genesect').withDescription('Catch Genesect in P2 Lab.'); + genesectQuestLine.addQuest(catchGenesect); + App.game.quests.questLines().push(genesectQuestLine); + } + // XD Questline, available after Unova E4 + static createOrreXDQuestLine() { + const orreXDQuestLine = new QuestLine('Gale of Darkness', 'Team Cipher has returned to Orre. Stop their new evil plan!', new MultiRequirement([new QuestLineCompletedRequirement('Shadows in the Desert'), new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion)]), GameConstants.BulletinBoards.Unova); + const talkToGateonSailor = new TalkToNPCQuest(GateonSailor, 'Ask around Gateon Port for clues about new Team Cipher activity.'); + orreXDQuestLine.addQuest(talkToGateonSailor); + const battleNaps = new DefeatTemporaryBattleQuest('Cipher Peon Naps', 'Fight the Cipher Peons attacking the Pokemon HQ Lab.'); + orreXDQuestLine.addQuest(battleNaps); + const clearGateonPort = new DefeatDungeonQuest(1, 0, 'Gateon Port Battles').withDescription('Clear Gateon Port to search for the Cipher Peons who kidnapped Professor Krane.') + .withOptionalArgs({ + clearedMessage: 'Cipher? Nah, I don\'t play with those punks. I\'m my own man, flying solo. No, I won\'t say where I got this Zangoose.', + npcDisplayName: 'Thug Zook', + npcImageName: 'Thug', + }); + orreXDQuestLine.addQuest(clearGateonPort); + const battleChobin1 = new DefeatTemporaryBattleQuest('Chobin 1', 'Talk to Chobin at Kaminko\'s Manor, if he\'s willing to talk.'); + orreXDQuestLine.addQuest(battleChobin1); + const talkToChobin1 = new TalkToNPCQuest(Chobin1, 'Talk to Chobin at Kaminko\'s Manor.'); + orreXDQuestLine.addQuest(talkToChobin1); + const talkToEagun2 = new TalkToNPCQuest(Eagun2, 'Talk to Grandpa Eagun at the Relic Stone.'); // Step 5 + orreXDQuestLine.addQuest(talkToEagun2); + const clearMtBattle = new DefeatDungeonQuest(1, 0, 'Mt. Battle').withDescription('Clear Mount Battle and see if anyone there has a lead on the source of Shadow Pokémon.') + .withOptionalArgs({ + clearedMessage: 'Wow, you\'ve got some strong Pokémon! You might be able to beat Team Cipher! I heard they re-activated their operations at the Cipher Lab.', + npcDisplayName: 'Vander', + npcImageName: 'Cooltrainer (male)', + }); + orreXDQuestLine.addQuest(clearMtBattle); + const defeatLovrina = new DefeatDungeonBossQuest('Cipher Lab', 'Cipher Admin Lovrina', 0).withDescription('Track down the new boss of the Cipher Lab.'); //Step 7 + orreXDQuestLine.addQuest(defeatLovrina); + const talkToLovrina = new TalkToNPCQuest(Lovrina, 'Talk to Cipher Admin Lovrina at the Cipher Lab.'); + orreXDQuestLine.addQuest(talkToLovrina); + const clearPyriteTown = new DefeatDungeonQuest(1, 0, 'Pyrite Town Battles').withDescription('Pyrite Town is in chaos! Battle your way through to get some answers.') + .withOptionalArgs({ + clearedMessage: 'This is Marcia live on the scene! Chaos in Pyrite Town as Team Cipher has returned! Rumors are swirling about an infamous dance machine making a scene!', + npcDisplayName: 'Marcia', + npcImageName: 'Reporter', + }); + orreXDQuestLine.addQuest(clearPyriteTown); + const battleMirorB1 = new DefeatTemporaryBattleQuest('Miror B. 1', 'Find and defeat Miror B. near a cool cave.'); // Step 10 + orreXDQuestLine.addQuest(battleMirorB1); + const defeatExol = new DefeatDungeonBossQuest('Pyrite Building', 'Cipher Commander Exol', 0).withDescription('Track down the new boss of the Pyrite Building.'); + orreXDQuestLine.addQuest(defeatExol); + const talkToExol = new TalkToNPCQuest(Exol, 'Talk to Cipher Commander Exol at the Pyrite Building.'); + orreXDQuestLine.addQuest(talkToExol); + const fightPhenacCity = new DefeatDungeonQuest(10, 0, 'Phenac City Battles').withDescription('Battle through the new Cipher Peons in Phenac City.'); + orreXDQuestLine.addQuest(fightPhenacCity); + const defeatSnattle = new DefeatDungeonBossQuest('Phenac Stadium', 'Cipher Admin Snattle', 0).withDescription('Track down the new boss of the Phenac Stadium.'); + orreXDQuestLine.addQuest(defeatSnattle); + const talkToSnattle = new TalkToNPCQuest(Snattle, 'Talk to Cipher Admin Snattle at the Phenac Stadium.'); //Step 15 + orreXDQuestLine.addQuest(talkToSnattle); + const talkToMayorTrest = new TalkToNPCQuest(Trest, 'Talk to Mayor Trest at the Phenac City.').withCustomReward(this.itemReward('Rare_Candy', 50, 'Mayor Trest')); + orreXDQuestLine.addQuest(talkToMayorTrest); + const talkToVerich = new TalkToNPCQuest(Verich, 'Talk to the wealthy Mr. Verich at Gateon Port to learn more about the S. S. Libra.'); + orreXDQuestLine.addQuest(talkToVerich); + const battleChobin2 = new DefeatTemporaryBattleQuest('Chobin 2', 'Talk to Chobin at Kaminko\'s Manor, if he\'s willing to talk.'); + orreXDQuestLine.addQuest(battleChobin2); + const talkToChobin2 = new TalkToNPCQuest(Chobin2, 'Talk to Chobin at Kaminko\'s Manor.'); // Step 19 + orreXDQuestLine.addQuest(talkToChobin2); + const battleSmarton = new DefeatTemporaryBattleQuest('Cipher Peon Smarton', 'Fight the Cipher Peon at the wreck of the S. S. Libra.'); // Step 20 + orreXDQuestLine.addQuest(battleSmarton); + const LuxuryReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Luxuryball, 100, false); + Notifier.notify({ + title: orreXDQuestLine.name, + message: 'You find a crate of Luxury Balls in the wreckage.', + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.Quests.quest_ready_to_complete, + }); + }; + const searchSSLibra = new TalkToNPCQuest(SearchLibra, 'Search the S. S. Libra for clues.').withCustomReward(LuxuryReward); + orreXDQuestLine.addQuest(searchSSLibra); + const battleZook = new DefeatTemporaryBattleQuest('Zook', 'Fight Zook outside of the Cipher Key Lair.'); + orreXDQuestLine.addQuest(battleZook); + const battleMirorB2 = new DefeatTemporaryBattleQuest('Miror B. 2', 'Miror B. has surfaced again! Fight him at the Outskirt Stand.'); + orreXDQuestLine.addQuest(battleMirorB2); + const fightSnagemHideout = new DefeatDungeonQuest(10, 0, 'Snagem Hideout').withDescription('Battle through the Snagem Hideout and look for clues.'); + orreXDQuestLine.addQuest(fightSnagemHideout); + const clearCipherKeyLair = new DefeatDungeonQuest(1, 0, 'Cipher Key Lair').withDescription('You found a key to the Cipher Key Lair. Find out what\'s inside!') // Step 25 + .withOptionalArgs({ + clearedMessage: 'Bah! No fair! Fine, you can take your precious Professor Krane. Get out of here!', + npcDisplayName: 'Gorigan', + npcImageName: 'Cipher Admin Gorigan', + }); + orreXDQuestLine.addQuest(clearCipherKeyLair); + const KraneReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + Notifier.notify({ + title: orreXDQuestLine.name, + message: 'Professor Krane gives you a Master Ball.', + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.Quests.quest_ready_to_complete, + }); + }; + const talkToProfKrane = new TalkToNPCQuest(ProfKrane, 'Talk to Professor Krane at the Pokémon HQ Lab.').withCustomReward(KraneReward); + orreXDQuestLine.addQuest(talkToProfKrane); + const fightCitadarkIsle = new DefeatDungeonQuest(10, 0, 'Citadark Isle').withDescription('Battle through Team Cipher on Citadark Isle'); + orreXDQuestLine.addQuest(fightCitadarkIsle); + const fightCitadarkIsleDome = new DefeatDungeonQuest(1, 0, 'Citadark Isle Dome').withDescription('Defeat Grand Master Greevil and XD001 in the Citadark Isle Dome.'); + orreXDQuestLine.addQuest(fightCitadarkIsleDome); + App.game.quests.questLines().push(orreXDQuestLine); + } + /* Kalos QuestLines */ + // Started upon defeating Professor Sycamore in Lumiose City. + static createFlareKalosQuestLine() { + const flareKalosQuestLine = new QuestLine('A Beautiful World', 'End Team Flare\'s plan to destroy the world and create a new one in its place.'); + const talkToLysandre1 = new TalkToNPCQuest(Lysandre1, 'Talk to Lysandre inside Professor Sycamore\'s lab in Lumiose City.'); + flareKalosQuestLine.addQuest(talkToLysandre1); + const talkToKalem1 = new TalkToNPCQuest(Calem1, 'Well, that was definitely a weird guy... Seems like Calem wants to meet you somewhere in Lumiose City, go talk with him.'); + flareKalosQuestLine.addQuest(talkToKalem1); + const talkToKalem2 = new TalkToNPCQuest(Calem2, 'Meet Calem in Ambrette Town.'); + flareKalosQuestLine.addQuest(talkToKalem2); + const clearGlitteringCave = new DefeatDungeonQuest(1, 0, 'Glittering Cave').withDescription('Clear Glittering Cave and find the scientist.') + .withOptionalArgs({ + clearedMessage: 'What\'s this? Well, well. What do we have here? A nosy little trainer has come poking around. Listen up! We\'re the fashionable team whose very name makes people tremble in fear: Team Flare! Team Flare\'s goal is to make it so we\'re the only ones who are happy! We don\'t care one bit about what happens to other trainers or Pokémon. Get out of here, kid. Don\'t you know not to play with fire? We\'ll obliterate you!', + npcDisplayName: 'Team Flare Grunt', + npcImageName: 'Team Flare Grunt (male)', + }); + flareKalosQuestLine.addQuest(clearGlitteringCave); + const battleTeamFlareGrunt1 = new DefeatTemporaryBattleQuest('Team Flare Grunt 1', 'It seems that Team Flare Grunt is holding the scientist captive, free him!'); + flareKalosQuestLine.addQuest(battleTeamFlareGrunt1); + // Talk to Fossil Scientist after beating Team Flare Grunt + const KalosFossilReward = () => { + const item = Rand.boolean() ? 'Sail_fossil' : 'Jaw_fossil'; + ItemList[item].gain(1); + Notifier.notify({ + title: flareKalosQuestLine.name, + message: `Fossil Scientist has given you a ${GameConstants.humanifyString(item)}!`, + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.Quests.quest_ready_to_complete, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + }; + const talkToFossilScientist = new TalkToNPCQuest(FossilScientist, 'From what you gathered, Team Flare wanted to sell fossils for money. Talk with the fossil scientist you just rescued in Glittering Cave.').withCustomReward(KalosFossilReward); + flareKalosQuestLine.addQuest(talkToFossilScientist); + const clearCyllageCityGym = new DefeatGymQuest(1, 0, 'Cyllage City') + .withDescription('With interesting thoughts about Team Flare in your head, you decide to challenge the Cyllage City Gym to become stronger.'); + flareKalosQuestLine.addQuest(clearCyllageCityGym); + const talkToTeamFlareGrunt1 = new TalkToNPCQuest(TeamFlareGrunt1, 'You can see in Geosenge Town the Team Flare Grunt you battled earlier. Approach him once more.'); + flareKalosQuestLine.addQuest(talkToTeamFlareGrunt1); + const battleTeamFlareGrunt2 = new DefeatTemporaryBattleQuest('Team Flare Grunt 2', 'Beat the Team Flare Grunt once more!'); + flareKalosQuestLine.addQuest(battleTeamFlareGrunt2); + const talkToDiantha1 = new TalkToNPCQuest(Diantha1, 'You heard rumors of Diantha being in Coumarine City. Go there to check if you can see her.'); + flareKalosQuestLine.addQuest(talkToDiantha1); + const talkToLysandre2 = new TalkToNPCQuest(Lysandre2, 'Lysandre is calling you while you are standing in Coumarine City, pick up the phone.'); + flareKalosQuestLine.addQuest(talkToLysandre2); + const clearKalosPowerPlant = new DefeatDungeonBossQuest('Kalos Power Plant', 'Team Flare Aliana') + .withDescription('Well, that was extremely awkward... But ignoring that, Lumiose City still hasn\'t fixed the power outage, go clear the Kalos Power Plant.') + .withOptionalArgs({ + clearedMessage: 'You\'re quite strong. Oh yes... very strong, indeed. I certainly didn\'t expect you to be so interesting. But it matters not, we already have enough energy to power the device. I do hope we can meet again!', + npcDisplayName: 'Team Flare Aliana', + npcImageName: 'Team Flare Aliana', + }); + flareKalosQuestLine.addQuest(clearKalosPowerPlant); + const clearLumioseCityGym = new DefeatGymQuest(1, 0, 'Lumiose City').withDescription('You\'ve helped with the power outage problem, now the gym in Lumiose City is back up and you can challenge it!'); + flareKalosQuestLine.addQuest(clearLumioseCityGym); + const talkToLysandre3 = new TalkToNPCQuest(Lysandre3, 'Professor Sycamore wants to meet you in Lumiose City. He\'s with Lysandre, go say hi.'); + flareKalosQuestLine.addQuest(talkToLysandre3); + const clearPokéBallFactory = new DefeatDungeonQuest(1, 0, 'Poké Ball Factory') + .withDescription('For someone so obsessed with beauty he seems to really care about filth... Anyway, the Poké Ball Factory sounds like a fun place, let\'s go check it out.') + .withOptionalArgs({ + clearedMessage: 'No way you beat us! Wow, we are lame. Probability is just probability after all... Absolutes do not exist. But enough already! We\'ve already stolen the Poké Balls, Great Balls, and Ultra Balls. Let\'s call it good and leave.', + npcDisplayName: 'Team Flare Bryony', + npcImageName: 'Team Flare Bryony', + }); + flareKalosQuestLine.addQuest(clearPokéBallFactory); + // Talk to Poké Ball Factory Director after talking with Team Flare Bryony + const KalosMasterBallReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + Notifier.notify({ + title: flareKalosQuestLine.name, + message: 'The Poké Ball Factory Director has given you a Master Ball!', + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.Quests.quest_ready_to_complete, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + }; + const talkToPokéBallFactoryDirector = new TalkToNPCQuest(PokéBallFactoryDirector, 'Now that Team Flare is not in the Poké Ball Factory anymore, talk with the Director that you just saved.').withCustomReward(KalosMasterBallReward); + flareKalosQuestLine.addQuest(talkToPokéBallFactoryDirector); + const talkToProfessorSycamore1 = new TalkToNPCQuest(ProfessorSycamore1, 'Professor Sycamore is waiting for you in Dendemille Town. He has some important things to say about the legendary Pokémon of Kalos.'); + flareKalosQuestLine.addQuest(talkToProfessorSycamore1); + const clearFrostCavern = new DefeatDungeonQuest(1, 0, 'Frost Cavern').withDescription('You were going to Frost Cavern for Pokémon, but what you found there is Team Flare instead! Clear it!') + .withOptionalArgs({ + clearedMessage: 'Not just strong... TOO strong! Not ordinary, indeed. Whatever, it doesn\'t matter, we already tested what we wanted to know. The Abomasnow from this cavern is a fine specimen. The more we agitate it, the stronger its Snow Warning ability becomes, making the snow fall even more furiously. Whoever has the most energy will come out on top! And it\'s Team Flare, and only Team Flare who will survive!', + npcDisplayName: 'Team Flare Mable', + npcImageName: 'Team Flare Mable', + }); + flareKalosQuestLine.addQuest(clearFrostCavern); + const clearAnistarCityGym = new DefeatGymQuest(1, 0, 'Anistar City').withDescription('So everything is over now, right? Right? Go beat Anistar City Gym!'); + flareKalosQuestLine.addQuest(clearAnistarCityGym); + const talkToKalosTVNews = new TalkToNPCQuest(KalosTVNews, 'Lysandre is giving an important speech through the TV News. Watch it in Anistar City.'); + flareKalosQuestLine.addQuest(talkToKalosTVNews); + const talkToLysandre4 = new TalkToNPCQuest(Lysandre4, 'Wow! Absolutely no one could have seen this coming! You think you might find Lysandre in Lumiose City where you first met him. Look for him!'); + flareKalosQuestLine.addQuest(talkToLysandre4); + const battleTeamFlareLysandre1 = new DefeatTemporaryBattleQuest('Team Flare Lysandre 1', 'Show Team Flare Lysandre the strength of your convictions in Lumiose City!'); + flareKalosQuestLine.addQuest(battleTeamFlareLysandre1); + const talkToAZ1 = new TalkToNPCQuest(AZ1, 'You run after Lysandre and while going through the Labs you find a jailed mysterious man in Lumiose City. It seems like he has a story to tell...'); + flareKalosQuestLine.addQuest(talkToAZ1); + const battleTeamFlareXerosic = new DefeatTemporaryBattleQuest('Team Flare Xerosic', 'Now that you learnt what the ultimate weapon is able to do, you need to stop it. Team Flare Xerosic is in the way in Lumiose City, defeat him!'); + flareKalosQuestLine.addQuest(battleTeamFlareXerosic); + const talkToBlueButton = new TalkToNPCQuest(BlueButton, 'Press the blue button!'); + const talkToRedButton = new TalkToNPCQuest(RedButton, 'Press the red button!'); + flareKalosQuestLine.addQuest(new MultipleQuestsQuest([ + talkToBlueButton, + talkToRedButton, + ], 'Xerosic offers you the possibility to stop the ultimate weapon in Lumiose City. Blue or Red Button, press one!', 0, 1)); //Step 24 + const clearTeamFlareSecretHQ1 = new DefeatDungeonQuest(1, 0, 'Team Flare Secret HQ').withDescription('The ultimate weapon was activated in Geosenge Town! Go to the Team Flare Secret HQ to put a stop to it! First step: Beating Team Flare Aliana.') + .withOptionalArgs({ + clearedMessage: 'I had fun at the Kalos Power Plant. Of course, we could have generated electricity with Team Flare\'s technology, too, you know. We just didn\'t think it justified the cost. To create a world for us and us alone, we have to play it smart, you see.', + npcDisplayName: 'Team Flare Aliana', + npcImageName: 'Team Flare Aliana', + }); + flareKalosQuestLine.addQuest(clearTeamFlareSecretHQ1); + const clearTeamFlareSecretHQ2 = new DefeatDungeonQuest(1, 0, 'Team Flare Secret HQ').withDescription('Continue traversing through the Team Flare Secret HQ! Second step: Beating Team Flare Celosia.') + .withOptionalArgs({ + clearedMessage: 'In reality, those stones that line Route 10 are the graves of Pokémon. When the ultimate weapon was used to end that horrible war over 3,000 years ago, it stole the lives of all those Pokémon. Their lives were the price of peace then. And if we want to make our own wishes come true today, we in Team Flare also have to sacrifice something precious.', + npcDisplayName: 'Team Flare Celosia', + npcImageName: 'Team Flare Celosia', + }); + flareKalosQuestLine.addQuest(clearTeamFlareSecretHQ2); + const clearTeamFlareSecretHQ3 = new DefeatDungeonQuest(1, 0, 'Team Flare Secret HQ').withDescription('You should be halfway through. Go further in the Team Flare Secret HQ! Third step: Beating Team Flare Bryony.') + .withOptionalArgs({ + clearedMessage: 'We\'ve been using the electricity we stole from the Power Plant to get everything prepared for activating the ultimate weapon. But it\'s not like that\'s all we\'ll need to use it. Are you following me? We\'ll need energy absorbed from Pokémon to power the device! Yes! It\'s the stones on Route 10 that will steal that energy for us and power the ultimate weapon.', + npcDisplayName: 'Team Flare Bryony', + npcImageName: 'Team Flare Bryony', + }); + flareKalosQuestLine.addQuest(clearTeamFlareSecretHQ3); + const clearTeamFlareSecretHQ4 = new DefeatDungeonQuest(1, 0, 'Team Flare Secret HQ').withDescription('You are getting close. Resume delving into the Team Flare Secret HQ! Fourth step: Beating Team Flare Mable.') + .withOptionalArgs({ + clearedMessage: 'The power of the Legendary Pokémon... The power to grant life to all around it... The power to steal life from all around it... It\'s a mysterious ability that even scientists like us haven\'t been able to really decode. What d\'you think will happen to the world if we fuel the ultimate weapon with something like that?', + npcDisplayName: 'Team Flare Mable', + npcImageName: 'Team Flare Mable', + }); + flareKalosQuestLine.addQuest(clearTeamFlareSecretHQ4); + const clearTeamFlareSecretHQ5 = new DefeatDungeonQuest(1, 0, 'Team Flare Secret HQ').withDescription('You are almost there! One more time traversing through the Team Flare Secret HQ and you\'ll get to the end! Fifth step: Beating Team Flare Lysandre.'); + flareKalosQuestLine.addQuest(clearTeamFlareSecretHQ5); + const talkToTeamFlareLysandre1 = new TalkToNPCQuest(TeamFlareLysandre1, 'This is it, you\'ve beaten Lysandre at the top of his game in Team Flare Secret HQ, right? He might have something else to say...'); + flareKalosQuestLine.addQuest(talkToTeamFlareLysandre1); + const battleXerneas = new DefeatTemporaryBattleQuest('Xerneas', 'Calm Xerneas down!'); + const battleYveltal = new DefeatTemporaryBattleQuest('Yveltal', 'Calm Yveltal down!'); + flareKalosQuestLine.addQuest(new MultipleQuestsQuest([ + battleXerneas, + battleYveltal, + ], 'You go to the lowest level of the Team Flare Secret HQ as Lysandre told you to. There you find Xerneas and Yveltal fighting each other! Fight them yourself and calm them down!')); + const talkToTeamFlareBossLysandre1 = new TalkToNPCQuest(TeamFlareBossLysandre1, 'Lysandre appears menacingly in front of you in Team Flare Secret HQ. He doesn\'t seem fazed about you subsiding both legendary Pokémon.'); + flareKalosQuestLine.addQuest(talkToTeamFlareBossLysandre1); + const battleTeamFlareBossLysandre1 = new DefeatTemporaryBattleQuest('Team Flare Boss Lysandre 1', 'Stop Team Flare Boss Lysandre in Team Flare Secret HQ once and for all!!'); + flareKalosQuestLine.addQuest(battleTeamFlareBossLysandre1); + const clearKalosLeague = new DefeatGymQuest(1, 0, 'Champion Diantha').withDescription('You did it! You saved Kalos! There is nothing else to do except to continue your journey to beat the Kalos Pokémon League!'); + flareKalosQuestLine.addQuest(clearKalosLeague); + // Battle AZ and finish the quest + const battleAZ1 = new DefeatTemporaryBattleQuest('Storyline AZ', 'What an amazing trainer! You became Kalos Champion! There is a parade in your honor in Lumiose City. But wait, AZ is there asking you for a battle. Show him what being a Pokémon Trainer is like!').withCustomReward(this.itemReward('Key_stone', 1)); + flareKalosQuestLine.addQuest(battleAZ1); + App.game.quests.questLines().push(flareKalosQuestLine); + } + // Delta Episode - Available upon defeating Shalour City's gym + static createDeltaEpisodeQuestLine() { + const deltaEpisodeQuestLine = new QuestLine('The Delta Episode', 'A catastrophe is on the horizon! Work with the people of Hoenn to stop it.', new GymBadgeRequirement(BadgeEnums.Rumble), GameConstants.BulletinBoards.Kalos); + const talkToCozmo1 = new TalkToNPCQuest(Cozmo1, 'Talk to Dr. Cozmo in Fallarbor Town.'); + deltaEpisodeQuestLine.addQuest(talkToCozmo1); + const talkToZinnia1 = new TalkToNPCQuest(Zinnia1, 'Talk to the mysterious figure at the Sky Pillar.'); + deltaEpisodeQuestLine.addQuest(talkToZinnia1); + const talkToDeltaMay1 = new TalkToNPCQuest(DeltaMay1, 'Travel with Zinnia to Littleroot Town and talk to May.'); + deltaEpisodeQuestLine.addQuest(talkToDeltaMay1); + const talkToNewsBirch = new TalkToNPCQuest(NewsBirch, 'Discuss the news with Professor Birch in Littleroot Town.'); + deltaEpisodeQuestLine.addQuest(talkToNewsBirch); + const talkToDeltaMay2 = new TalkToNPCQuest(DeltaMay2, 'Find out why May is so mad in Littleroot Town.'); + deltaEpisodeQuestLine.addQuest(talkToDeltaMay2); + const fightCourtney1 = new DefeatTemporaryBattleQuest('Courtney 1', 'Defeat Courtney'); + const fightMatt1 = new DefeatTemporaryBattleQuest('Matt 1', 'Defeat Matt'); + deltaEpisodeQuestLine.addQuest(new MultipleQuestsQuest([ + fightCourtney1, + fightMatt1, + ], 'Follow Zinnia to Petalburg City.')); + const talkToDeltaSteven1 = new TalkToNPCQuest(DeltaSteven1, 'Answer your ringing Holo Caster.'); + const talkToDeltaWally1 = new TalkToNPCQuest(DeltaWally1, 'Talk to Wally.'); + deltaEpisodeQuestLine.addQuest(new MultipleQuestsQuest([ + talkToDeltaSteven1, + talkToDeltaWally1, + ], 'Talk to Wally and answer your ringing Holo Caster in Petalburg City.')); + const clearGranite = new DefeatDungeonQuest(10, 0, 'Granite Cave').withDescription('Clear Granite Cave 10 times.'); + const findStars = new CustomQuest(1, 0, 'Find a Star Piece.', () => player.itemList.Star_piece()); + deltaEpisodeQuestLine.addQuest(new MultipleQuestsQuest([ + clearGranite, + findStars, + ], 'Search Granite Cave and look for Star Pieces.')); + const talkToZinnia2 = new TalkToNPCQuest(Zinnia2, 'Talk to Zinnia in Granite Cave.'); + deltaEpisodeQuestLine.addQuest(talkToZinnia2); + const fightZinnia1 = new DefeatTemporaryBattleQuest('Zinnia 1', 'Defeat Zinnia in Granite Cave').withCustomReward(() => ItemList.Meteorite_Shard_Delta.gain(1)); + deltaEpisodeQuestLine.addQuest(fightZinnia1); + const talkToZinnia3 = new TalkToNPCQuest(Zinnia3, 'Talk to Zinnia in Granite Cave.'); + deltaEpisodeQuestLine.addQuest(talkToZinnia3); + const talkToCozmo2 = new TalkToNPCQuest(Cozmo2, 'Talk to Dr. Cozmo at the Mossdeep Space Center.'); + deltaEpisodeQuestLine.addQuest(talkToCozmo2); + const talkToZinnia4 = new TalkToNPCQuest(Zinnia4, 'Talk to Zinnia at the Mossdeep Space Center.'); + deltaEpisodeQuestLine.addQuest(talkToZinnia4); + const talkToCozmo3 = new TalkToNPCQuest(Cozmo3, 'Talk to Dr. Cozmo at the Mossdeep Space Center.'); + deltaEpisodeQuestLine.addQuest(talkToCozmo3); + const clearMeteor = new DefeatDungeonQuest(10, 0, 'Meteor Falls').withDescription('Clear Meteor Falls 10 times to search for the Meteor Shard.'); + deltaEpisodeQuestLine.addQuest(clearMeteor); + const talkToDracElder1 = new TalkToNPCQuest(DraconidElder1, 'Talk to the Draconid Elder in Meteor Falls.'); + deltaEpisodeQuestLine.addQuest(talkToDracElder1); + const fightDracElder = new DefeatTemporaryBattleQuest('Draconid Elder', 'Defeat the Draconid Elder in Meteor Falls.'); + deltaEpisodeQuestLine.addQuest(fightDracElder); + const talkToDracElder2 = new TalkToNPCQuest(DraconidElder2, 'Talk to the Draconid Elder in Meteor Falls.').withCustomReward(() => ItemList.Meteorite_Shard_Delta.gain(1)); + deltaEpisodeQuestLine.addQuest(talkToDracElder2); + const fightAquaGrunts = new DefeatTemporaryBattleQuest('Aqua Grunt', 'Defeat the Aqua Grunt.'); + const fightMagmaGrunts = new DefeatTemporaryBattleQuest('Magma Grunt', 'Defeat the Magma Grunt.'); + deltaEpisodeQuestLine.addQuest(new MultipleQuestsQuest([ + fightAquaGrunts, + fightMagmaGrunts, + ], 'Defeat the Team Aqua and Magma Grunts attacking the Mossdeep Space Center.')); + const fightCourtney2 = new DefeatTemporaryBattleQuest('Courtney 2', 'Defeat Courtney'); + const fightMatt2 = new DefeatTemporaryBattleQuest('Matt 2', 'Defeat Matt'); + deltaEpisodeQuestLine.addQuest(new MultipleQuestsQuest([ + fightCourtney2, + fightMatt2, + ], 'Defeat the admins trying to take over the Mossdeep Space Center.')); + const talkToZinnia5 = new TalkToNPCQuest(Zinnia5, 'Talk to Zinnia at the Mossdeep Space Center.'); + deltaEpisodeQuestLine.addQuest(talkToZinnia5); + const clearAquaHideoutDelta = new DefeatDungeonQuest(1, 0, 'Aqua Hideout').withDescription('Follow Zinnia to the Aqua hideout and search for her.'); + deltaEpisodeQuestLine.addQuest(clearAquaHideoutDelta); + const talkToArchie = new TalkToNPCQuest(Archie, 'Talk to Archie in the Team Aqua Hideout.'); + deltaEpisodeQuestLine.addQuest(talkToArchie); + const clearMagmaHideoutDelta = new DefeatDungeonQuest(1, 0, 'Magma Hideout').withDescription('Follow Zinnia to the Magma Hideout and search for her.'); + deltaEpisodeQuestLine.addQuest(clearMagmaHideoutDelta); + const talkToMaxie = new TalkToNPCQuest(Maxie, 'Talk to Maxie in the Team Magma Hideout.'); + deltaEpisodeQuestLine.addQuest(talkToMaxie); + const talkToWallace3 = new TalkToNPCQuest(Wallace3, 'Talk to Wallace in Sootopolis City.'); + deltaEpisodeQuestLine.addQuest(talkToWallace3); + const fightDeltaWallace = new DefeatTemporaryBattleQuest('Delta Wallace', 'Defeat Wallace in Sootopolis City.'); + deltaEpisodeQuestLine.addQuest(fightDeltaWallace); + const fightZinnia2 = new DefeatTemporaryBattleQuest('Zinnia 2', 'Defeat Zinnia at the Sky Pillar.'); + deltaEpisodeQuestLine.addQuest(fightZinnia2); + const catchDeltaRayquaza = new CaptureSpecificPokemonQuest('Rayquaza', 1, true); + deltaEpisodeQuestLine.addQuest(catchDeltaRayquaza); + const MeteoriteReward = () => { + player.gainMegaStone(GameConstants.MegaStoneType.Meteorite); + Notifier.notify({ + title: deltaEpisodeQuestLine.name, + message: 'Your Meteorite Shards combine into a Meteorite!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const talkToZinnia6 = new TalkToNPCQuest(Zinnia6, 'Talk to Zinnia at the Sky Pillar.').withCustomReward(MeteoriteReward); + deltaEpisodeQuestLine.addQuest(talkToZinnia6); + const catchMegaRayquaza = new CaptureSpecificPokemonQuest('Mega Rayquaza').withDescription('Mega Evolve Rayquaza.'); + deltaEpisodeQuestLine.addQuest(catchMegaRayquaza); + const talkToZinnia7 = new TalkToNPCQuest(Zinnia7, 'Talk to Zinnia at the Sky Pillar.'); + deltaEpisodeQuestLine.addQuest(talkToZinnia7); + const fightDeoxys = new DefeatTemporaryBattleQuest('Deoxys', 'Fly Mega Rayquaza into space to destroy the Meteor.'); + deltaEpisodeQuestLine.addQuest(fightDeoxys); + const talkToCozmo4 = new TalkToNPCQuest(Cozmo4, 'Talk to Dr. Cozmo at the Mossdeep Space Center.'); + deltaEpisodeQuestLine.addQuest(talkToCozmo4); + App.game.quests.questLines().push(deltaEpisodeQuestLine); + } + // Available after Delta step 28, must have obtained Groudon and Kyogre + static createPrimalReversionQuestLine() { + const primalReversionQuestLine = new QuestLine('Primal Reversion', 'Teams Aqua and Magma have been trying to unlock the Primal power of Groudon and Kyogre.', new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 28), new ObtainedPokemonRequirement('Groudon'), new ObtainedPokemonRequirement('Kyogre')]), GameConstants.BulletinBoards.Hoenn); + const talkToMrStone1 = new TalkToNPCQuest(MrStone1, 'Talk to Mr. Stone in Slateport City.'); + primalReversionQuestLine.addQuest(talkToMrStone1); + const clearGranite2 = new DefeatDungeonQuest(10, 0, 'Granite Cave').withDescription('Clear Granite Cave 10 times to search for the Primal Reversion Mural.'); + primalReversionQuestLine.addQuest(clearGranite2); + const viewPrimalMural1 = new TalkToNPCQuest(PrimalMural1, 'Examine the first Primal Mural in Granite Cave.'); + const viewPrimalMural2 = new TalkToNPCQuest(PrimalMural2, 'Examine the second Primal Mural in Granite Cave.'); + primalReversionQuestLine.addQuest(new MultipleQuestsQuest([ + viewPrimalMural1, + viewPrimalMural2, + ], 'Examine the Primal Murals.')); + const talkToSteven = new TalkToNPCQuest(PrimalSteven, 'Talk to Steven in the Granite Cave to learn more about the Primal Murals.'); + primalReversionQuestLine.addQuest(talkToSteven); + const talkToStern1 = new TalkToNPCQuest(Stern1, 'Find Captain Stern at Sea Mauville during Thunderstorm Weather.'); + primalReversionQuestLine.addQuest(talkToStern1); + const fightStern = new DefeatTemporaryBattleQuest('Captain Stern', 'Fight Captain Stern at Sea Mauville.'); + primalReversionQuestLine.addQuest(fightStern); + const talkToStern2 = new TalkToNPCQuest(Stern2, 'Talk to Captain Stern at Sea Mauville about the mysteries of the sea.'); + primalReversionQuestLine.addQuest(talkToStern2); + const findMetalCoats = new CustomQuest(10, 0, 'Find 10 Metal Coats.', () => player.itemList.Metal_coat()); + const findMysticWater = new CustomQuest(1, 0, 'Find one Mystic Water.', () => player.itemList.Mystic_Water()); + const findHeatRocks = new CustomQuest(3, 0, 'Find 3 Heat Rocks.', () => player.itemList.Heat_rock()); + primalReversionQuestLine.addQuest(new MultipleQuestsQuest([ + findMetalCoats, + findMysticWater, + findHeatRocks, + ], 'Obtain the items Captain Stern needs to upgrade the Submarine.')); + const talkToStern3 = new TalkToNPCQuest(Stern3, 'Talk to Captain Stern at Sea Mauville and upgrade the submarine.'); + primalReversionQuestLine.addQuest(talkToStern3); + const clearSeafloorCavern2 = new DefeatDungeonQuest(10, 0, 'Seafloor Cavern').withDescription('Clear the Seafloor Cavern 10 times to learn more about the mysterious occurrences.'); + primalReversionQuestLine.addQuest(clearSeafloorCavern2); + const fightArchiePrimal = new DefeatTemporaryBattleQuest('Archie Primal', 'Defeat Archie'); + const fightMaxiePrimal = new DefeatTemporaryBattleQuest('Maxie Primal', 'Defeat Maxie'); + primalReversionQuestLine.addQuest(new MultipleQuestsQuest([ + fightArchiePrimal, + fightMaxiePrimal, + ], 'Defeat the Team Aqua and Team Magma leaders in the Seafloor Cavern.')); + const clearWeatherInstitute2 = new DefeatDungeonQuest(10, 0, 'Weather Institute').withDescription('Clear the Weather Institute 10 times to search for clues about Archie and Maxie\'s plans.'); + primalReversionQuestLine.addQuest(clearWeatherInstitute2); + const weatherScan = new TalkToNPCQuest(WeatherScan, 'Scan the area for unusual weather at the Weather Institute.'); + primalReversionQuestLine.addQuest(weatherScan); + const clearMtPyre = new DefeatDungeonQuest(1, 0, 'Mt. Pyre').withDescription('Investigate Mt. Pyre for the source of the disturbances.'); + primalReversionQuestLine.addQuest(clearMtPyre); + const talkToPrimalArchie = new TalkToNPCQuest(PrimalArchie, 'Talk to Archie.'); + const talkToPrimalMaxie = new TalkToNPCQuest(PrimalMaxie, 'Talk to Maxie.'); + primalReversionQuestLine.addQuest(new MultipleQuestsQuest([ + talkToPrimalArchie, + talkToPrimalMaxie, + ], 'Find out what the Team Leaders are up to at Mt. Pyre.')); + const fightPrimalGroudon = new DefeatTemporaryBattleQuest('Primal Groudon', 'Defeat Primal Groudon in Harsh Sunlight Weather.'); + const fightPrimalKyogre = new DefeatTemporaryBattleQuest('Primal Kyogre', 'Defeat Primal Kyogre in Raining Weather.'); + primalReversionQuestLine.addQuest(new MultipleQuestsQuest([ + fightPrimalGroudon, + fightPrimalKyogre, + ], 'Defeat the Primal Reversions. Predict their rampage by monitoring the weather at the Weather Institute.')); + const talkToMrStone2 = new TalkToNPCQuest(MrStone2, 'Talk to Mr. Stone in Slateport City.'); + primalReversionQuestLine.addQuest(talkToMrStone2); + App.game.quests.questLines().push(primalReversionQuestLine); + } + // Available after defeating Santalune City's Gym + static createDetectivePikachuQuestLine() { + const detectivePikachuQuestLine = new QuestLine('Detective Pikachu', 'Detective Pikachu\'s partner has gone missing, and he needs your help!', new MultiRequirement([new ObtainedPokemonRequirement('Detective Pikachu'), new GymBadgeRequirement(BadgeEnums.Bug)]), GameConstants.BulletinBoards.Kalos); + const searchForClues1 = new TalkToNPCQuest(searchForClues, 'Search Goldenrod City for clues.'); + detectivePikachuQuestLine.addQuest(searchForClues1); + const aipomAlley = new DefeatTemporaryBattleQuest('Aipom Alley', 'Defeat the Aipoms').withCustomReward(() => ItemList.Mysterious_Vial_Detective_Pikachu.gain(1)); + detectivePikachuQuestLine.addQuest(aipomAlley); + const searchForClues2 = new DefeatDungeonQuest(1, 0, 'Radio Tower').withDescription('The Aipoms dropped some sort of vial while they were running away. It looks like they were headed towards the Radio Tower. Find it!'); + detectivePikachuQuestLine.addQuest(searchForClues2); + const searchForClues3 = new TalkToNPCQuest(Informant1, 'Detective Pikachu has an informant who knows more about the mysterious vial. Meet with him in Saffron City.'); + detectivePikachuQuestLine.addQuest(searchForClues3); + const mimeInterview = new DefeatTemporaryBattleQuest('Mime Interview', 'The informant is proving hard to convince. Time to get physical!'); + detectivePikachuQuestLine.addQuest(mimeInterview); + const searchForClues4 = new TalkToNPCQuest(Informant2, 'The informant is finally willing to "talk", find out what he has to say.'); + detectivePikachuQuestLine.addQuest(searchForClues4); + const undergroundFightingRing = new DefeatTemporaryBattleQuest('Underground Fighting Ring', 'Infiltrate the underground fighting ring.'); + detectivePikachuQuestLine.addQuest(undergroundFightingRing); + const searchForClues5 = new TalkToNPCQuest(HowardClifford1, 'Go to Clifford Industries in Goldenrod City to demand some answers.'); + detectivePikachuQuestLine.addQuest(searchForClues5); + const searchForClues6 = new TalkToNPCQuest(LucyStevens1, 'Meet up with investigative journalist Lucy Stevens in Hearthome City'); + detectivePikachuQuestLine.addQuest(searchForClues6); + const searchForClues7 = new DefeatDungeonQuest(1, 0, 'P2 Laboratory').withDescription('Search the research laboratory for clues.'); + detectivePikachuQuestLine.addQuest(searchForClues7); + const labAmbush = new DefeatTemporaryBattleQuest('Lab Ambush', 'It was an ambush! You have been followed to Nuvema Town, defeat the mysterious attackers and escape!'); + detectivePikachuQuestLine.addQuest(labAmbush); + const searchForClues8 = new TalkToNPCQuest(Mewtwo1, 'Detective Pikachu is injured. He asks you to get help from his friend near Cerulean Cave'); + detectivePikachuQuestLine.addQuest(searchForClues8); + const searchForClues9 = new TalkToNPCQuest(HowardClifford2, 'Confront Howard Clifford in Goldenrod City about his involvement with the R vials.'); + detectivePikachuQuestLine.addQuest(searchForClues9); + const imposterAttack = new DefeatTemporaryBattleQuest('Imposter', 'Defeat Howard\'s bodyguard and escape.'); + detectivePikachuQuestLine.addQuest(imposterAttack); + const howardConfront = new TalkToNPCQuest(HowardClifford3, 'Give Howard Clifford one last chance to surrender!'); + detectivePikachuQuestLine.addQuest(howardConfront); + const possessedFight = new DefeatTemporaryBattleQuest('Possessed Mewtwo', 'Defeat Mewtwo to free it from Howard\'s control!'); + detectivePikachuQuestLine.addQuest(possessedFight); + const searchForClues10 = new TalkToNPCQuest(Mewtwo2, 'Talk to Mewtwo near Cerulean Cave about Detective Pikachu\'s partner.'); + detectivePikachuQuestLine.addQuest(searchForClues10); + const DetectiveRaichuReward = () => { + App.game.party.gainPokemonByName('Detective Raichu'); + Notifier.notify({ + title: detectivePikachuQuestLine.name, + message: 'Detective Pikachu\'s partner has been nursed back to health!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const searchForClues11 = new TalkToNPCQuest(DetectiveRaichu, 'Talk to Detective Raichu').withCustomReward(DetectiveRaichuReward); + detectivePikachuQuestLine.addQuest(searchForClues11); + App.game.quests.questLines().push(detectivePikachuQuestLine); + } + // Available after defeating Snowbelle City's Gym + static createVivillonQuestLine() { + const vivillonQuestLine = new QuestLine('The Great Vivillon Hunt!', 'Discover the beauty of Vivillon.', new GymBadgeRequirement(BadgeEnums.Iceberg), GameConstants.BulletinBoards.Kalos); + const createVivillonQuest = (type, vivillon, hint) => { + // Capture 100 Water type Pokemon + const catchType = new CapturePokemonTypesQuest(100, 0, type).withDescription(`Capture or hatch 100 ${PokemonType[type]}-type Pokémon.`); + vivillonQuestLine.addQuest(catchType); + // Capture Vivillon in a dungeon + const vivillonAdd = () => { + Notifier.notify({ + title: vivillonQuestLine.name, + message: `A Vivillon is hiding somewhere.\n${hint}`, + type: NotificationConstants.NotificationOption.info, + }); + }; + const vivillonRemove = () => { + Notifier.notify({ + title: vivillonQuestLine.name, + message: `You caught the rare ${vivillon}!`, + type: NotificationConstants.NotificationOption.success, + }); + }; + const catchVivillon = new CaptureSpecificPokemonQuest(vivillon).withCustomReward(vivillonRemove).withOnLoad(vivillonAdd).withDescription(`Find and capture the rare Vivillon!\nHint: ${hint}`); + vivillonQuestLine.addQuest(catchVivillon); + }; + createVivillonQuest(PokemonType.Water, 'Vivillon (Marine)', 'It has been spotted at some Lakes.'); + createVivillonQuest(PokemonType.Psychic, 'Vivillon (Modern)', 'It\'s surrounded by strong Pokémon.'); + createVivillonQuest(PokemonType.Poison, 'Vivillon (Jungle)', 'It has been spotted in a swamp.'); + createVivillonQuest(PokemonType.Dark, 'Vivillon (Monsoon)', 'It\'s hiding at a dark place.'); + createVivillonQuest(PokemonType.Steel, 'Vivillon (Tundra)', 'It flew into a factory.'); + createVivillonQuest(PokemonType.Fire, 'Vivillon (Sun)', 'It seems to like hot places.'); + createVivillonQuest(PokemonType.Fighting, 'Vivillon (Archipelago)', 'It\'s sitting on a swaying pillar.'); + createVivillonQuest(PokemonType.Ghost, 'Vivillon (Elegant)', 'It\'s visiting an abandoned and spooky place.'); + createVivillonQuest(PokemonType.Fairy, 'Vivillon (Ocean)', 'It\'s flying around an overgrown place full of dreams.'); + createVivillonQuest(PokemonType.Electric, 'Vivillon (Continental)', 'It\'s currently in a City full of Electric-type Pokémon.'); + createVivillonQuest(PokemonType.Bug, 'Vivillon (River)', 'It hides in a dark Forest.'); + createVivillonQuest(PokemonType.Flying, 'Vivillon (Polar)', 'It\'s high up in the sky.'); + createVivillonQuest(PokemonType.Ground, 'Vivillon (Sandstorm)', 'It got lost in the desert sand.'); + createVivillonQuest(PokemonType.Grass, 'Vivillon (Garden)', 'It only shows up amongst the most beautiful flowers.'); + createVivillonQuest(PokemonType.Rock, 'Vivillon (High Plains)', 'It has been spotted dancing in the moonlight.'); + createVivillonQuest(PokemonType.Dragon, 'Vivillon (Savanna)', 'It\'s surrounded by dragons.'); + createVivillonQuest(PokemonType.Ice, 'Vivillon (Icy Snow)', 'It can be found at a very cold place.'); + // Capture 200 Normal type Pokemon + const catchNormal = new CapturePokemonTypesQuest(200, 0, PokemonType.Normal).withDescription('Capture or hatch 200 Normal-type Pokémon.'); + vivillonQuestLine.addQuest(catchNormal); + // Capture Vivillon (Pokéball) + const viviBallAdd = () => { + Notifier.notify({ + title: vivillonQuestLine.name, + message: 'A Vivillon is hiding somewhere.\nOnly the strongest Challengers can reach it.', + type: NotificationConstants.NotificationOption.success, + }); + }; + const viviBalldone = () => { + Notifier.notify({ + title: vivillonQuestLine.name, + message: 'You caught the last rare Vivillon (Poké Ball).\nCongratulations!', + type: NotificationConstants.NotificationOption.success, + }); + }; + const catchBall = new CaptureSpecificPokemonQuest('Vivillon (Poké Ball)').withDescription('Find and capture the rare Vivillon!\nHint: Only the strongest Challengers can reach it.').withCustomReward(viviBalldone).withOnLoad(viviBallAdd); + vivillonQuestLine.addQuest(catchBall); + // Add quest to quest line + App.game.quests.questLines().push(vivillonQuestLine); + } + // Available post-E4, must have captured Doublade + static createPrincessDiancieQuestLine() { + const princessDiancieQuestLine = new QuestLine('Princess Diancie', 'Princess Diancie has been spotted in Kalos! She\'s searching for something.', new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Elite_Malva), new GymBadgeRequirement(BadgeEnums.Elite_Siebold), new GymBadgeRequirement(BadgeEnums.Elite_Wikstrom), new GymBadgeRequirement(BadgeEnums.Elite_Drasna)]), GameConstants.BulletinBoards.Kalos); + const catchFairy = new CapturePokemonTypesQuest(100, 0, PokemonType.Fairy).withDescription('Capture or hatch 100 Fairy-type Pokémon to follow Diancie\'s Fairy Aura.'); + princessDiancieQuestLine.addQuest(catchFairy); + const fightRiot = new DefeatTemporaryBattleQuest('Riot', 'Defend Diancie from the attacking ninja in Shalour City.'); + princessDiancieQuestLine.addQuest(fightRiot); + const fightMerilyn = new DefeatTemporaryBattleQuest('Merilyn', 'Diancie has escaped to the shopping mall in Lumiose City, but is under attack again!'); + princessDiancieQuestLine.addQuest(fightMerilyn); + const diamondDomain = new MineLayersQuest(5, 0).withDescription('Diancie has fled to the Diamond Domain. Dig in the Underground to find it.'); + princessDiancieQuestLine.addQuest(diamondDomain); + const fightSteels = new DefeatTemporaryBattleQuest('Millis and Argus Steel', 'Millis and Argus Steel let you do the hard work while they set up an ambush in Shalour City.'); + princessDiancieQuestLine.addQuest(fightSteels); + const bladeForme = new TalkToNPCQuest(ExamineAegislash, 'Millis and Argus Steel fled but their Aegislash stayed behind. Look for it in Shalour City and find out what it wants!'); + princessDiancieQuestLine.addQuest(bladeForme); + const heartDiamond = new GainGemsQuest(1000, 0, PokemonType.Fairy).withCustomReward(() => ItemList.Heart_Diamond_Diancie.gain(1)).withDescription('Diancie needs help building a Heart Diamond to stabilize the Diamond Domain. Gather some Fairy Gems for her.'); + princessDiancieQuestLine.addQuest(heartDiamond); + const thanksDiancie = new TalkToNPCQuest(ThanksDiancie, 'Talk to Princess Diancie in Shalour City.'); + princessDiancieQuestLine.addQuest(thanksDiancie); + const DiancieCatch = new CaptureSpecificPokemonQuest('Diancie').withDescription('Capture Diancie in Reflection Cave.'); + princessDiancieQuestLine.addQuest(DiancieCatch); + const fightYveltal = new DefeatTemporaryBattleQuest('Rampaging Yveltal', 'A rampaging Yveltal is threatening the Diamond Domain! Help Diancie defeat it!'); + princessDiancieQuestLine.addQuest(fightYveltal); + App.game.quests.questLines().push(princessDiancieQuestLine); + } + static createClashOfAgesQuestLine() { + const clashOfAgesQuestLine = new QuestLine('Clash of Ages', 'Hoopa is up to something mischievous...', new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion), GameConstants.BulletinBoards.Kalos); + const catchHoopa = new CaptureSpecificPokemonQuest('Hoopa').withDescription('Catch Hoopa to learn more.'); + clashOfAgesQuestLine.addQuest(catchHoopa); + const talkToBaraz1 = new TalkToNPCQuest(Baraz1, 'Talk to Baraz in Kiloude City.'); + clashOfAgesQuestLine.addQuest(talkToBaraz1); + const hoopaBeatPsychic = new CustomQuest(100, 0, 'Defeat 100 Psychic-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Psychic)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + clashOfAgesQuestLine.addQuest(hoopaBeatPsychic); + const talkToBaraz2 = new TalkToNPCQuest(Baraz2, 'That didn\'t work. Talk to Baraz in Kiloude City.'); + clashOfAgesQuestLine.addQuest(talkToBaraz2); + const hoopaCatchPsychic = new CapturePokemonTypesQuest(100, 0, PokemonType.Psychic); + clashOfAgesQuestLine.addQuest(hoopaCatchPsychic); + const talkToBaraz3 = new TalkToNPCQuest(Baraz3, 'That didn\'t work either. Talk to Baraz in Kiloude City.'); + clashOfAgesQuestLine.addQuest(talkToBaraz3); + const hoopaID = PokemonHelper.getPokemonByName('Hoopa').id; + const catch100Hoopa = new CustomQuest(100, 0, 'Catch 100 Hoopa.', () => 100 * (App.game.statistics.pokemonCaptured[hoopaID]() - App.game.statistics.pokemonHatched[hoopaID]())); + clashOfAgesQuestLine.addQuest(catch100Hoopa); + const talkToBaraz4 = new TalkToNPCQuest(Baraz4, 'This is ridiculous. Talk to Baraz in Kiloude City.').withCustomReward(() => ItemList.Prison_Bottle.gain(1)); + clashOfAgesQuestLine.addQuest(talkToBaraz4); + const clearHoopa1 = new DefeatTemporaryBattleQuest('Hoopa 1', 'Defeat the Unbound Hoopa and its summoned defenders near Kiloude City.'); + clashOfAgesQuestLine.addQuest(clearHoopa1); + const clearHoopa2 = new DefeatTemporaryBattleQuest('Hoopa 2', 'Defeat the Unbound Hoopa and its summoned defenders near Shalour City.'); + clashOfAgesQuestLine.addQuest(clearHoopa2); + const clearHoopa3 = new DefeatTemporaryBattleQuest('Hoopa 3', 'Defeat the Unbound Hoopa and its summoned defenders near Lumiose City.'); + clashOfAgesQuestLine.addQuest(clearHoopa3); + const clearHoopa4 = new DefeatTemporaryBattleQuest('Hoopa 4', 'Defeat the Unbound Hoopa and its summoned defenders near Anistar City.'); + clashOfAgesQuestLine.addQuest(clearHoopa4); + const clearHoopa5 = new DefeatTemporaryBattleQuest('Hoopa 5', 'Defeat the Unbound Hoopa and its summoned defenders near Laverre City.'); + clashOfAgesQuestLine.addQuest(clearHoopa5); + const clearHoopa6 = new DefeatTemporaryBattleQuest('Hoopa 6', 'Defeat the Unbound Hoopa near Kiloude City, this time for real.'); + clashOfAgesQuestLine.addQuest(clearHoopa6); + App.game.quests.questLines().push(clashOfAgesQuestLine); + } + static createUnrivaledPowerQuestLine() { + const unrivaledPowerQuestLine = new QuestLine('An Unrivaled Power', 'It has been said that Mewtwo can Mega Evolve. Search for clues on how to find its Mega Stones, so you can control this unrivaled power.', new MultiRequirement([new ObtainedPokemonRequirement('Mewtwo'), new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion)]), GameConstants.BulletinBoards.Kalos); + const clearUnrivaledRed = new DefeatTemporaryBattleQuest('Unrivaled Red', 'Red might know something. Fight him at Indigo Plateau Kanto then ask him what he knows.'); + unrivaledPowerQuestLine.addQuest(clearUnrivaledRed); + const defeatUnrivaledPsychic = new CustomQuest(1500, 0, 'Defeat 1500 Psychic-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Psychic)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + const catchUnrivaledPsychic = new CapturePokemonTypesQuest(600, 0, PokemonType.Psychic); + const defeatUnrivaledFighting = new CustomQuest(750, 0, 'Defeat 750 Fighting-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Fighting)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + const catchUnrivaledFighting = new CapturePokemonTypesQuest(300, 0, PokemonType.Fighting); + unrivaledPowerQuestLine.addQuest(new MultipleQuestsQuest([ + defeatUnrivaledPsychic, + catchUnrivaledPsychic, + defeatUnrivaledFighting, + catchUnrivaledFighting, + ], '.....right. Of course..... Well, you have no leads for now, so may as well defeat and catch some Psychic and Fighting-type Pokémon.')); + const clearUnrivaledBlue = new DefeatTemporaryBattleQuest('Unrivaled Blue', 'Blue has contacted you, saying he knows something but wants a fight first. He is at Viridian City.'); + unrivaledPowerQuestLine.addQuest(clearUnrivaledBlue); + const talkToUnrivaledBlue = new TalkToNPCQuest(UnrivaledBlue, 'Talk to Blue in Viridian City.'); + unrivaledPowerQuestLine.addQuest(talkToUnrivaledBlue); + const clear150CeruleanCave = new DefeatDungeonQuest(150, 0, 'Cerulean Cave').withDescription('Look for Blue\'s old rival in Cerulean Cave'); + unrivaledPowerQuestLine.addQuest(clear150CeruleanCave); + const talkToUnrivaledGreen1 = new TalkToNPCQuest(UnrivaledGreen1, 'You eventually found a trainer standing where Mewtwo once did in Cerulean Cave. Talk to Green.'); + unrivaledPowerQuestLine.addQuest(talkToUnrivaledGreen1); + const clearUnrivaledGreen = new DefeatTemporaryBattleQuest('Unrivaled Green', 'It seems Green is irritated that you caught Mewtwo before she could. Defeat her in Cerulean Cave.'); + unrivaledPowerQuestLine.addQuest(clearUnrivaledGreen); + const MewtwoniteXReward = () => { + player.gainMegaStone(GameConstants.MegaStoneType.Mewtwonite_X); + Notifier.notify({ + title: unrivaledPowerQuestLine.name, + message: 'You received Mewtwonite X from Green!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const talkToUnrivaledGreen2 = new TalkToNPCQuest(UnrivaledGreen2, 'Talk to Green in Cerulean Cave.').withCustomReward(MewtwoniteXReward); + unrivaledPowerQuestLine.addQuest(talkToUnrivaledGreen2); + const talkToAnomalyMewtwo1 = new TalkToNPCQuest(AnomalyMewtwo1, 'Talk to Anomaly Mewtwo in Cerulean Cave.'); + unrivaledPowerQuestLine.addQuest(talkToAnomalyMewtwo1); + const clearAnomalyMewtwo1 = new DefeatTemporaryBattleQuest('Anomaly Mewtwo 1', 'Mewtwo wishes to find a place it can live undisturbed. You know of such a place, but it seems unwilling to listen. Defeat Anomaly Mewtwo near Cerulean Cave so you may attempt to talk to it.'); + unrivaledPowerQuestLine.addQuest(clearAnomalyMewtwo1); + const clearAnomalyMewtwo2 = new DefeatTemporaryBattleQuest('Anomaly Mewtwo 2', 'It escaped to the west. Defeat Anomaly Mewtwo again.'); + unrivaledPowerQuestLine.addQuest(clearAnomalyMewtwo2); + const clearAnomalyMewtwo3 = new DefeatTemporaryBattleQuest('Anomaly Mewtwo 3', 'It changed form and flew off in the direction of the sea. Defeat Anomaly Mewtwo yet again.'); + unrivaledPowerQuestLine.addQuest(clearAnomalyMewtwo3); + const clearAnomalyMewtwo4 = new DefeatTemporaryBattleQuest('Anomaly Mewtwo 4', 'It flew off to the peak of a great mountain. Defeat Anomaly Mewtwo yet again.'); + unrivaledPowerQuestLine.addQuest(clearAnomalyMewtwo4); + const clearAnomalyMewtwo5 = new DefeatTemporaryBattleQuest('Anomaly Mewtwo 5', 'It flew off to a faraway region to hide in a large city. Defeat Anomaly Mewtwo yet again.'); + unrivaledPowerQuestLine.addQuest(clearAnomalyMewtwo5); + const talkToAnomalyMewtwo2 = new TalkToNPCQuest(AnomalyMewtwo2, 'Talk to Anomaly Mewtwo in Pokémon Village.'); + unrivaledPowerQuestLine.addQuest(talkToAnomalyMewtwo2); + const findGreatTwistedSpoon = new CustomQuest(1, 0, 'Find the Great Twisted Spoon in P2 Lab.', () => player.itemList.Great_Twisted_Spoon()); + const unrivaledPsychicGems = new GainGemsQuest(60000, 0, PokemonType.Psychic); + const unrivaledFightingGems = new GainGemsQuest(60000, 0, PokemonType.Fighting); + unrivaledPowerQuestLine.addQuest(new MultipleQuestsQuest([ + findGreatTwistedSpoon, + unrivaledPsychicGems, + unrivaledFightingGems, + ], 'Gather the Great Twisted Spoon, Psychic Gems, and Fighting Gems for Mewtwo.')); + const talkToAnomalyMewtwo3 = new TalkToNPCQuest(AnomalyMewtwo3, 'Talk to Anomaly Mewtwo in Pokémon Village.'); + unrivaledPowerQuestLine.addQuest(talkToAnomalyMewtwo3); + const clearAnomalyMewtwo6 = new DefeatDungeonBossQuest('Pokémon Village', 'Anomaly Mewtwo').withDescription('Defeat Anomaly Mewtwo in Pokémon Village.'); + unrivaledPowerQuestLine.addQuest(clearAnomalyMewtwo6); + const MewtwoniteYReward = () => { + player.gainMegaStone(GameConstants.MegaStoneType.Mewtwonite_Y); + Notifier.notify({ + title: unrivaledPowerQuestLine.name, + message: 'You received Mewtwonite Y from Anomaly Mewtwo!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const talkToAnomalyMewtwo4 = new TalkToNPCQuest(AnomalyMewtwo4, 'Talk to Anomaly Mewtwo in Pokémon Village.').withCustomReward(MewtwoniteYReward); + unrivaledPowerQuestLine.addQuest(talkToAnomalyMewtwo4); + App.game.quests.questLines().push(unrivaledPowerQuestLine); + } + /* Alola QuestLines */ + // Melemele Island guide - Started upon deafting Hau 1 + static createMelemeleAlolaQuestLine() { + const melemeleAlolaQuestLine = new QuestLine('Welcome to Paradise, Cousin!', 'Time to kick off your Alolan vacation! See the sights around Melemele Island.'); + // 0 - Temp Battle: Melemele Spearow + const battleMelemeleSpearow = new DefeatTemporaryBattleQuest('Melemele Spearow', 'Protect the mysterious girl\'s Pokémon! Battle the Spearow near the Ruins of Conflict.') + .withOptionalArgs({ + clearedMessage: 'The bridge collapses and you and the floating Pokémon start falling to your doom... But you are saved by a mysterious Pokémon!', + npcDisplayName: 'Melemele Guardian', + npcImageName: '../pokemon/785', + }); + melemeleAlolaQuestLine.addQuest(battleMelemeleSpearow); + // 1 - Talk to NPC: Lillie 1 + const talkToLillie1 = new TalkToNPCQuest(Lillie1, 'Ask the mysterious girl if she\'s okay.'); + melemeleAlolaQuestLine.addQuest(talkToLillie1); + // 2 - Clear dungeon: Trainers' School + const clearTrainersSchool = new DefeatDungeonQuest(1, 0, 'Trainers\' School').withDescription('Follow Lillie to the Trainers\' School dungeon and clear it.') + .withOptionalArgs({ + clearedMessage: 'You seemed to be in perfect sync with your Pokémon—weren\'t you? Um... Since we\'ve come this far together, why don\'t I show you some more of the city?', + npcDisplayName: 'Lillie', + npcImageName: 'Lillie', + }); + melemeleAlolaQuestLine.addQuest(clearTrainersSchool); + // 3 - Temp Battle: Skull 1 + const battleSkullGrunts1 = new DefeatTemporaryBattleQuest('Skull 1', 'Beat up the Team Skull grunts loitering on Hau\'oli City\'s Dock.') + .withOptionalArgs({ + clearedMessage: 'My thanks to you and your Pokémon. These grunts are always bothering me and my trial site. You... you\'re the trainer who cleared the Trainers\' School so effortlessly! Allow me to see if you\'re ready for my trial!', + npcDisplayName: 'Ilima', + npcImageName: 'Ilima', + }); + melemeleAlolaQuestLine.addQuest(battleSkullGrunts1); + // 4 - Temp Battle: Ilima + const battleIlima = new DefeatTemporaryBattleQuest('Ilima', 'Battle Ilima in Hau\'oli City.'); + melemeleAlolaQuestLine.addQuest(battleIlima); + // 5 - Clear dungeon boss: Verdant Cavern, Ilima's Trial + this.createZCrystalTrial(PokemonType.Normal, 'Verdant Cavern', 'Ilima', 'What an incredible Trainer you are! The Z-Crystal from the pedestal is yours now! It is known as Normalium Z!', melemeleAlolaQuestLine); + // 6 - Clear dungeon: Melemele Meadow + const clearMelemeleMeadow = new DefeatDungeonQuest(1, 0, 'Melemele Meadow').withDescription('Lillie needs your help. Continue past Route 3 and clear Melemele Meadow.') + .withOptionalArgs({ + clearedMessage: 'Pew!

    Nebby flees.', + npcDisplayName: 'Nebby', + npcImageName: '../pokemon/789', + }); + melemeleAlolaQuestLine.addQuest(clearMelemeleMeadow); + // 7 - Clear dungeon: Seaward Cave + const clearSeawardCave = new DefeatDungeonQuest(1, 0, 'Seaward Cave').withDescription('Nebby escaped into a hole! Clear the Seaward Cave dungeon.') + .withOptionalArgs({ + clearedMessage: 'Pew~

    Nebby stays. It seems like it\'s following you now!', + npcDisplayName: 'Nebby', + npcImageName: '../pokemon/789', + }); + melemeleAlolaQuestLine.addQuest(clearSeawardCave); + // 8 - Temp Battle: Recon Squad 1 + const battleReconSquad1Reward = () => { + MapHelper.moveToTown('Melemele Meadow'); + }; + const battleReconSquad1 = new DefeatTemporaryBattleQuest('Recon Squad 1', 'The Ultra Recon Squad is awaiting a battle in Seaward Cave. Show them the thrill of the fight!').withCustomReward(battleReconSquad1Reward) + .withOptionalArgs({ + clearedMessage: 'That one you have come to collect... You must know that it is able to warp away when threatened, but the holes that are created when it does so leave a path open to dangerous beings. Be careful of who you trust it to.', + npcDisplayName: 'Phyco', + npcImageName: 'Phyco', + }); + melemeleAlolaQuestLine.addQuest(battleReconSquad1); + // 9 - Talk to NPC: Lillie2 + const talkToLillie2 = new TalkToNPCQuest(Lillie2, 'Return Nebby to Lillie in Melemele Meadow.'); + melemeleAlolaQuestLine.addQuest(talkToLillie2); + // 10 - Talk to NPC: Lillie3 + const talkToLillie3 = new TalkToNPCQuest(Lillie3, 'Lillie still has something on her mind. Talk to her in Iki Town.').withCustomReward(this.itemReward('Revive', 10, 'Lillie')); + melemeleAlolaQuestLine.addQuest(talkToLillie3); + // 11 - Gym Battle: Hala + // reward defined at the end of this file + const battleKahunaHala = new DefeatGymQuest(1, 0, 'Iki Town').withDescription('Defeat Hala in Iki Town to complete Melemele\'s Grand Trial!').withCustomReward(this.zCrystalGet(PokemonType.Fighting)); + melemeleAlolaQuestLine.addQuest(battleKahunaHala); + // end - Clear dungeon boss: Ten Carat Hill, Flyinium Z Trial + this.createZCrystalTrial(PokemonType.Flying, 'Ten Carat Hill', 'Kahili', 'Hello there. There\'s a wonderful breeze blowing out here today. The glistening Flyinium Z... It\'s yours now. Use it well.', melemeleAlolaQuestLine, true, 'There is one more Z Crystal on Ten Carat Hill. Find the Trial Site and claim it!', 'Trial Site of Ten Carat Hill'); + App.game.quests.questLines().push(melemeleAlolaQuestLine); + } + // Akala Island guide - Started upon deafting Sina and Dexio + static createAkalaAlolaQuestLine() { + const akalaAlolaQuestLine = new QuestLine('Symbiotic Relations', 'Help Lillie and Nebby on Akala Island and meet some friendly faces.'); + // 0 - Talk to NPC: Lillie4 + const talkToLillie4 = new TalkToNPCQuest(Lillie4, 'Plan out your course of action with Lillie in Heahea City.'); + akalaAlolaQuestLine.addQuest(talkToLillie4); + // 1 - Clear dungeon boss: Brooklet Hill, Lana's Trial + this.createZCrystalTrial(PokemonType.Water, 'Brooklet Hill', 'Lana', 'Very well done! You do know what this is, don\'t you? Please take this Waterium Z.', akalaAlolaQuestLine); + // 2 - Temp battle: Recon Squad 2 + const battleReconSquad2 = new DefeatTemporaryBattleQuest('Recon Squad 2', 'The Ultra Recon Squad is investigating an oddly familiar tree. Go check it out on Route 5.') + .withOptionalArgs({ + clearedMessage: 'That must have been the Pokémon known as Sudowoodo. Our research is insufficient to define what it means to be a Pokémon Trainer... We\'ll never be able to stop the Blinding One like this...', + npcDisplayName: 'Dulse', + npcImageName: 'Dulse', + }); + akalaAlolaQuestLine.addQuest(battleReconSquad2); + // 3 - Temp battle: Skull 3 + const clearSkull3 = new DefeatTemporaryBattleQuest('Skull 3', 'Team Skull is causing trouble on Route 6! Looks like they haven\'t learned their lesson.') + .withOptionalArgs({ + clearedMessage: 'Give me your name, Trainer. $playername$, eh? That\'s a fine name. I like the way you handled yourself in battle. Perhaps we\'ll meet again someday.', + npcDisplayName: 'Hapu', + npcImageName: 'Hapu', + }); + akalaAlolaQuestLine.addQuest(clearSkull3); + // 4 - Clear dungeon boss: Wela Volcano Park, Kiawe's Trial + this.createZCrystalTrial(PokemonType.Fire, 'Wela Volcano Park', 'Kiawe', 'Whoa! S-spectacular! That Pokémon was protecting this Firium Z. Now it is yours.', akalaAlolaQuestLine); + // 5 - Clear dungeon boss: Lush Jungle, Mallow's Trial + this.createZCrystalTrial(PokemonType.Grass, 'Lush Jungle', 'Mallow', 'Wow, you\'re even stronger than I thought! Looks like you\'ve cleared all three of Akala\'s trials! Here! A gift for such an inspiring young Trainer!', akalaAlolaQuestLine); + // 6 - Talk to NPC: ProfBurnetAlola + const talkToBurnet1 = new TalkToNPCQuest(ProfBurnetAlola1, 'Talk to Professor Burnet in Heahea City after you\'ve finished exploring Lush Jungle.').withCustomReward(this.itemReward('Rare_Candy', 10, 'Professor Burnet')); + akalaAlolaQuestLine.addQuest(talkToBurnet1); + // 7 - Clear dungeon: Diglett's tunnel + const clearDiglettsTunnel = new DefeatDungeonQuest(1, 0, 'Diglett\'s Tunnel').withDescription('You hear the echoes of bad rap and low self-esteem in the distance. Clear Diglett\'s Tunnel.') + .withOptionalArgs({ + clearedMessage: 'Just when things were startin\' to heat up, yo, I got surrounded by Diglett and beat up, yo!', + npcDisplayName: 'Team Skull', + npcImageName: 'Team Skull Grunts (both)', + }); + akalaAlolaQuestLine.addQuest(clearDiglettsTunnel); + // 8 - Gym battle: Olivia + const battleKahunaOlivia = new DefeatGymQuest(1, 0, 'Konikoni City').withDescription('Reach Kahuna Olivia and Lillie at the Ruins of Life and complete Akala\'s Grand Trial!').withCustomReward(this.zCrystalGet(PokemonType.Rock)); + akalaAlolaQuestLine.addQuest(battleKahunaOlivia); + // end - Temp battle: Ultra Wormhole + const clearUltraWormhole = new DefeatTemporaryBattleQuest('Ultra Wormhole', 'A strange creature has appeared in Aether Paradise. Make it go away. Clear the Ultra Wormhole.') + .withOptionalArgs({ + clearedMessage: 'Why so shocked? Was it your first time seeing an Ultra Beast? Those mysterious creatures that live beyond the Ultra Wormholes, the holes that suddenly open in the sky and lead to Ultra Space... It would serve you well to remember this.', + npcDisplayName: 'Phyco', + npcImageName: 'Phyco', + }); + akalaAlolaQuestLine.addQuest(clearUltraWormhole); + App.game.quests.questLines().push(akalaAlolaQuestLine); + } + // Ula'ula Island guide - Started upon defeating Hau in Malie + static createUlaulaAlolaQuestLine() { + const ulaulaAlolaQuestLine = new QuestLine('Child of the Stars', 'Learn more about Nebby\'s origins with Lillie on Ula\'Ula Island.'); + // 0 - Talk to NPC: Lillie + const talkeToLillie5 = new TalkToNPCQuest(Lillie5, 'Read about the legends of Alola with Lillie in Malie City.'); + ulaulaAlolaQuestLine.addQuest(talkeToLillie5); + // 1 - Temp Battle: Skull 4 + const battleSkull4 = new DefeatTemporaryBattleQuest('Skull 4', 'Team Skull are trying to steal a bus stop sign on Route 10! This misdeed won\'t go unpunished!'); + ulaulaAlolaQuestLine.addQuest(battleSkull4); + // 2 - Clear dungeon boss: Hokulani Observatory, Sophocles' Trial + this.createZCrystalTrial(PokemonType.Electric, 'Hokulani Observatory', 'Sophocles', 'That Pokémon was really something else! Here, I\'ll give you this Electrium Z to reward you for beating it.', ulaulaAlolaQuestLine); + // 3 - Defeat dungeon boss: Guzma, Malie Garden + const defeatGuzmaMalieGarden = new DefeatDungeonBossQuest('Malie Garden', 'Team Skull Boss Guzma').withDescription('Team Skull are being annoying. Get rid of them. Beat their boss Guzma in the Malie Garden dungeon.'); + ulaulaAlolaQuestLine.addQuest(defeatGuzmaMalieGarden); + // 4 - Temp battle: Skull 5 + const battleSkull5 = new DefeatTemporaryBattleQuest('Skull 5', 'Lillie has run into a Team Skull grunt at Aether House. Politely beat up his Pokémon.') + .withOptionalArgs({ + clearedMessage: 'I just wanted to go for a stroll on my own, to see what it must feel like to be a Trainer... So Hapu and I went our separate ways... but then Nebby tried to get out of my bag...', + npcDisplayName: 'Lillie', + npcImageName: 'Lillie', + }); + ulaulaAlolaQuestLine.addQuest(battleSkull5); + // 5 - Clear dungeon boss: Thrifty Megamart, Acerola's Trial + this.createZCrystalTrial(PokemonType.Ghost, 'Thrifty Megamart', 'Acerola', 'Welcome back! Now let\'s see how you did... Yup! You passed my trial! Here you go!', ulaulaAlolaQuestLine); + // 6 - Clear dungeon boss: Po Town + this.createZCrystalTrial(PokemonType.Bug, 'Po Town', 'Guzma', 'There is a chest full of Bug-type Z-Crystals next to Guzma. You obtained a Buginium Z!', ulaulaAlolaQuestLine, true, 'Team Skull have stolen the Yungoos from Aether House. Raid their base. Clear the Po Town dungeon.', 'Team Skull Boss Guzma'); + // 7 - Temp Battle: Gladion 2 + const battleGladion2Reward = () => { + MapHelper.moveToTown('Malie City'); + }; + const battleGladion2 = new DefeatTemporaryBattleQuest('Gladion 2', 'Team Skull have stolen Nebby! Battle Gladion at Aether House.').withCustomReward(battleGladion2Reward); + ulaulaAlolaQuestLine.addQuest(battleGladion2); + // 8 - Gym battle: Nanu + const battleKahunaNanu = new DefeatGymQuest(1, 0, 'Malie City').withDescription('Kahuna Nanu is challenging you to a Grand Trial in Malie City! Test your strength before you go to Aether by defeating him.').withCustomReward(this.zCrystalGet(PokemonType.Dark)); + ulaulaAlolaQuestLine.addQuest(battleKahunaNanu); + // 9 - Clear dungeon: Aether Foundation + const clearAetherFoundation1 = new DefeatDungeonQuest(1, 0, 'Aether Foundation').withDescription('Aether president Lusamine has recruited Team Skull and is using Nebby to open an Ultra Wormhole. Stop her. Clear the Aether Foundation dungeon.') + .withOptionalArgs({ + clearedMessage: 'That Lusamine! We will need you to leave us in peace so that we may do our job. Please don\'t get in our way. Leave Cosmog to us.', + npcDisplayName: 'Ultra Recon Squad', + npcImageName: 'specialNPCs/Ultra Recon Squad (all)', + }); + ulaulaAlolaQuestLine.addQuest(clearAetherFoundation1); + // 10 - Clear dungeon boss: Aether Branch Chief Faba + const clearAetherFoundation2 = new DefeatDungeonBossQuest('Aether Foundation', 'Aether Branch Chief Faba', 0).withDescription('Aether Branch Faba\'s ego is blocking your way. Defeat him in the Aether Foundation dungeon to get closer to Lusamine.') + .withOptionalArgs({ + clearedMessage: 'H-h-how can this be?! How could this child... If you\'re looking for Cosmog, I suppose it might be downstairs.', + npcDisplayName: 'Faba', + npcImageName: 'Aether Branch Chief (faba)', + }); + ulaulaAlolaQuestLine.addQuest(clearAetherFoundation2); + // 11 - Clear dungeon boss: Team Skull Boss Guzma + const clearAetherFoundation3 = new DefeatDungeonBossQuest('Aether Foundation', 'Team Skull Boss Guzma', 0).withDescription('Ya boy Guzma is here. Defeat him in the Aether Foundation dungeon. Lusamine is next.') + .withOptionalArgs({ + clearedMessage: 'The daughter who stole my Cosmog from me and the son who took my Type: Null! All I ever did was give you two all the love I had, and all you did was betray me! You have no right to ask for my attention now!
    But it doesn\'t matter now. None of that matters now! Watch... I will open the Ultra Wormhole for you... Come to me, my sweet beast!', + npcDisplayName: 'Lusamine', + npcImageName: 'Aether President (lusamine)', + }); + ulaulaAlolaQuestLine.addQuest(clearAetherFoundation3); + // 12 - Clear dungeon boss: Aether President Lusamine + const clearAetherFoundation4 = new DefeatDungeonBossQuest('Aether Foundation', 'Aether President Lusamine', 0).withDescription('Lusamine is using Nebby to open an Ultra Wormhole! Defeat her in the Aether Foundation dungeon to put a stop to this.') + .withOptionalArgs({ + clearedMessage: 'All that I want is my precious beast! I don\'t care about any of the rest of you! I don\'t care if you are my child or not! If you\'re not beautiful enough to be worthy of my love, then I don\'t NEED you!

    Lusamine left into the Ultra Wormhole.
    ', + npcDisplayName: 'Lusamine', + npcImageName: 'Aether President (lusamine)', + }); + ulaulaAlolaQuestLine.addQuest(clearAetherFoundation4); + // 13 - Talk to NPC: Lillie and Gladion + const AlolaMasterballReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + Notifier.notify({ + title: ulaulaAlolaQuestLine.name, + message: 'Gladion gave you a Master Ball!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const EmissaryOfLightReward = () => { + App.game.quests.getQuestLine('Emissary of Light').beginQuest(0, undefined, true); + }; + const talkToLillie6 = new TalkToNPCQuest(Lillie6, 'Talk to Lillie.'); + const talktoGladion1 = new TalkToNPCQuest(Gladion1, 'Talk to Gladion.').withCustomReward(AlolaMasterballReward); + ulaulaAlolaQuestLine.addQuest(new MultipleQuestsQuest([ + talkToLillie6, + talktoGladion1, + ], 'Talk to Lillie and Gladion at Aether Paradise when you\'re ready to go to the next island.').withCustomReward(EmissaryOfLightReward)); + // 14 - Temp battle: Haina Desert, Psychium Z + const getPsychiumZ = new DefeatTemporaryBattleQuest('Psychium Z Trial', 'There are more Z Crystals on Ula\'ula. Find the Trial Site hidden in Haina Desert after clearing the Route.').withInitialValue(0); + ulaulaAlolaQuestLine.addQuest(getPsychiumZ); + // end - Temp battle: Molayne, Steelium Z + const getSteeliumZ = new DefeatTemporaryBattleQuest('Molayne', 'Get the Steelium Z. Defeat Molayne in Hokulani Observatory.').withInitialValue(0); + ulaulaAlolaQuestLine.addQuest(getSteeliumZ); + App.game.quests.questLines().push(ulaulaAlolaQuestLine); + } + // Poni Island guide - Started upon finishing Child of the Stars (Ula'ula quest) + static createPoniAlolaQuestLine() { + const poniAlolaQuestLine = new QuestLine('Emissary of Light', 'Seek out the Pokémon of Alola\'s legends on Poni Island.'); + // 0 - Route Kill: Clear Alola 25, Ancient Poni Path + const alolaRoute25 = new DefeatPokemonsQuest(10, 0, 25, GameConstants.Region.alola, 'Explore Poni Island for signs of its kahuna. Clear Ancient Poni Path.') + .withOptionalArgs({ + clearedMessage: 'Oh! Been a while, friends. The kahuna? Hrmm. Well, I suppose the time might be right now... All right. Let us all proceed to the ruins. You stick with me, you two.', + npcDisplayName: 'Hapu', + npcImageName: 'Hapu', + }); + poniAlolaQuestLine.addQuest(alolaRoute25); + // 1 - Talk to NPC: HapuHope + const talkeToHapuHope = new TalkToNPCQuest(HapuHope, 'Talk to Hapu at the Ruins of Hope.'); + poniAlolaQuestLine.addQuest(talkeToHapuHope); + // 2 - Clear dungeon: Exeggutor Island Hill + const clearExeggutorIslandHill = new DefeatDungeonQuest(1, 0, 'Exeggutor Island Hill').withDescription('Hapu has permitted you to visit sacred ground. Find the other flute by clearing Exeggutor Island Hill.') + .withOptionalArgs({ + clearedMessage: 'Now we have both the Sun Flute and the Moon Flute!
    ', + npcDisplayName: 'Lillie', + npcImageName: 'Lillie (z powered)', + }); + poniAlolaQuestLine.addQuest(clearExeggutorIslandHill); + // 3 - Temp Battle: Skull 6 + const battleSkullGrunts6 = new DefeatTemporaryBattleQuest('Skull 6', 'Team Skull are being annoying again. Settle the score with them near Vast Poni Canyon.') + .withCustomReward(this.zCrystalGet(PokemonType.Poison)) + .withOptionalArgs({ + clearedMessage: 'That\'s enough, grunts. No one wants to see a sore loser.

    You. To be honest, I\'ve treated you really badly. Even if I apologize, I know it\'s probably too late for you to forgive me. This is my way of saying sorry, OK? Take it. It\'s Poisonium Z.
    ', + npcDisplayName: 'Plumeria', + npcImageName: 'Plumeria (league)', + }); + poniAlolaQuestLine.addQuest(battleSkullGrunts6); + // 4 - Gym battle: Hapu + const battleKahunaHapu = new DefeatGymQuest(1, 0, 'Exeggutor Island').withDescription('Proceed to Vast Poni Canyon and prove your skills in a Grand Trial against Poni\'s new kahuna, Hapu!').withCustomReward(this.zCrystalGet(PokemonType.Ground)); + poniAlolaQuestLine.addQuest(battleKahunaHapu); + // 5 - Clear dungeon boss: Vast Poni Canyon, Dragonium Z Trial + this.createZCrystalTrial(PokemonType.Dragon, 'Vast Poni Canyon', 'Trial Site', 'You obtained a Dragon-Type Z-Crystal. The Dragonium Z is yours!', poniAlolaQuestLine, true, 'Clear the ancient Trial Site of Vast Poni Canyon.', 'Trial Site of Vast Poni Canyon'); + // 6 - Talk to NPC: Play a flute on the Altar of the Sunne and Moone + const talkToLillieDay = new TalkToNPCQuest(SunFlute, 'Play the Sun Flute during Day or Dusk.'); + const talkToLillieNight = new TalkToNPCQuest(MoonFlute, 'Play the Moon Flute during Night or Dawn.'); + poniAlolaQuestLine.addQuest(new MultipleQuestsQuest([ + talkToLillieDay, + talkToLillieNight, + ], 'Choose a time of day to play a flute with Lillie at the Altar.', 0, 1)); + // 7 - Temp battle: Lusamine + const clearBeastLusamine = new DefeatTemporaryBattleQuest('Lusamine', 'Help Lillie get through to her mother! Defeat Lusamine at the Altar of the Sunne and Moone.') + .withOptionalArgs({ + clearedMessage: 'Lillie...
    ...
    Heh...
    When did you... start becoming so beautiful?', + npcDisplayName: 'Lusamine', + npcImageName: 'specialNPCs/Aether President (lillie)', + }); + poniAlolaQuestLine.addQuest(clearBeastLusamine); + // end - Talk to NPC: Lillie7 + const EaterOfLightReward = () => { + App.game.quests.getQuestLine('Eater of Light').beginQuest(0, undefined); + Notifier.notify({ + title: 'Emissary Eater of Light', + message: 'A dangerous Pokémon from another world threatens the Alola region.', + type: NotificationConstants.NotificationOption.dark, + timeout: 5 * GameConstants.MINUTE, + }); + }; + const talkToLillie7 = new TalkToNPCQuest(Lillie7, 'Everyone is finally safe. Talk to Lillie.').withCustomReward(EaterOfLightReward); + poniAlolaQuestLine.addQuest(talkToLillie7); + App.game.quests.questLines().push(poniAlolaQuestLine); + } + // Alola Story conclusion - Started upon finishing Emissary of Light (Poni quest) + static createUltraNecrozmaAlolaQuestLine() { + const ultraNecrozmaAlolaQuestLine = new QuestLine('Eater of Light', 'A dangerous Pokémon from another world threatens the Alola region.'); + // 0 - Temp battle: Ultra Megalopolis + const clearUltraMegalopolis = new DefeatTemporaryBattleQuest('Ultra Megalopolis', 'Stop the Eater of Light from absorbing all light in Alola. Defeat Ultra Necrozma at the Altar of the Sunne and Moone.') + .withOptionalArgs({ + clearedMessage: 'Necrozma shone with such blinding light, as it used to, only to lose that light all over again... It seems to have fled somewhere now. We are grateful to you, human of Alola. May we all eventually be awash in light again.', + npcDisplayName: 'Ultra Recon Squad', + npcImageName: 'specialNPCs/Ultra Recon Squad (all)', + }); + ultraNecrozmaAlolaQuestLine.addQuest(clearUltraMegalopolis); + // 1 - Talk to NPC: Lillie8 + const talkToLillie8 = new TalkToNPCQuest(Lillie8, 'Everyone is finally safe again. Talk to Lillie.'); + ultraNecrozmaAlolaQuestLine.addQuest(talkToLillie8); + // 2 - Temp battle: Lillie + const battleLillie = new DefeatTemporaryBattleQuest('Lillie', 'You are challenged by Pokémon Trainer Lillie! Welcome her to the world of trainers by battling her at the Altar of the Sunne and Moone.'); + ultraNecrozmaAlolaQuestLine.addQuest(battleLillie); + // 3 - Clear dungeon boss: Mina\'s Houseboat, Mina's Trial + this.createZCrystalTrial(PokemonType.Fairy, 'Mina\'s Houseboat', 'Mina', 'That\'s a pretty great picture. You and your Pokémon! You\'re a great Pokémon Trainer! So here you go! A piece of Fairium Z for you!', ultraNecrozmaAlolaQuestLine); + // 4 - Temp battle: Gladion 3 + const battleGladion3 = new DefeatTemporaryBattleQuest('Gladion 3', 'Battle Gladion on Ula\'ula one last time before ascending to the Pokémon League.'); + ultraNecrozmaAlolaQuestLine.addQuest(battleGladion3); + // 5 - Clear dungeon: Mount Lanakila + const clearMountLanakila = new DefeatDungeonQuest(1, 0, 'Mount Lanakila').withDescription('One step closer to victory: Clear Mount Lanakila!') + .withOptionalArgs({ + clearedMessage: 'You see Necrozma unconscious in a crater, drained of light and in a dormant state. Best to let it rest for a while.', + npcImageName: '../pokemon/800', + }); + ultraNecrozmaAlolaQuestLine.addQuest(clearMountLanakila); + // end - Clear dungeon boss: Mount Lanakila, Icium Z Trial + this.createZCrystalTrial(PokemonType.Ice, 'Mount Lanakila', 'Trial Site', 'Congratulations! You\'ve claimed the Icium Z! Onwards to the Pokémon League now!', ultraNecrozmaAlolaQuestLine, true, 'You were so distracted by Necrozma you forgot about the Z Crystal! Find the Trial Site in the Mount Lanakila dungeon.', 'Trial Site of Mount Lanakila'); + App.game.quests.questLines().push(ultraNecrozmaAlolaQuestLine); + } + // "Z Crystal" Quest + // will unlock Tapus and Totem mons + static createIslandChallengeQuestLine() { + const islandChallengeQuestLine = new QuestLine('Island Challenge', 'Embark on the Island Challenge and be graced by the Tapus\' presence!', new DevelopmentRequirement(new TemporaryBattleRequirement('Hau 2')), GameConstants.BulletinBoards.Alola); + const autoModalStep = new CustomQuest(1, 0, 'Start your Island Challenge at Professor Kukui\'s Lab.', () => +!!App.game.statistics.routeKills[GameConstants.Region.alola]['1']()).withInitialValue(0) + .withCustomReward(() => ItemList.Island_Challenge_Amulet.gain(1)) + .withOptionalArgs({ + clearedMessage: 'Woah there, tester! This quest is still under development! You should go out there and test the story in the meantime, yeah!', + npcDisplayName: 'Kukui', + npcImageName: 'Professor Kukui', + }); + islandChallengeQuestLine.addQuest(autoModalStep); + /* + Mina's Trial will be part of this questline + const minasTrialAlolaQuestLine = new QuestLine('Mina\'s Trial', 'Mina has asked you to battle the Trial captains of the other islands to earn access to her Trial site.'); + + const clearCaptainMina = new DefeatTemporaryBattleQuest('Captain Mina', 'Defeat Captain Mina in Seafolk Village.').withCustomReward(() => ItemList.Pink_Petal_Mina.gain(1)); + minasTrialAlolaQuestLine.addQuest(clearCaptainMina); + + const clearCaptainIlima = new DefeatTemporaryBattleQuest('Captain Ilima', 'Defeat Captain Ilima in Hau\'oli Cemetery.').withCustomReward(() => ItemList.Orange_Petal_Mina.gain(1)); + minasTrialAlolaQuestLine.addQuest(clearCaptainIlima); + + const clearCaptainMallow = new DefeatTemporaryBattleQuest('Captain Mallow', 'Defeat Captain Mallow in Lush Jungle.').withCustomReward(() => ItemList.Green_Petal_Mina.gain(1)); + minasTrialAlolaQuestLine.addQuest(clearCaptainMallow); + + const clearCaptainLana = new DefeatTemporaryBattleQuest('Captain Lana', 'Defeat Captain Lana in Lush Jungle.').withCustomReward(() => ItemList.Blue_Petal_Mina.gain(1)); + minasTrialAlolaQuestLine.addQuest(clearCaptainLana); + + const clearCaptainKiawe = new DefeatTemporaryBattleQuest('Captain Kiawe', 'Defeat Captain Kiawe in Wela Volcano Park.').withCustomReward(() => ItemList.Red_Petal_Mina.gain(1)); + minasTrialAlolaQuestLine.addQuest(clearCaptainKiawe); + + const clearCaptainSophocles = new DefeatTemporaryBattleQuest('Captain Sophocles', 'Defeat Captain Sophocles in Hokulani Observatory.').withCustomReward(() => ItemList.Yellow_Petal_Mina.gain(1)); + minasTrialAlolaQuestLine.addQuest(clearCaptainSophocles); + + const clearKahunaNanu = new DefeatTemporaryBattleQuest('Kahuna Nanu', 'Captain Acerola is apparently busy with something at the top of Mount Lanakila. Defeat Kahuna Nanu in Aether House instead.').withCustomReward(() => ItemList.Purple_Petal_Mina.gain(1)); + minasTrialAlolaQuestLine.addQuest(clearKahunaNanu); + */ + App.game.quests.questLines().push(islandChallengeQuestLine); + } + // Silvally Typings Questline - Available post-E4 + static createSilvallyTypesQuestLine() { + const SilvallyTypesQuestLine = new QuestLine('Typing some Memories', 'Help Gladion restore his Silvally\'s memories.', new MultiRequirement([new ObtainedPokemonRequirement('Silvally (Normal)'), new GymBadgeRequirement(BadgeEnums.Champion_Stamp)]), GameConstants.BulletinBoards.Alola); + const talkToGladion1 = new TalkToNPCQuest(SilvallyGladion1, 'Talk to Gladion in the Aether Foundation.'); + SilvallyTypesQuestLine.addQuest(talkToGladion1); + const createMultiTypeCaptureQuest = (types, description) => { + const quest = new MultipleQuestsQuest(types.map(type => { + return new CapturePokemonTypesQuest(100, 0, type); + }), description); + SilvallyTypesQuestLine.addQuest(quest); + }; + createMultiTypeCaptureQuest([PokemonType.Fighting, PokemonType.Rock, PokemonType.Dark, PokemonType.Fairy], 'Get some training before looking for Silvally\'s memories. Catch or hatch 100 Fighting, Rock, Dark and Fairy Types'); + const talkToMelemeleLocals = new TalkToNPCQuest(SilvallyHala, 'Talk to important people around Melemele Island.').withCustomReward(() => ItemList.Fighting_Memory_Silvally.gain(1)); + const talkToAkalaLocals = new TalkToNPCQuest(SilvallyOlivia, 'Talk to important people around Akala Island.').withCustomReward(() => ItemList.Rock_Memory_Silvally.gain(1)); + const talkToUlaulaLocals = new TalkToNPCQuest(SilvallyNanu, 'Talk to important people around Ula\'ula Island.').withCustomReward(() => ItemList.Dark_Memory_Silvally.gain(1)); + const talkToPoniLocals = new TalkToNPCQuest(SilvallyMina, 'Talk to important people around Poni Island.').withCustomReward(() => ItemList.Fairy_Memory_Silvally.gain(1)); + SilvallyTypesQuestLine.addQuest(new MultipleQuestsQuest([ + talkToMelemeleLocals, + talkToAkalaLocals, + talkToUlaulaLocals, + talkToPoniLocals, + ], 'Start your search for Silvally\'s memories by asking important people around Alola.')); + const talkToGladion2 = new TalkToNPCQuest(SilvallyGladion2, 'Talk to Gladion in the Aether Foundation and tell him what you found out about Silvally\'s memories.'); + SilvallyTypesQuestLine.addQuest(talkToGladion2); + createMultiTypeCaptureQuest([PokemonType.Water, PokemonType.Grass, PokemonType.Fire, PokemonType.Electric, PokemonType.Ground, PokemonType.Ice], 'You probably need to train a little before going looking for more of Silvally memories. Catch or hatch 100 Water, Grass, Fire, Electric, Ground and Ice types.'); + const talkToLanaSilvally = new TalkToNPCQuest(LanaSilvally1, 'Search for Silvally\'s Memory near pools of freshwater. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToLanaSilvally); + const BuyWaterMemory = new CustomQuest(1, 0, 'Buy the Water Memory from Captain Lana with Dungeon Tokens.', () => player.itemList.Water_Memory_Silvally()) + .withOptionalArgs({ + clearedMessage: 'Thank you so much $playername$! Now I can finally buy that rod I\'ve always wanted!', + npcDisplayName: 'Captain Lana', + npcImageName: 'Lana', + }); + SilvallyTypesQuestLine.addQuest(BuyWaterMemory); + const talkToMallowSilvally = new TalkToNPCQuest(MallowSilvally1, 'Search for Silvally\'s Memory in overgrown forests. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToMallowSilvally); + const BuyGrassMemory = new CustomQuest(1, 0, 'Buy the Grass Memory from Captain Mallow with Quest Points.', () => player.itemList.Grass_Memory_Silvally()) + .withOptionalArgs({ + clearedMessage: 'Thank you, $playername$. I\'ll go to the market and buy the new ingredients right now!', + npcDisplayName: 'Captain Mallow', + npcImageName: 'Mallow', + }); + SilvallyTypesQuestLine.addQuest(BuyGrassMemory); + const talkToKiaweSilvally = new TalkToNPCQuest(KiaweSilvally1, 'Search for Silvally\'s Memory near fiery hotspots. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToKiaweSilvally); + const BuyFireMemory = new CustomQuest(1, 0, 'Buy the Fire Memory from Captain Kiawe with Battle Points.', () => player.itemList.Fire_Memory_Silvally()) + .withOptionalArgs({ + clearedMessage: 'Thanks, $playername$. I\'ll be going to the market to buy the project supplies this instant.', + npcDisplayName: 'Captain Kiawe', + npcImageName: 'Kiawe', + }); + SilvallyTypesQuestLine.addQuest(BuyFireMemory); + const talkToSophoclesSilvally = new TalkToNPCQuest(SophoclesSilvally1, 'Search for Silvally\'s Memory in electrical institutions. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToSophoclesSilvally); + const BuyElectricMemory = new CustomQuest(1, 0, 'Buy the Electric Memory from Captain Sophocles with Pokédollars.', () => player.itemList.Electric_Memory_Silvally()) + .withOptionalArgs({ + clearedMessage: 'Thank you, $playername$! Now I\'ll go buy some new equipment for my laboratory.', + npcDisplayName: 'Captain Sophocles', + npcImageName: 'Sophocles', + }); + SilvallyTypesQuestLine.addQuest(BuyElectricMemory); + const talkToVeteranSilvally = new TalkToNPCQuest(VeteranSilvally1, 'Search for Silvally\'s Memory near snow-covered peaks. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToVeteranSilvally); + const BuyIceMemory = new CustomQuest(1, 0, 'Buy the Ice Memory from Veteran Aristo with Diamonds.', () => player.itemList.Ice_Memory_Silvally()) + .withOptionalArgs({ + clearedMessage: 'You\'re the best, kiddo! I\'m sure she\'ll love the ring I\'ll buy her with these diamonds!', + npcDisplayName: 'Veteran Aristo', + npcImageName: 'Veteran (male)', + }); + SilvallyTypesQuestLine.addQuest(BuyIceMemory); + const talkToHapuSilvally = new TalkToNPCQuest(HapuSilvally1, 'Search for Silvally\'s Memory in isolated ground. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToHapuSilvally); + const BuyGroundMemory = new CustomQuest(1, 0, 'Buy the Ground Memory from Kahuna Hapu with Farm Points.', () => player.itemList.Ground_Memory_Silvally()) + .withOptionalArgs({ + clearedMessage: 'Wow you\'re pretty good at the farm, $playername$! I\'ll go buy the palm tree seeds right this instant!', + npcDisplayName: 'Kahuna Hapu', + npcImageName: 'Hapu', + }); + SilvallyTypesQuestLine.addQuest(BuyGroundMemory); + const talkToGladion3 = new TalkToNPCQuest(SilvallyGladion3, 'Go show Gladion those memories you\'ve bought in the Aether Foundation'); + SilvallyTypesQuestLine.addQuest(talkToGladion3); + createMultiTypeCaptureQuest([PokemonType.Bug, PokemonType.Flying, PokemonType.Poison, PokemonType.Ghost, PokemonType.Psychic, PokemonType.Steel, PokemonType.Dragon], 'Get some training before looking for more of Silvally\'s memories. Catch or hatch 100 Bug, Flying, Poison, Ghost, Psychic, Steel and Dragon types.'); + const talkToBugSilvally = new TalkToNPCQuest(GuzmaSilvally, 'Search for Silvally\'s Memory where pests make their home. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToBugSilvally); + const BugSilvallyBattle = new DefeatTemporaryBattleQuest('Guzma Bug Memory', 'Defeat Guzma to get the Memory back.').withCustomReward(() => ItemList.Bug_Memory_Silvally.gain(1)); + SilvallyTypesQuestLine.addQuest(BugSilvallyBattle); + const talkToFlyingSilvally = new TalkToNPCQuest(KahiliSilvally, 'Search for Silvally\'s Memory where the earth opens to the sky. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToFlyingSilvally); + const FlyingSilvallyBattle = new DefeatTemporaryBattleQuest('Kahili Flying Memory', 'Defeat Kahili to get the Memory back.').withCustomReward(() => ItemList.Flying_Memory_Silvally.gain(1)); + SilvallyTypesQuestLine.addQuest(FlyingSilvallyBattle); + const talkToPoisonSilvally = new TalkToNPCQuest(PlumeriaSilvally, 'Search for Silvally\'s Memory near an ancient trial. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToPoisonSilvally); + const PoisonSilvallyBattle = new DefeatTemporaryBattleQuest('Plumeria Poison Memory', 'Defeat Plumeria to get the Memory back.').withCustomReward(() => ItemList.Poison_Memory_Silvally.gain(1)); + SilvallyTypesQuestLine.addQuest(PoisonSilvallyBattle); + const talkToGhostSilvally = new TalkToNPCQuest(AcerolaSilvally, 'Search for Silvally\'s Memory near an abandoned village. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToGhostSilvally); + const GhostSilvallyBattle = new DefeatTemporaryBattleQuest('Acerola Ghost Memory', 'Defeat Captain Acerola to get the Memory back.').withCustomReward(() => ItemList.Ghost_Memory_Silvally.gain(1)); + SilvallyTypesQuestLine.addQuest(GhostSilvallyBattle); + const talkToPsychicSilvally = new TalkToNPCQuest(FabaSilvally, 'Search for Silvally\'s Memory in a modern haven. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToPsychicSilvally); + const PsychicSilvallyBattle = new DefeatTemporaryBattleQuest('Faba Psychic Memory', 'Defeat Aether Branch Chief Faba to get the Memory back.').withCustomReward(() => ItemList.Psychic_Memory_Silvally.gain(1)); + SilvallyTypesQuestLine.addQuest(PsychicSilvallyBattle); + const talkToSteelSilvally = new TalkToNPCQuest(MolayneSilvally, 'Search for Silvally\'s Memory near a steel dome. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToSteelSilvally); + const SteelSilvallyBattle = new DefeatTemporaryBattleQuest('Molayne Steel Memory', 'Defeat Molayne to get the Memory back.').withCustomReward(() => ItemList.Steel_Memory_Silvally.gain(1)); + SilvallyTypesQuestLine.addQuest(SteelSilvallyBattle); + const talkToDragonSilvally = new TalkToNPCQuest(RyukiSilvally, 'Search for Silvally\'s Memory near a tree. Ask Gladion at Aether Foundation if you\'re lost.'); + SilvallyTypesQuestLine.addQuest(talkToDragonSilvally); + const DragonSilvallyBattle = new DefeatTemporaryBattleQuest('Ryuki Dragon Memory', 'Defeat Ryuki to get the Memory back.').withCustomReward(() => ItemList.Dragon_Memory_Silvally.gain(1)); + SilvallyTypesQuestLine.addQuest(DragonSilvallyBattle); + const talkToGladion4 = new TalkToNPCQuest(SilvallyGladion4, 'Go talk to Gladion in the Aether Foundation and tell him you\'ve recovered all the Silvally Memories!'); + SilvallyTypesQuestLine.addQuest(talkToGladion4); + App.game.quests.questLines().push(SilvallyTypesQuestLine); + } + // Ultra Beasts Questline - Available post-E4 + static createUltraBeastQuestLine() { + const UltraBeastQuestLine = new QuestLine('Ultra Beast Hunt', 'Track down the mysterious Ultra Beasts', new GymBadgeRequirement(BadgeEnums.Champion_Stamp), GameConstants.BulletinBoards.Alola); + const talkToLooker = new TalkToNPCQuest(RoadsideMotelLooker1, 'Talk to Looker at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToLooker); + const AnabelReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Beastball, 5, false); + }; + const AnabelBattle = new DefeatTemporaryBattleQuest('Anabel', 'Defeat Agent Anabel at the Roadside Motel.').withCustomReward(AnabelReward); + UltraBeastQuestLine.addQuest(AnabelBattle); + const talkToAnabel1 = new TalkToNPCQuest(RoadsideMotelAnabel1, 'Talk to Anabel at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToAnabel1); + const talkToLooker2 = new TalkToNPCQuest(RoadsideMotelLooker2, 'Talk to Looker at the Roadside Motel to learn about Beast Balls.'); + UltraBeastQuestLine.addQuest(talkToLooker2); + const createUltraBeastQuest = (ultrabeast, hint, numberCaught, ultraBeastReward) => { + const time = (numberCaught > 0) ? 'times!' : 'time!'; + const validHint = hint !== null && hint !== void 0 ? hint : ''; + const catchUltraBeast = new CaptureSpecificPokemonQuest(ultrabeast, numberCaught).withDescription(`Capture ${ultrabeast} ${numberCaught} ${time} ${validHint}`).withCustomReward(ultraBeastReward); + return catchUltraBeast; + }; + const ultraBeastReward = () => { + Notifier.notify({ + title: UltraBeastQuestLine.name, + message: 'An Ultra Beast is hiding somewhere...', + type: NotificationConstants.NotificationOption.info, + timeout: 3e1, + }); + }; + UltraBeastQuestLine.addQuest(createUltraBeastQuest('Nihilego', ' Nihilego has been spotted at Wela Volcano Park and Diglett\'s Tunnel!', 1, ultraBeastReward)); + const talkToAnabel2 = new TalkToNPCQuest(RoadsideMotelAnabel2, 'Talk to Anabel at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToAnabel2); + UltraBeastQuestLine.addQuest(new MultipleQuestsQuest([ + createUltraBeastQuest('Buzzwole', undefined, 2), + createUltraBeastQuest('Pheromosa', undefined, 4), + ], 'Rare Ultra Beasts have been spotted!\nBuzzwole in Melemele Meadow and Pheromosa in Verdant Cavern!').withCustomReward(ultraBeastReward)); + const talkToAnabel3 = new TalkToNPCQuest(RoadsideMotelAnabel3, 'Talk to Anabel at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToAnabel3); + const MinaBattle = new DefeatTemporaryBattleQuest('Captain Mina UB', 'Defeat Trial Captain Mina at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(MinaBattle); + const talkToMina1 = new TalkToNPCQuest(RoadsideMotelMina, 'Talk to Captain Mina at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToMina1); + UltraBeastQuestLine.addQuest(createUltraBeastQuest('Xurkitree', ' Xurkitree has been spotted at Memorial Hill and Lush Jungle!', 2, ultraBeastReward)); + const talkToNanu1 = new TalkToNPCQuest(RoadsideMotelNanu1, 'Talk to Kahuna Nanu at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToNanu1); + UltraBeastQuestLine.addQuest(new MultipleQuestsQuest([ + createUltraBeastQuest('Kartana', undefined, 4), + createUltraBeastQuest('Celesteela', undefined, 2), + ], 'Rare Ultra Beasts have been spotted! Kartana at Malie Garden and Route 17, and Celesteela at Malie Garden and Haina Desert!').withCustomReward(ultraBeastReward)); + const talkToNanu2 = new TalkToNPCQuest(RoadsideMotelNanu2, 'Talk to Kahuna Nanu at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToNanu2); + const NanuBattle = new DefeatTemporaryBattleQuest('Kahuna Nanu UB', 'Defeat Kahuna Nanu at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(NanuBattle); + const talkToAnabel4 = new TalkToNPCQuest(RoadsideMotelAnabel4, 'Talk to Anabel at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToAnabel4); + UltraBeastQuestLine.addQuest(new MultipleQuestsQuest([ + createUltraBeastQuest('Blacephalon', undefined, 5), + createUltraBeastQuest('Stakataka', undefined, 5), + ], 'Rare Ultra Beasts have been spotted! Blacephalon and Stakataka are both at Poni Grove!').withCustomReward(ultraBeastReward)); + const talkToAnabel5 = new TalkToNPCQuest(RoadsideMotelAnabel5, 'Talk to Anabel at the Roadside Motel.'); + UltraBeastQuestLine.addQuest(talkToAnabel5); + const GuzzlordReward = () => { + Notifier.notify({ message: 'You caught all the Ultra Beasts!', type: NotificationConstants.NotificationOption.success }); + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Beastball, 50, false); + }; + const GuzzlordCatch = new CaptureSpecificPokemonQuest('Guzzlord').withDescription('Catch Guzzlord at Resolution Cave.').withCustomReward(GuzzlordReward); + UltraBeastQuestLine.addQuest(GuzzlordCatch); + App.game.quests.questLines().push(UltraBeastQuestLine); + } + // Available post-E4 + static createMeltanQuestLine() { + const meltanQuestLine = new QuestLine('Let\'s Go, Meltan!', 'I need your assistance in learning more about the newly discovered Pokémon that has really sent me and other Pokémon researchers into quite a tizzy.', new GymBadgeRequirement(BadgeEnums.Champion_Stamp), GameConstants.BulletinBoards.Alola, true); + // Multi-step #0: + const meltanMine10 = new MineItemsQuest(10, 0); + const meltanCatch50 = new CapturePokemonsQuest(50, 0); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanMine10, + meltanCatch50, + ], 'Step 1 of Let\'s Go, Meltan!')); + // Multi-step #1: + const meltanBreed50 = new HatchEggsQuest(50, 0); + const meltanObtain15kFP = new GainFarmPointsQuest(15000, 0); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanBreed50, + meltanObtain15kFP, + ], 'Step 2 of Let\'s Go, Meltan!')); + // Multi-step #2: + const meltanCatch5Ditto = new CaptureSpecificPokemonQuest('Ditto', 5, true).withDescription('Catch or hatch 5 Ditto.'); + const meltanDefeatMolayne10 = new DefeatGymQuest(10, 0, 'Elite Molayne'); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanCatch5Ditto, + meltanDefeatMolayne10, + ], 'Step 3 of Let\'s Go, Meltan!')); + // Multi-step #3: + const meltanCatch50Steel = new CapturePokemonTypesQuest(50, 0, PokemonType.Steel); + const meltanCatch50Electric = new CapturePokemonTypesQuest(50, 0, PokemonType.Electric); + const meltanDefeatOlivia10 = new DefeatGymQuest(10, 0, 'Elite Olivia'); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanCatch50Steel, + meltanCatch50Electric, + meltanDefeatOlivia10, + ], 'Step 4 of Let\'s Go, Meltan!')); + // Multi-step #4: + const meltanCatch5Grimer = new CaptureSpecificPokemonQuest('Alolan Grimer', 5, true).withDescription('Catch or hatch 5 Alolan Grimer.'); + const meltanCatch5Slugma = new CaptureSpecificPokemonQuest('Slugma', 5, true).withDescription('Catch or hatch 5 Slugma.'); + const meltanCatch10Gulpin = new CaptureSpecificPokemonQuest('Gulpin', 10, true).withDescription('Catch or hatch 10 Gulpin.'); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanCatch5Grimer, + meltanCatch5Slugma, + meltanCatch10Gulpin, + ], 'Step 5 of Let\'s Go, Meltan!')); + // Multi-step #5: + const meltanObtain10MB = new BuyPokeballsQuest(10, 0, GameConstants.Pokeball.Masterball); + meltanQuestLine.addQuest(new MultipleQuestsQuest([meltanObtain10MB], 'Step 6 of Let\'s Go, Meltan!')); + // Multi-step #6: + const meltanCatch10Magnemite = new CaptureSpecificPokemonQuest('Magnemite', 10, true).withDescription('Catch or hatch 10 Magnemite.'); + const meltanCatch10Exeggcute = new CaptureSpecificPokemonQuest('Exeggcute', 10, true).withDescription('Catch or hatch 10 Exeggcute.'); + const meltanDefeatAcerola10 = new DefeatGymQuest(10, 0, 'Elite Acerola'); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanCatch10Magnemite, + meltanCatch10Exeggcute, + meltanDefeatAcerola10, + ], 'Step 7 of Let\'s Go, Meltan!')); + // Multi-step #7: + const meltanCatch15Drowzee = new CaptureSpecificPokemonQuest('Drowzee', 15, true).withDescription('Catch or hatch 15 Drowzee.'); + const meltanCatch15Cubone = new CaptureSpecificPokemonQuest('Cubone', 15, true).withDescription('Catch or hatch 15 Cubone.'); + const meltanCatch15Scyther = new CaptureSpecificPokemonQuest('Scyther', 15, true).withDescription('Catch or hatch 15 Scyther.'); + const meltanDefeatKahili10 = new DefeatGymQuest(10, 0, 'Elite Kahili'); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanCatch15Drowzee, + meltanCatch15Cubone, + meltanCatch15Scyther, + meltanDefeatKahili10, + ], 'Step 8 of Let\'s Go, Meltan!')); + // Multi-step #8: + const meltanCatch20Kabuto = new CaptureSpecificPokemonQuest('Kabuto', 20, true).withDescription('Catch or hatch 20 Kabuto.'); + const meltanCatch20Omanyte = new CaptureSpecificPokemonQuest('Omanyte', 20, true).withDescription('Catch or hatch 20 Omanyte.'); // Praise Lord Helix + const meltanDig30 = new MineLayersQuest(30, 0); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanCatch20Kabuto, + meltanCatch20Omanyte, + meltanDig30, + ], 'Step 9 of Let\'s Go, Meltan!')); + // Multi-step #9: + const meltanCatch20Anorith = new CaptureSpecificPokemonQuest('Anorith', 20, true).withDescription('Catch or hatch 20 Anorith.'); + const meltanCatch20Lileep = new CaptureSpecificPokemonQuest('Lileep', 20, true).withDescription('Catch or hatch 20 Lileep.'); + const meltanCatch20Aerodactyl = new CaptureSpecificPokemonQuest('Aerodactyl', 20, true).withDescription('Catch or hatch 20 Aerodactyl.'); + const meltanDefeatHau15 = new DefeatGymQuest(15, 0, 'Champion Hau'); + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanCatch20Anorith, + meltanCatch20Lileep, + meltanCatch20Aerodactyl, + meltanDefeatHau15, + ], 'Step 10 of Let\'s Go, Meltan!').withCustomReward(() => App.game.quests.getQuestLine('Defeat Rainbow Rocket').beginQuest(0, undefined, true))); + // Multi-step #10 + const meltanCatch400Meltan = new CaptureSpecificPokemonQuest('Meltan', 400).withDescription('Catch 400 Meltan in Alola.'); + const meltanRainbowRocket = new DefeatTemporaryBattleQuest('Team Rainbow Leader Giovanni', 'Defeat Team Rainbow Rocket.'); + const meltanGetMelmetal = () => { + App.game.party.gainPokemonByName('Melmetal'); + Notifier.notify({ + title: meltanQuestLine.name, + message: 'You found Melmetal!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + meltanQuestLine.addQuest(new MultipleQuestsQuest([ + meltanCatch400Meltan, + meltanRainbowRocket, + ], 'Let\'s Go, Meltan!').withCustomReward(meltanGetMelmetal)); + App.game.quests.questLines().push(meltanQuestLine); + } + // Started after Meltan step 9 + static createRainbowRocketQuestLine() { + const rainbowQuestLine = new QuestLine('Defeat Rainbow Rocket', 'Team Rainbow Rocket has stolen the Meltan research! Defeat them to get it back!', new QuestLineStepCompletedRequirement('Let\'s Go, Meltan!', 9)); + const rainbowGrunts = new CustomQuest(2, 0, 'Defeat the Grunts guarding the Aether Foundation takeover.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Rainbow Rocket Grunt 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Rainbow Rocket Grunt 2')]()); + rainbowQuestLine.addQuest(rainbowGrunts); + const rainbowFaba = new DefeatTemporaryBattleQuest('Aether Branch Chief Faba', 'Defeat Aether Branch Chief Faba.'); + rainbowQuestLine.addQuest(rainbowFaba); + const rainbowArchie = new DefeatTemporaryBattleQuest('Team Aqua Leader Archie', 'Defeat Team Aqua Leader Archie.'); + const rainbowMaxie = new DefeatTemporaryBattleQuest('Team Magma Leader Maxie', 'Defeat Team Magma Leader Maxie.'); + rainbowQuestLine.addQuest(new MultipleQuestsQuest([ + rainbowArchie, + rainbowMaxie, + ], 'Defeat Archie and Maxie.')); + const rainbowCyrus = new DefeatTemporaryBattleQuest('Team Galactic Leader Cyrus', 'Defeat Team Galactic Leader Cyrus.'); + rainbowQuestLine.addQuest(rainbowCyrus); + const rainbowLysandre = new DefeatTemporaryBattleQuest('Team Flare Leader Lysandre', 'Defeat Team Flare Leader Lysandre.'); + rainbowQuestLine.addQuest(rainbowLysandre); + const rainbowGhetsis = new DefeatTemporaryBattleQuest('Team Plasma Leader Ghetsis', 'Defeat Team Plasma Leader Ghetsis.'); + rainbowQuestLine.addQuest(rainbowGhetsis); + const rainbowGiovanni = new DefeatTemporaryBattleQuest('Team Rainbow Leader Giovanni', 'Defeat Team Rainbow Leader Giovanni.'); + rainbowQuestLine.addQuest(rainbowGiovanni); + App.game.quests.questLines().push(rainbowQuestLine); + } + /* Magikarp Jump QuestLines */ + // Available post-E4 + static createMagikarpJumpQuestLine() { + const magikarpJumpQuestLine = new QuestLine('Magikarp Jump', 'Go to Hoppy Town and share their love for Magikarp.', new GymBadgeRequirement(BadgeEnums.Champion_Stamp), GameConstants.BulletinBoards.Alola); + const talkToMayor = new TalkToNPCQuest(MayorKarp, 'Use the subregion travel to talk to Mayor Karp in Hoppy Town.'); + magikarpJumpQuestLine.addQuest(talkToMayor); + App.game.quests.questLines().push(magikarpJumpQuestLine); + } + // Available upon clearing the Great League + static createDrSplashQuestLine() { + const drSplashQuestLine = new QuestLine('Dr. Splash\'s Research Project', 'Help Dr. Splash unlock the full potential of your Magikarps.', new GymBadgeRequirement(BadgeEnums.Great_League), GameConstants.BulletinBoards.Hoppy); + const talkToDrSplash1 = new TalkToNPCQuest(DrSplash1, 'Talk to Dr. Splash in Hoppy Town.'); + drSplashQuestLine.addQuest(talkToDrSplash1); + const farmOran = new HarvestBerriesQuest(129, 0, BerryType.Oran); + const farmSitrus = new HarvestBerriesQuest(129, 0, BerryType.Sitrus); + const farmPecha = new HarvestBerriesQuest(129, 0, BerryType.Pecha); + const farmRindo = new HarvestBerriesQuest(129, 0, BerryType.Rindo); + const farmWacan = new HarvestBerriesQuest(129, 0, BerryType.Wacan); + const farmLeppa = new HarvestBerriesQuest(129, 0, BerryType.Leppa); + const farmRawst = new HarvestBerriesQuest(129, 0, BerryType.Rawst); + const farmAspear = new HarvestBerriesQuest(129, 0, BerryType.Aspear); + const farmRazz = new HarvestBerriesQuest(129, 0, BerryType.Razz); + const farmBluk = new HarvestBerriesQuest(129, 0, BerryType.Bluk); + drSplashQuestLine.addQuest(new MultipleQuestsQuest([ + farmOran, + farmSitrus, + farmPecha, + farmRindo, + farmWacan, + farmLeppa, + farmRawst, + farmAspear, + farmRazz, + farmBluk, + ], 'Gather berries for Dr. Splash.')); + const talkToDrSplash2 = new TalkToNPCQuest(DrSplash2, 'Report back to Dr. Splash about your berry research.'); + drSplashQuestLine.addQuest(talkToDrSplash2); + const sandBag = new GainGemsQuest(5000, 0, PokemonType.Ground); + const jumpCounter = new CaptureSpecificPokemonQuest('Spoink', 10, true).withDescription('Catch or hatch 10 Spoink.'); + const timber = new GainGemsQuest(5000, 0, PokemonType.Grass); + const rockCruncher = new GainGemsQuest(5000, 0, PokemonType.Rock); + const powerGenerator = new CaptureSpecificPokemonQuest('Voltorb', 10, true).withDescription('Catch or hatch 10 Voltorb.'); + const pokeballSmash = new BuyPokeballsQuest(100000, 0, GameConstants.Pokeball.Pokeball); + const frostCruncher = new GainGemsQuest(5000, 0, PokemonType.Ice); + drSplashQuestLine.addQuest(new MultipleQuestsQuest([ + sandBag, + jumpCounter, + timber, + rockCruncher, + powerGenerator, + pokeballSmash, + frostCruncher, + ], 'Gather materials for Dr. Splash.')); + const talkToDrSplash3 = new TalkToNPCQuest(DrSplash3, 'Return to Dr. Splash in Hoppy Town with the training materials.'); + drSplashQuestLine.addQuest(talkToDrSplash3); + const pushDwebble = new CaptureSpecificPokemonQuest('Dwebble', 10, true).withDescription('Catch or hatch 10 Dwebble.'); + const pushBoldore = new CaptureSpecificPokemonQuest('Boldore', 10, true).withDescription('Catch or hatch 10 Boldore.'); + const pushForretress = new CaptureSpecificPokemonQuest('Forretress', 10, true).withDescription('Catch or hatch 10 Forretress.'); + const pushGolem = new CaptureSpecificPokemonQuest('Golem', 10, true).withDescription('Catch or hatch 10 Golem.'); + const pushSteelix = new CaptureSpecificPokemonQuest('Steelix', 10, true).withDescription('Catch or hatch 10 Steelix.'); + drSplashQuestLine.addQuest(new MultipleQuestsQuest([ + pushDwebble, + pushBoldore, + pushForretress, + pushGolem, + pushSteelix, + ], 'Catch Pokémon for Dr. Splash\'s training grounds.')); + const talkToDrSplash4 = new TalkToNPCQuest(DrSplash4, 'Return to Dr. Splash in Hoppy Town with the pushable Pokémon.'); + drSplashQuestLine.addQuest(talkToDrSplash4); + const tackleMachine = new CustomQuest(5000, 0, 'Defeat 5,000 Pokémon', App.game.statistics.totalPokemonDefeated); + drSplashQuestLine.addQuest(tackleMachine); + // Every step will reward a Biscuit escept last. + const karpStepReward = () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }; + drSplashQuestLine.quests().forEach(q => q.withCustomReward(karpStepReward)); + const SaucyBlueReward = () => { + App.game.party.gainPokemonByName('Magikarp Saucy Blue'); + Notifier.notify({ + title: drSplashQuestLine.name, + message: 'Dr. Splash gives you a Saucy Blue Magikarp!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + sound: NotificationConstants.NotificationSound.General.new_catch, + }); + }; + const talkToDrSplash5 = new TalkToNPCQuest(DrSplash5, 'Wrap up your research project by talking to Dr. Splash in Hoppy Town.').withCustomReward(SaucyBlueReward); + drSplashQuestLine.addQuest(talkToDrSplash5); + App.game.quests.questLines().push(drSplashQuestLine); + } + /* Galar QuestLines */ + // Started by defeating both Stow-on-Side gyms. + static createDarkestDayQuestLine() { + const darkestDayQuestLine = new QuestLine('The Darkest Day', 'Stop the return of the Darkest Day!'); + const talkToMural1 = new TalkToNPCQuest(AncientMural1, 'Check out Stow-on-Side\'s mural.'); + darkestDayQuestLine.addQuest(talkToMural1); // 0 + const clearBede3 = new DefeatTemporaryBattleQuest('Bede 3', 'Stop Bede from destroying the mural!'); + darkestDayQuestLine.addQuest(clearBede3); + const talkToMural2 = new TalkToNPCQuest(AncientMural2, ''); + const talkToSonia1 = new TalkToNPCQuest(StowonSideSonia, 'Talk to Sonia.'); + darkestDayQuestLine.addQuest(new MultipleQuestsQuest([ + talkToMural2, + talkToSonia1, + ], 'The mural was destroyed! See what you can learn by inspecting the ruins and speaking to the bystander.')); // Step 2 + const clearHop6 = new DefeatTemporaryBattleQuest('Hop 6', 'Defeat the next gym and catch up with Hop.'); + darkestDayQuestLine.addQuest(clearHop6); + const clearHop7 = new DefeatTemporaryBattleQuest('Hop 7', 'Continue your Gym Challenge and have a battle with Hop in Circhester.'); + darkestDayQuestLine.addQuest(clearHop7); + const talkToBath = new TalkToNPCQuest(HerosBath, ''); + const talkToHop1 = new TalkToNPCQuest(CirchesterHop, 'Talk to Hop.'); + const talkToSonia2 = new TalkToNPCQuest(CirchesterSonia, 'Talk to Sonia.'); + darkestDayQuestLine.addQuest(new MultipleQuestsQuest([ + talkToBath, + talkToHop1, + talkToSonia2, + ], 'Learn more about the heroes who stopped The Darkest Day.')); // Step 5 + const clearHammerlockeGym = new DefeatGymQuest(1, 0, 'Hammerlocke').withDescription('Continue your Gym Challenge and gain entry to the Champion Cup.'); + darkestDayQuestLine.addQuest(clearHammerlockeGym); + const clearTrainerMarnie = new DefeatGymQuest(1, 0, 'Elite Trainer Marnie').withDescription('Defeat Marnie at Wyndon Stadium to reach the quarter-finals of the Champion Cup.'); + darkestDayQuestLine.addQuest(clearTrainerMarnie); + const clearGymLeaderBede = new DefeatGymQuest(1, 0, 'Elite Gym Leader Bede').withDescription('Defeat Bede to reach the semi-finals of the Champion Cup.'); + darkestDayQuestLine.addQuest(clearGymLeaderBede); + const clearTrainerHop = new DefeatGymQuest(1, 0, 'Elite Trainer Hop').withDescription('Defeat Hop to reach the final of the Champion Cup!'); + darkestDayQuestLine.addQuest(clearTrainerHop); + const clearRoseTower = new DefeatDungeonQuest(1, 0, 'Rose Tower').withDescription('Champion Leon was seen heading to Rose Tower. Ascend Rose Tower so you can find him.'); + darkestDayQuestLine.addQuest(clearRoseTower); + const talktoRoseBroadcast = new TalkToNPCQuest(RoseBroadcast, 'The Championship Match is about to start, but Chairman Rose is broadcasting something to the Stadium? Listen to the broadcast.'); + darkestDayQuestLine.addQuest(talktoRoseBroadcast); + const talktoHop2 = new TalkToNPCQuest(WyndonHop, 'Talk to Hop in Wyndon Stadium.'); + darkestDayQuestLine.addQuest(talktoHop2); + const clearSlumberingWeald = new DefeatDungeonQuest(1, 0, 'Slumbering Weald Shrine').withDescription('Chairman Rose has interrupted your fight with Leon and brought about the Darkest Day. Clear Slumbering Weald Shrine.'); + darkestDayQuestLine.addQuest(clearSlumberingWeald); + const talktoHop3 = new TalkToNPCQuest(SlumberingHop1, 'Talk to Hop in Slumbering Weald Shrine.'); + darkestDayQuestLine.addQuest(talktoHop3); + const clearEnergyPlant = new DefeatDungeonQuest(1, 0, 'Energy Plant').withDescription('Unfortunately, all you found at the Slumbering Weald was a rusty sword and shield. Go to the Energy Plant in Hammerlocke to put an end to Chairman Rose\'s plans!'); + darkestDayQuestLine.addQuest(clearEnergyPlant); + const talktoRose = new TalkToNPCQuest(EnergyPlantRose, 'Talk to Chairman Rose in Energy Plant'); + darkestDayQuestLine.addQuest(talktoRose); + const clearEternatus = new DefeatTemporaryBattleQuest('Eternatus', 'Leon failed to capture Eternatus. Defeat it before it can cause any more damage!'); + darkestDayQuestLine.addQuest(clearEternatus); + const TheDarkestDayReward = () => { + App.game.pokeballs.gainPokeballs(GameConstants.Pokeball.Masterball, 1, false); + Notifier.notify({ + title: darkestDayQuestLine.name, + message: 'You found a Master Ball!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }; + const clearTheDarkestDay = new DefeatTemporaryBattleQuest('The Darkest Day', 'Eternatus has ascended to its Eternamax form! Catch it to put an end to the Darkest Day!').withCustomReward(TheDarkestDayReward); + darkestDayQuestLine.addQuest(clearTheDarkestDay); + const talktoLeon = new TalkToNPCQuest(Leon, 'After all those interruptions, it\'s finally time for the Championship match! Talk to Leon at Wyndon Stadium.'); + darkestDayQuestLine.addQuest(talktoLeon); + const clearLeon = new DefeatGymQuest(1, 0, 'Champion Leon').withDescription('Defeat Leon to become the Champion of Galar!'); + darkestDayQuestLine.addQuest(clearLeon); + App.game.quests.questLines().push(darkestDayQuestLine); + } + // Available post-E4 + static createSwordShieldQuestLine() { + const swordShieldQuestLine = new QuestLine('Sword and Shield', 'Stop the weapons from making a mess.', new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion), GameConstants.BulletinBoards.Galar); + const talktoHop4 = new TalkToNPCQuest(SlumberingHop2, 'Talk to Hop in the Slumbering Weald.'); + swordShieldQuestLine.addQuest(talktoHop4); + const clearHop8 = new DefeatTemporaryBattleQuest('Hop 8', 'Hop wants to fight you one more time at Slumbering Weald Shrine.'); + swordShieldQuestLine.addQuest(clearHop8); + const talktoSordwardShielbert1 = new TalkToNPCQuest(SordwardShielbert1, 'Talk to Sordward & Shielbert in the Slumbering Weald.'); + swordShieldQuestLine.addQuest(talktoSordwardShielbert1); + const clearSordward1 = new DefeatTemporaryBattleQuest('Sordward 1', 'Defeat Sordward.'); + const clearShielbert1 = new DefeatTemporaryBattleQuest('Shielbert 1', 'Defeat Shielbert.'); + swordShieldQuestLine.addQuest(new MultipleQuestsQuest([ + clearSordward1, + clearShielbert1, + ], 'A pair with weird hair has taken the Rusted Sword and Rusted Shield. Defeat them to take them back.')); + const clearRampagingTsareena = new DefeatTemporaryBattleQuest('Rampaging Tsareena', 'Sordward and Shielbert are forcing Pokémon to rampage in Galar\'s Stadiums. First is a Tsareena in Turffield Stadium. Defeat it.'); + swordShieldQuestLine.addQuest(clearRampagingTsareena); + const clearRampagingGyarados = new DefeatTemporaryBattleQuest('Rampaging Gyarados', 'Sordward and Shielbert have forced a Gyarados to rampage in Hulbury Stadium. Defeat it as well.'); + swordShieldQuestLine.addQuest(clearRampagingGyarados); + const clearRampagingTorkoal = new DefeatTemporaryBattleQuest('Rampaging Torkoal', 'Sordward and Shielbert have forced a Torkoal to rampage in Motostoke Stadium. Defeat it as well.'); + swordShieldQuestLine.addQuest(clearRampagingTorkoal); + const talktoSordwardShielbert2 = new TalkToNPCQuest(SordwardShielbert2, 'Talk to Sordward & Shielbert in Wedgehurst.'); + swordShieldQuestLine.addQuest(talktoSordwardShielbert2); + const clearSordwardandShielbert = new DefeatTemporaryBattleQuest('Sordward & Shielbert', 'Sordward and Shielbert are trying to steal the Wishing Stars at Professor Magnolia\'s Lab in Wedgehurst. Stop them.'); + swordShieldQuestLine.addQuest(clearSordwardandShielbert); + const clearRampagingConkeldurr = new DefeatTemporaryBattleQuest('Rampaging Conkeldurr', 'Defeat Conkeldurr.'); + const clearRampagingDusknoir = new DefeatTemporaryBattleQuest('Rampaging Dusknoir', 'Defeat Dusknoir.'); + swordShieldQuestLine.addQuest(new MultipleQuestsQuest([ + clearRampagingConkeldurr, + clearRampagingDusknoir, + ], 'Sordward and Shielbert have forced a Conkeldurr and a Dusknoir to rampage in Stow-on-Side Stadium. Defeat them both.')); + const clearGymLeaderBede2 = new DefeatTemporaryBattleQuest('Gym Leader Bede', 'There were rampaging Pokémon at Ballonlea Stadium, but Bede already defeated them. There are no more rampaging Pokémon for now, and he wants to battle.'); + swordShieldQuestLine.addQuest(clearGymLeaderBede2); + const clearRampagingGigalith = new DefeatTemporaryBattleQuest('Rampaging Gigalith', 'Defeat Gigalith.'); + const clearRampagingFroslass = new DefeatTemporaryBattleQuest('Rampaging Froslass', 'Defeat Froslass.'); + swordShieldQuestLine.addQuest(new MultipleQuestsQuest([ + clearRampagingGigalith, + clearRampagingFroslass, + ], 'Sordward and Shielbert have forced a Gigalith and a Froslass to rampage in Circhester Stadium. Defeat them both')); + const clearGymLeaderMarnie = new DefeatTemporaryBattleQuest('Gym Leader Marnie', 'There are no more rampaging Pokémon for now and Marnie wants to battle you in Spikemuth.'); + swordShieldQuestLine.addQuest(clearGymLeaderMarnie); + const clearRampagingHaxorus = new DefeatTemporaryBattleQuest('Rampaging Haxorus', 'Sordward and Shielbert have forced a Haxorus to rampage in Hammerlocke Stadium. Hopefully this is the last one.'); + swordShieldQuestLine.addQuest(clearRampagingHaxorus); + const talktoSordwardShielbert3 = new TalkToNPCQuest(SordwardShielbert3, 'Talk to Sordward & Shielbert in the Energy Plant.'); + swordShieldQuestLine.addQuest(talktoSordwardShielbert3); + const clearSordward2 = new DefeatTemporaryBattleQuest('Sordward 2', 'Defeat Sordward.'); + const clearShielbert2 = new DefeatTemporaryBattleQuest('Shielbert 2', 'Defeat Shielbert.'); + swordShieldQuestLine.addQuest(new MultipleQuestsQuest([ + clearSordward2, + clearShielbert2, + ], 'Sordward and Shielbert are trying to use the Rusted Sword and Shield to make Zacian and Zamazenta go on a rampage in Energy Plant. Stop them.')); + const talktoSordwardShielbert4 = new TalkToNPCQuest(SordwardShielbert4, 'Talk to Sordward & Shielbert in the Energy Plant.'); + swordShieldQuestLine.addQuest(talktoSordwardShielbert4); + const clearRampagingZacian = new DefeatTemporaryBattleQuest('Rampaging Zacian', 'Defeat Zacian.'); + const clearRampagingZamazenta = new DefeatTemporaryBattleQuest('Rampaging Zamazenta', 'Defeat Zamazenta.'); + swordShieldQuestLine.addQuest(new MultipleQuestsQuest([ + clearRampagingZacian, + clearRampagingZamazenta, + ], 'Zacian and Zamazenta are rampaging in Energy Plant. Defeat them!')); + const talktoPiers = new TalkToNPCQuest(Piers, 'Talk to Piers in the Energy Plant.'); + swordShieldQuestLine.addQuest(talktoPiers); + const catchZacian = new CaptureSpecificPokemonQuest('Zacian (Battle Hero)', 1, true).withDescription('Catch Zacian.'); + const catchZamazenta = new CaptureSpecificPokemonQuest('Zamazenta (Battle Hero)', 1, true).withDescription('Catch Zamazenta.'); + swordShieldQuestLine.addQuest(new MultipleQuestsQuest([ + catchZacian, + catchZamazenta, + ], 'Now that they have calmed down, Zacian and Zamazenta seem to be willing to let you try to catch them!')); + App.game.quests.questLines().push(swordShieldQuestLine); + } + // Available post-E4 + static createDojoArmorQuestLine() { + const dojoArmorQuestLine = new QuestLine('The Dojo\'s Armor', 'Obtain the Secret Armor of the Master Dojo.', new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion), GameConstants.BulletinBoards.Armor); + const talktoMustard1 = new TalkToNPCQuest(Mustard1, 'Talk to Mustard at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard1); + const clearMustard = new DefeatTemporaryBattleQuest('Mustard', 'Mustard wants to test your ability at the Master Dojo. Defeat him.'); + dojoArmorQuestLine.addQuest(clearMustard); + const talktoMustard2 = new TalkToNPCQuest(Mustard2, 'Talk to Mustard at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard2); + const catch6GalarianSlowpoke = new CaptureSpecificPokemonQuest('Galarian Slowpoke', 6); + dojoArmorQuestLine.addQuest(catch6GalarianSlowpoke); + const talktoMustard3 = new TalkToNPCQuest(Mustard3, 'Talk to Mustard at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard3); + const talktoMustard4 = new TalkToNPCQuest(Mustard4, 'It seems Mustard still wants to talk to you? Talk to Mustard again at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard4); + const talktoKlara1 = new TalkToNPCQuest(Klara1, 'Talk to Klara.'); + const talktoAvery1 = new TalkToNPCQuest(Avery1, 'Talk to Avery.'); + dojoArmorQuestLine.addQuest(new MultipleQuestsQuest([ + talktoKlara1, + talktoAvery1, + ], 'Talk to Klara and Avery in Warm-Up Tunnel.')); + const clearKlara2 = new DefeatTemporaryBattleQuest('Klara 2', 'Defeat Klara.'); + const clearAvery2 = new DefeatTemporaryBattleQuest('Avery 2', 'Defeat Avery.'); + dojoArmorQuestLine.addQuest(new MultipleQuestsQuest([ + clearKlara2, + clearAvery2, + ], 'You, Klara and Avery have happened upon the same Max Mushroom in Warm-Up Tunnel. Defeat them both to win it.').withCustomReward(() => ItemList.Max_Mushroom_IoA.gain(1))); + const talktoMustard5 = new TalkToNPCQuest(Mustard5, 'Talk to Mustard at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard5); + const talktoKlara2 = new TalkToNPCQuest(Klara2, 'Talk to Klara.'); + const talktoAvery2 = new TalkToNPCQuest(Avery2, 'Talk to Avery.'); + dojoArmorQuestLine.addQuest(new MultipleQuestsQuest([ + talktoKlara2, + talktoAvery2, + ], 'Talk to Klara and Avery in the Master Dojo.')); + const clearKlara3 = new DefeatTemporaryBattleQuest('Klara 3', 'Defeat Klara.'); + const clearAvery3 = new DefeatTemporaryBattleQuest('Avery 3', 'Defeat Avery'); + dojoArmorQuestLine.addQuest(new MultipleQuestsQuest([ + clearKlara3, + clearAvery3, + ], 'For the final trial, you must defeat both Klara and Avery on the Master Dojo Battle Court.')); + const talktoMustard6 = new TalkToNPCQuest(Mustard6, 'Talk to Mustard at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard6); + const catchKubfu = new CaptureSpecificPokemonQuest('Kubfu'); + dojoArmorQuestLine.addQuest(catchKubfu); + const talktoMustard7 = new TalkToNPCQuest(Mustard7, 'Talk to Mustard at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard7); + const defeatDark = new CustomQuest(500, 0, 'Defeat 500 Dark-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Dark)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + const defeatWater = new CustomQuest(500, 0, 'Defeat 500 Water-type Pokémon.', () => { + return pokemonMap.filter(p => p.type.includes(PokemonType.Water)).map(p => App.game.statistics.pokemonDefeated[p.id]()).reduce((a, b) => a + b, 0); + }); + dojoArmorQuestLine.addQuest(new MultipleQuestsQuest([ + defeatDark, + defeatWater, + ], 'Train Kubfu by defeating Dark and Water-type Pokémon.')); + const talktoMustard8 = new TalkToNPCQuest(Mustard8, 'Talk to Mustard at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard8); + const catchDark = new CapturePokemonTypesQuest(250, 0, PokemonType.Dark); + const catchWater = new CapturePokemonTypesQuest(250, 0, PokemonType.Water); + dojoArmorQuestLine.addQuest(new MultipleQuestsQuest([ + catchDark, + catchWater, + ], 'Train Kubfu more by catching or hatching Dark and Water-type Pokémon.')); + const talktoMustard9 = new TalkToNPCQuest(Mustard9, 'Talk to Mustard at the Master Dojo.'); + dojoArmorQuestLine.addQuest(talktoMustard9); + const clearTowerofDarkness = new DefeatDungeonQuest(1, 0, 'Tower of Darkness').withDescription('Defeat Tower of Darkness.'); + const clearTowerofWaters = new DefeatDungeonQuest(1, 0, 'Tower of Waters').withDescription('Defeat Tower of Waters'); + dojoArmorQuestLine.addQuest(new MultipleQuestsQuest([ + clearTowerofDarkness, + clearTowerofWaters, + ], 'Complete Kubfu\'s training in the Tower of Darkness and the Tower of Waters so it can evolve!')); + const talktoMustard10 = new TalkToNPCQuest(Mustard10, 'Talk to Mustard at one of the Towers of Two Fists.'); + dojoArmorQuestLine.addQuest(talktoMustard10); + App.game.quests.questLines().push(dojoArmorQuestLine); + } + // Available after defeating Ash Ketchum Alola + static createJungleSecretsQuestLine() { + const jungleSecretsQuestLine = new QuestLine('Secrets of the Jungle', 'Discover the secrets of the jungle.', new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion), new TemporaryBattleRequirement('Ash Ketchum Alola')]), GameConstants.BulletinBoards.Armor); + const talktoJungleAsh1 = new TalkToNPCQuest(JungleAsh1, 'Ash Ketchum wants to talk to you at the Master Dojo.'); + jungleSecretsQuestLine.addQuest(talktoJungleAsh1); + const talktoJungleKoko1 = new TalkToNPCQuest(JungleKoko1, 'Talk to Ash Ketchum\'s friend, Koko, in Glimwood Tangle.'); + jungleSecretsQuestLine.addQuest(talktoJungleKoko1); + const catchZarude = new CaptureSpecificPokemonQuest('Zarude').withDescription('Catch the missing Zarude roaming around the Isle of Armor.'); + jungleSecretsQuestLine.addQuest(catchZarude); + const talktoJungleKoko2 = new TalkToNPCQuest(JungleKoko2, 'Take Zarude back to Koko in Glimwood Tangle.'); + jungleSecretsQuestLine.addQuest(talktoJungleKoko2); + const clearZarudeTribe1 = new DefeatTemporaryBattleQuest('Zarude Tribe 1', 'A group of Zarude are attacking you. Defeat them.'); + jungleSecretsQuestLine.addQuest(clearZarudeTribe1); + const talktoJungleKoko3 = new TalkToNPCQuest(JungleKoko3, 'Talk to Koko in Glimwood Tangle.'); + jungleSecretsQuestLine.addQuest(talktoJungleKoko3); + const clearZarudeTribes = new CustomQuest(2, 0, 'Another two groups of Zarude are attacking you. Defeat them as well.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Zarude Tribe 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Zarude Tribe 3')]()); + jungleSecretsQuestLine.addQuest(clearZarudeTribes); + const talktoJungleKoko4 = new TalkToNPCQuest(JungleKoko4, 'Talk to Koko in Glimwood Tangle.'); + jungleSecretsQuestLine.addQuest(talktoJungleKoko4); + const talktoJungleAsh2 = new TalkToNPCQuest(JungleAsh2, 'Talk to Ash Ketchum at the Master Dojo.'); + jungleSecretsQuestLine.addQuest(talktoJungleAsh2); + const clearGalarAsh = new DefeatTemporaryBattleQuest('Ash Ketchum Galar', 'Defeat Ash Ketchum outside the Master Dojo.'); + jungleSecretsQuestLine.addQuest(clearGalarAsh); + const talktoJungleKoko5 = new TalkToNPCQuest(JungleKoko5, 'Talk to Koko in Glimwood Tangle.'); + jungleSecretsQuestLine.addQuest(talktoJungleKoko5); + const clearZarudeDada = new DefeatTemporaryBattleQuest('Zarude (Dada)', 'A final Zarude wants to challenge you. Defeat Zarude (Dada).'); + jungleSecretsQuestLine.addQuest(clearZarudeDada); + const talktoJungleAsh3 = new TalkToNPCQuest(JungleAsh3, 'Talk to Ash Ketchum in Glimwood Tangle.'); + jungleSecretsQuestLine.addQuest(talktoJungleAsh3); + const defeatFloweringCelebi = new DefeatTemporaryBattleQuest('Flowering Celebi', 'Play with Flowering Celebi.'); + jungleSecretsQuestLine.addQuest(defeatFloweringCelebi); + const talktoJungleKoko6 = new TalkToNPCQuest(JungleKoko6, 'Talk to Koko in Glimwood Tangle.'); + jungleSecretsQuestLine.addQuest(talktoJungleKoko6); + App.game.quests.questLines().push(jungleSecretsQuestLine); + } + // Available post-E4 + static createGalarCrownQuestLine() { + const galarCrownQuestLine = new QuestLine('The Crown of Galar', 'Help the ancient king of Galar, Calyrex, return to its former glory.', new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion), GameConstants.BulletinBoards.Crown); + const talktoCrownPeony1 = new TalkToNPCQuest(CrownPeony1, 'Talk to Peony to find out about the ancient king of Galar.'); + galarCrownQuestLine.addQuest(talktoCrownPeony1); + const clearCalyrex = new DefeatTemporaryBattleQuest('Calyrex', 'A mysterious Pokémon has appeared and challenged you to a battle.'); + galarCrownQuestLine.addQuest(clearCalyrex); + const talktoCalyrex1 = new TalkToNPCQuest(Calyrex1, 'The Pokémon you just fought has possessed Peony. Talk to it.'); + galarCrownQuestLine.addQuest(talktoCalyrex1); + const oldCemetery = new DefeatPokemonsQuest(50, 0, 49, GameConstants.Region.galar, 'Old Cemetery'); + const snowslideSlope = new DefeatPokemonsQuest(50, 0, 54, GameConstants.Region.galar, 'Snowslide Slope'); + galarCrownQuestLine.addQuest(new MultipleQuestsQuest([ + oldCemetery, + snowslideSlope, + ], 'Calyrex is going to Old Cemetery and Snowslide Slope to grow a Shaderoot Carrot and an Iceroot Carrot. Protect it from wild Pokémon so it can concentrate.') + .withCustomReward(() => { + ItemList.Shaderoot_Carrot_Calyrex.gain(1); + ItemList.Iceroot_Carrot_Calyrex.gain(1); + })); + const talktoCalyrex2 = new TalkToNPCQuest(Calyrex2, 'After growing both carrots, Calyrex has returned to Freezington. Talk to it.'); + galarCrownQuestLine.addQuest(talktoCalyrex2); + const clearSpectrier = new DefeatTemporaryBattleQuest('Spectrier', 'Defeat Spectrier.'); + const clearGlastrier = new DefeatTemporaryBattleQuest('Glastrier', 'Defeat Glastrier.'); + galarCrownQuestLine.addQuest(new MultipleQuestsQuest([ + clearSpectrier, + clearGlastrier, + ], 'Fight Calyrex\'s steeds to get them out of Freezington!')); + const talktoCalyrex3 = new TalkToNPCQuest(Calyrex3, 'Talk to Calyrex again.'); + galarCrownQuestLine.addQuest(talktoCalyrex3); + const catchSpectrier = new CaptureSpecificPokemonQuest('Spectrier'); + const catchGlastrier = new CaptureSpecificPokemonQuest('Glastrier'); + galarCrownQuestLine.addQuest(new MultipleQuestsQuest([ + catchSpectrier, + catchGlastrier, + ], 'Spectrier and Glastrier are now roaming the Crown Tundra. Catch them when the opportunity arises!')); + const UnityReward = () => { + App.game.keyItems.gainKeyItem(KeyItemType.Reins_of_unity, true); + $('#npcModal').one('hidden.bs.modal', () => { + KeyItemController.showGainModal(KeyItemType.Reins_of_unity); + }); + }; + const talktoCalyrex4 = new TalkToNPCQuest(Calyrex4, 'Now that you have captured both of its steeds, talk to Calyrex at the Crown Shrine.').withCustomReward(UnityReward); + galarCrownQuestLine.addQuest(talktoCalyrex4); + const catchCalyrex = new CaptureSpecificPokemonQuest('Calyrex').withDescription('Now that you have found and caught Glastrier and Spectrier, Calyrex wants to challenge you at Crown Shrine. Catch it!'); + galarCrownQuestLine.addQuest(catchCalyrex); + const talktoCrownPeony2 = new TalkToNPCQuest(CrownPeony2, 'Now that you have captured Calyrex, go report back to Peony!'); + galarCrownQuestLine.addQuest(talktoCrownPeony2); + App.game.quests.questLines().push(galarCrownQuestLine); + } + /* Crown QuestLines */ + // Available post-E4 + static createDynaTreeBirdsQuestLine() { + const dynaTreeBirdsQuestLine = new QuestLine('The Birds of the Dyna Tree', 'Find the Legendary birds of the Dyna Tree.', new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion), GameConstants.BulletinBoards.Crown); + const talktoBirdPeony1 = new TalkToNPCQuest(BirdPeony1, 'Talk to Peony to find out about some legendary bird sightings.'); + dynaTreeBirdsQuestLine.addQuest(talktoBirdPeony1); + const clearDynaTreeHill = new DefeatDungeonQuest(1, 0, 'Dyna Tree Hill').withDescription('Some unknown bird Pokémon have been sighted near Dyna Tree Hill in Ballimere Lake. Explore the area to see for yourself.'); + dynaTreeBirdsQuestLine.addQuest(clearDynaTreeHill); + const clearDynaTreeBirds = new DefeatTemporaryBattleQuest('Dyna Tree Birds', 'You witnessed 3 powerful looking bird pokemon resembling Articuno, Zapdos, and Moltres fighting over the fruit of the Dyna Tree. Upon noticing you, they attack!'); + dynaTreeBirdsQuestLine.addQuest(clearDynaTreeBirds); + const talktoBirdPeony2 = new TalkToNPCQuest(BirdPeony2, 'Tell Peony about your encounter with the birds resembling Articuno, Zapdos, and Moltres.'); + dynaTreeBirdsQuestLine.addQuest(talktoBirdPeony2); + const chaseGalarianArticuno = new CustomQuest(3, 0, 'Search for Galarian Articuno in the Crown Tundra.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Articuno 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Articuno 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Articuno 3')]()); + const chaseGalarianZapdos = new CustomQuest(3, 0, 'Search for Galarian Zapdos in the Wild Area of Southern Galar.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Zapdos 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Zapdos 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Zapdos 3')]()); + const chaseGalarianMoltres = new CustomQuest(3, 0, 'Search for Galarian Moltres in the Isle of Armor.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Moltres 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Moltres 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Galarian Moltres 3')]()); + dynaTreeBirdsQuestLine.addQuest(new MultipleQuestsQuest([ + chaseGalarianArticuno, + chaseGalarianZapdos, + chaseGalarianMoltres, + ], 'Galarian Articuno, Zapdos, and Moltres have fled to the Crown Tundra, Southern Galar, and the Isle of Armor respectively. Search for them.')); + const talktoBirdPeony3 = new TalkToNPCQuest(BirdPeony3, 'You defeated Galarian Articuno, Zapdos, and Moltres multiple times each. Ask Peony what to do next.'); + dynaTreeBirdsQuestLine.addQuest(talktoBirdPeony3); + const catchGalarianArticuno = new CaptureSpecificPokemonQuest('Galarian Articuno'); + const catchGalarianZapdos = new CaptureSpecificPokemonQuest('Galarian Zapdos'); + const catchGalarianMoltres = new CaptureSpecificPokemonQuest('Galarian Moltres'); + dynaTreeBirdsQuestLine.addQuest(new MultipleQuestsQuest([ + catchGalarianArticuno, + catchGalarianZapdos, + catchGalarianMoltres, + ], 'Galarian Articuno, Zapdos, and Moltres are now roaming in the Crown Tundra, Southern Galar, and the Isle of Armor respectively. Catch them when the opportunity arises!')); + const talktoBirdPeony4 = new TalkToNPCQuest(BirdPeony4, 'Now that you have captured Galarian Articuno, Zapdos, and Moltres, go report back to Peony!'); + dynaTreeBirdsQuestLine.addQuest(talktoBirdPeony4); + App.game.quests.questLines().push(dynaTreeBirdsQuestLine); + } + // Available post-E4 + static createAncientGolemsQuestLine() { + const ancientGolemsQuestLine = new QuestLine('The Ancient Golems', 'Discover the ancient Golems in the ruins of the Crown Tundra.', new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion), GameConstants.BulletinBoards.Crown); + const talktoGolemPeony1 = new TalkToNPCQuest(GolemPeony1, 'Talk to Peony to find out about some ancient ruins.'); + ancientGolemsQuestLine.addQuest(talktoGolemPeony1); + const threePointPass = new DefeatPokemonsQuest(100, 0, 52, GameConstants.Region.galar, 'Peony told you of a peculiar ruin located at Three-Point Pass. Explore the area to find it.'); + ancientGolemsQuestLine.addQuest(threePointPass); + const talktoGolemPeony2 = new TalkToNPCQuest(GolemPeony2, 'The ruins were locked, go report back to Peony.'); + ancientGolemsQuestLine.addQuest(talktoGolemPeony2); + const clearRockPeakRuins = new DefeatDungeonQuest(10, 0, 'Rock Peak Ruins').withDescription('Clear Rock Peak Ruins 10 times.'); + const clearIcebergRuins = new DefeatDungeonQuest(10, 0, 'Iceberg Ruins').withDescription('Clear Iceberg Ruins 10 times.'); + const clearIronRuins = new DefeatDungeonQuest(10, 0, 'Iron Ruins').withDescription('Clear Iron Ruins 10 times.'); + ancientGolemsQuestLine.addQuest(new MultipleQuestsQuest([ + clearRockPeakRuins, + clearIcebergRuins, + clearIronRuins, + ], 'Clear Rock Peak Ruins, Iceberg Ruins, and Iron Ruins 10 times each.')); + const talktoGolemPeony3 = new TalkToNPCQuest(GolemPeony3, 'The ruins are still locked, report to Peony.'); + ancientGolemsQuestLine.addQuest(talktoGolemPeony3); + const catchRegirock = new CaptureSpecificPokemonQuest('Regirock'); + const catchRegice = new CaptureSpecificPokemonQuest('Regice'); + const catchRegisteel = new CaptureSpecificPokemonQuest('Registeel'); + ancientGolemsQuestLine.addQuest(new MultipleQuestsQuest([ + catchRegirock, + catchRegice, + catchRegisteel, + ], 'Catch Regirock, Regice, and Registeel in the Rock Peak Ruins, Iceberg Ruins, and Iron Ruins respectively.')); + const talktoGolemPeony4 = new TalkToNPCQuest(GolemPeony4, 'You have captured Regirock, Regice, and Registeel, now go report back to Peony.'); + ancientGolemsQuestLine.addQuest(talktoGolemPeony4); + const clearRegigigas = new DefeatTemporaryBattleQuest('Regigigas', 'Defeat Regigigas at Giant\'s Bed!'); + const catchRegigigas = new CaptureSpecificPokemonQuest('Regigigas'); + ancientGolemsQuestLine.addQuest(new MultipleQuestsQuest([ + clearRegigigas, + catchRegigigas, + ], 'After you caught three of the legendary golems it created, Regigigas appeared in Giant\'s Bed. Defeat and catch it!')); + const talktoGolemPeony5 = new TalkToNPCQuest(GolemPeony5, 'You have captured Regigigas, now go report back to Peony.'); + ancientGolemsQuestLine.addQuest(talktoGolemPeony5); + const catchRegieleki = new CaptureSpecificPokemonQuest('Regieleki'); + const catchRegidrago = new CaptureSpecificPokemonQuest('Regidrago'); + ancientGolemsQuestLine.addQuest(new MultipleQuestsQuest([ + catchRegieleki, + catchRegidrago, + ], 'Now that it has finally unlocked, catch Regieleki and Regidrago in the Split-Decision Ruins!')); + const talktoGolemPeony6 = new TalkToNPCQuest(GolemPeony6, 'You finally captured Regieleki and Regidrago. Go report back to Peony!'); + ancientGolemsQuestLine.addQuest(talktoGolemPeony6); + App.game.quests.questLines().push(ancientGolemsQuestLine); + } + static createGigantamaxQuestLine() { + const gigantamaxQuestLine = new QuestLine('The Lair of Giants', 'Explore the Max Lair and discover the Gigantamax Pokémon.', new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion), GameConstants.BulletinBoards.Crown); + const talktoPeonia1 = new TalkToNPCQuest(Peonia1, 'Peony\'s daughter, Peonia, wants to talk to you in Freezington.'); + gigantamaxQuestLine.addQuest(talktoPeonia1); + const clearMaxLair = new DefeatDungeonQuest(1, 0, 'Max Lair').withDescription('Clear Max Lair to encounter a Gigantamax Pokémon.'); + gigantamaxQuestLine.addQuest(clearMaxLair); + const talktoPeonia2 = new TalkToNPCQuest(Peonia2, 'Report back to Peonia in Max Lair.'); + gigantamaxQuestLine.addQuest(talktoPeonia2); + gigantamaxQuestLine.addQuest(new CustomQuest(1, undefined, 'Obtain 1 Wishing Piece', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(2, undefined, 'Obtain 2 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(4, undefined, 'Obtain 4 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(6, undefined, 'Obtain 6 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(9, undefined, 'Obtain 9 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(12, undefined, 'Obtain 12 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(16, undefined, 'Obtain 16 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(20, undefined, 'Obtain 20 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(25, undefined, 'Obtain 25 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(30, undefined, 'Obtain 30 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(36, undefined, 'Obtain 36 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(42, undefined, 'Obtain 42 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(49, undefined, 'Obtain 49 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(56, undefined, 'Obtain 56 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(64, undefined, 'Obtain 64 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(72, undefined, 'Obtain 72 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(81, undefined, 'Obtain 81 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(90, undefined, 'Obtain 90 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(100, undefined, 'Obtain 100 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(110, undefined, 'Obtain 110 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(121, undefined, 'Obtain 121 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(132, undefined, 'Obtain 132 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(144, undefined, 'Obtain 144 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(156, undefined, 'Obtain 156 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(169, undefined, 'Obtain 169 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(182, undefined, 'Obtain 182 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(196, undefined, 'Obtain 196 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(210, undefined, 'Obtain 210 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(225, undefined, 'Obtain 225 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + gigantamaxQuestLine.addQuest(new CustomQuest(240, undefined, 'Obtain 240 Wishing Pieces', player.itemList.Wishing_Piece).withInitialValue(0)); + const talktoPeonia3 = new TalkToNPCQuest(Peonia3, 'You\'ve finally obtained enough Wishing Pieces to attract every Gigantamax Pokémon to the Max Lair! Tell Peonia about your achievement in Max Lair.'); + gigantamaxQuestLine.addQuest(talktoPeonia3); + const talktoGigantamaxLeon1 = new TalkToNPCQuest(GigantamaxLeon1, 'It seems something is going on in Hammerlocke! Talk to Leon in Energy Plant.'); + gigantamaxQuestLine.addQuest(talktoGigantamaxLeon1); + const clearEternamaxEternatus = new DefeatTemporaryBattleQuest('Eternamax Eternatus', 'Eternamax Eternatus has appeared in the Energy Plant yet again! Bring it down once more.'); + gigantamaxQuestLine.addQuest(clearEternamaxEternatus); + const talktoGigantamaxLeon2 = new TalkToNPCQuest(GigantamaxLeon2, 'You defeated Eternamax Eternatus once more. Talk to Leon in Energy Plant.'); + gigantamaxQuestLine.addQuest(talktoGigantamaxLeon2); + const talktoPeonia4 = new TalkToNPCQuest(Peonia4, 'Go back to the Max Lair to tell Peonia what happened.'); + gigantamaxQuestLine.addQuest(talktoPeonia4); + App.game.quests.questLines().push(gigantamaxQuestLine); + } + static createOriginalColorMagearnaQuestLine() { + const magearnaQuestLine = new QuestLine('A Mystery Gift', 'You have received a Mystery Gift.', new MultiRequirement([ + new CaughtUniqueShinyPokemonsByRegionRequirement(GameConstants.Region.kanto), + new CaughtUniqueShinyPokemonsByRegionRequirement(GameConstants.Region.johto), + new CaughtUniqueShinyPokemonsByRegionRequirement(GameConstants.Region.hoenn), + new CaughtUniqueShinyPokemonsByRegionRequirement(GameConstants.Region.sinnoh), + new CaughtUniqueShinyPokemonsByRegionRequirement(GameConstants.Region.unova), + new CaughtUniqueShinyPokemonsByRegionRequirement(GameConstants.Region.kalos), + new CaughtUniqueShinyPokemonsByRegionRequirement(GameConstants.Region.alola), + new CaughtUniqueShinyPokemonsByRegionRequirement(GameConstants.Region.galar), + ]), GameConstants.BulletinBoards.Galar); + const mysteryGift = new TalkToNPCQuest(MagearnaMysteryGift, 'Go home and open your Mystery Gift').withCustomReward(() => { + App.game.party.gainPokemonByName('Magearna (Original Color)'); + Notifier.notify({ + title: magearnaQuestLine.name, + message: 'You obtained Magearna (Original Color)!', + type: NotificationConstants.NotificationOption.success, + timeout: 3e4, + }); + }); + magearnaQuestLine.addQuest(mysteryGift); + App.game.quests.questLines().push(magearnaQuestLine); + } + /* Hisui QuestLines */ + static createHisuiForcesQuestLine() { + const hisuiForcesQuestLine = new QuestLine('Incarnate Forces of Hisui', 'Cogita would like you to catch the Forces of Nature.', new DevelopmentRequirement(), GameConstants.BulletinBoards.Hisui); + const talktoForcesCogita1 = new TalkToNPCQuest(ForcesCogita1, 'Speak to Cogita in Galaxy Hall.'); + hisuiForcesQuestLine.addQuest(talktoForcesCogita1); + const chaseTornadus = new CustomQuest(3, 0, 'Pursue Tornadus in the Alabaster Icelands.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Tornadus 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Tornadus 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Tornadus 3')]()); + const captureTornadus = new CaptureSpecificPokemonQuest('Tornadus', 1, true).withDescription('Catch Tornadus in the Alabaster Icelands'); + const chaseThundurus = new CustomQuest(3, 0, 'Pursue Thundurus in the Cobalt Coastlands.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Thundurus 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Thundurus 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Thundurus 3')]()); + const captureThundurus = new CaptureSpecificPokemonQuest('Thundurus', 1, true).withDescription('Catch Thundurus in the Cobalt Coastlands'); + const chaseLandorus = new CustomQuest(3, 0, 'Pursue Landorus in the Obsidian Fieldlands.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Landorus 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Landorus 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Landorus 3')]()); + const captureLandorus = new CaptureSpecificPokemonQuest('Landorus', 1, true).withDescription('Catch Landorus in the Obsidian Fieldlands'); + hisuiForcesQuestLine.addQuest(new MultipleQuestsQuest([ + chaseTornadus, + captureTornadus, + chaseThundurus, + captureThundurus, + chaseLandorus, + captureLandorus, + ], 'Tornadus, Thundurus and Landorus have been sighted in the Alabaster Icelands, Cobalt Coastlands and Obsidian Fieldland respectively. Pursue and capture them.')); + const talktoForcesCogita2 = new TalkToNPCQuest(ForcesCogita2, 'Speak to Cogita at Ancient Retreat.'); + hisuiForcesQuestLine.addQuest(talktoForcesCogita2); + const chaseEnamorus = new CustomQuest(3, 0, 'Pursue Enamorus in the Crimson Mirelands.', () => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Enamorus 1')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Enamorus 2')]() + + App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Enamorus 3')]()); + hisuiForcesQuestLine.addQuest(chaseEnamorus); + const captureEnamorus = new CaptureSpecificPokemonQuest('Enamorus', 1, true).withDescription('Catch Enamorus roaming around Hisui.'); + hisuiForcesQuestLine.addQuest(captureEnamorus); + const talktoForcesCogita3 = new TalkToNPCQuest(ForcesCogita3, 'Speak to Cogita at Ancient Retreat.'); + hisuiForcesQuestLine.addQuest(talktoForcesCogita3); + App.game.quests.questLines().push(hisuiForcesQuestLine); + } + static createHisuiArceusQuestLine() { + const hisuiArceusQuestLine = new QuestLine('Arceus: The Deified Pokémon', 'Discover the truth of the Pokémon deity, Arceus.', new DevelopmentRequirement(), GameConstants.BulletinBoards.Hisui); + App.game.quests.questLines().push(hisuiArceusQuestLine); + } + // Paldea Questlines + static createPaldeaLegendsQuestLine() { + const paldeaLegendsQuestLine = new QuestLine('Path of Legends', 'Help Arven search for the Herba Mystica.'); + const clearTrainerArven = new DefeatGymQuest(1, 0, 'Pokémon Trainer Arven').withDescription('Arven wants to test you and himself. Defeat him at Poco Path Lighthouse'); + paldeaLegendsQuestLine.addQuest(clearTrainerArven); + App.game.quests.questLines().push(paldeaLegendsQuestLine); + } + static createPaldeaVictoryQuestLine() { + const paldeaVictoryQuestLine = new QuestLine('Victory Road', 'Challenge Paldea\'s Gyms to challenge your new rival, Nemona.'); + const clearChampionNemona = new DefeatGymQuest(1, 0, 'Champion Nemona').withDescription('Finally, it\'s time to fight Nemona as equals! Defeat Champion Nemona in Mesagoza.'); + paldeaVictoryQuestLine.addQuest(clearChampionNemona); + App.game.quests.questLines().push(paldeaVictoryQuestLine); + } + static createPaldeaStarfallQuestLine() { + const paldeaStarfallQuestLine = new QuestLine('Starfall Street', 'Help Cassiopeia disband Team Star.'); + const clearCassiopeia = new DefeatGymQuest(1, 0, 'Penny of Team Star').withDescription('Penny has revealed herself to be Cassiopeia. Defeat her at Naranjuva Academy.'); + paldeaStarfallQuestLine.addQuest(clearCassiopeia); + App.game.quests.questLines().push(paldeaStarfallQuestLine); + } + static createPaldeaWayHomeQuestLine() { + const paldeaWayHomeQuestLine = new QuestLine('The Way Home', 'Help Koraidon and Miraidon find their homes in the mysterious Area Zero.', new MultiRequirement([ + new QuestLineCompletedRequirement('Path of Legends'), + new QuestLineCompletedRequirement('Victory Road'), + new QuestLineCompletedRequirement('Starfall Street'), + ]), GameConstants.BulletinBoards.Paldea); + App.game.quests.questLines().push(paldeaWayHomeQuestLine); + } + /* Event QuestLines */ + // From any bulletin board on April 1 (Hoopa Day). + static createHoopaDayPikabluQuestLine() { + const hoopaDayPikabluQuestLine = new QuestLine('How blu mouse?', 'Apparently a strange blue mouse-like Pokémon might be out there somewhere?', new SpecialEventRequirement('Hoopa Day'), GameConstants.BulletinBoards.All); + const PikabluCatch = new CaptureSpecificPokemonQuest('Marill', 1, false, 5000).withDescription('Catch Pikablu.'); + hoopaDayPikabluQuestLine.addQuest(PikabluCatch); + App.game.quests.questLines().push(hoopaDayPikabluQuestLine); + } + // From any bulletin board between April 8-29 (Easter). + static createEasterQuestLine() { + const easterQuestLine = new QuestLine('Egg Hunt', 'A basket of strange eggs has been spotted, see if you can find it!', new SpecialEventRequirement('Easter'), GameConstants.BulletinBoards.All); + const defeatTogepiInKanto = new DefeatDungeonBossQuest('Viridian Forest', 'Egg Hunter').withDescription('Some strange eggs have been seen around Kanto. Go look for it! Maybe Erika knows more?'); + easterQuestLine.addQuest(defeatTogepiInKanto); + const encounterSurpriseTogepiInJohto = new DefeatDungeonBossQuest('Ilex Forest', 'Egg Hunter').withDescription('Seems like this was just an Easter egg after all... But no time to dwell on that. Another report just came in, there have been sightings of some strange eggs in a forest in Johto!'); + easterQuestLine.addQuest(encounterSurpriseTogepiInJohto); + const encounterTogepiInHoenn = new DefeatDungeonBossQuest('Petalburg Woods', 'Egg Hunter').withDescription('That looked like a Togepi!... well, maybe not. Anyway, there is a big Egg Hunt going on in the woods south of Rustboro in Hoenn; maybe you should take a look?'); + easterQuestLine.addQuest(encounterTogepiInHoenn); + const talkToEggHunter = new TalkToNPCQuest(EasterEggHunter, 'The eggs ran away! Talk to the egg hunter in Petalburg Woods.'); + easterQuestLine.addQuest(talkToEggHunter); + App.game.quests.questLines().push(easterQuestLine); + } + static isQuestLineCompleted(name) { + var _b; + return ((_b = App.game.quests.getQuestLine(name)) === null || _b === void 0 ? void 0 : _b.state()) == QuestLineState.ended; + } + static loadQuestLines() { + this.createTutorial(); + this.createRocketKantoQuestLine(); + this.createBillsGrandpaQuestLine(); + this.createUndergroundQuestLine(); + this.createBillSeviiQuestLine(); + this.createPersonsofInterestQuestLine(); + this.createSickAmpharosQuestLine(); + this.createRocketJohtoQuestLine(); + this.createJohtoBeastsQuestLine(); + this.createJohtoSuicuneQuestLine(); + this.createlugiaJohtoQuestLine(); + this.createhoohJohtoQuestLine(); + this.createCelebiJohtoQuestLine(); + this.createAquaMagmaHoennQuestLine(); + this.createWeatherTrioQuestLine(); + this.createDeoxysQuestLine(); + this.createEonDuoQuestLine(); + this.createRubySapphireSeviiQuestLine(); + this.createPinkanThemeparkQuestLine(); + this.createRegiTrioQuestLine(); + this.createJirachiQuestLine(); + this.createMetaGroudonQuestLine(); + this.createOrreColosseumQuestLine(); + this.createGalacticSinnohQuestLine(); + this.createManaphyQuestLine(); + this.createGiratinaQuestLine(); + this.createPlasmaUnovaQuestLine(); + this.createSwordsQuestLine(); + this.createGenesectQuestLine(); + this.createOrreXDQuestLine(); + this.createDeltaEpisodeQuestLine(); + this.createPrimalReversionQuestLine(); + this.createDetectivePikachuQuestLine(); + this.createVivillonQuestLine(); + this.createFlareKalosQuestLine(); + this.createPrincessDiancieQuestLine(); + this.createClashOfAgesQuestLine(); + this.createUnrivaledPowerQuestLine(); + this.createMelemeleAlolaQuestLine(); + this.createAkalaAlolaQuestLine(); + this.createUlaulaAlolaQuestLine(); + this.createPoniAlolaQuestLine(); + this.createUltraNecrozmaAlolaQuestLine(); + this.createIslandChallengeQuestLine(); + this.createSilvallyTypesQuestLine(); + this.createUltraBeastQuestLine(); + this.createMagikarpJumpQuestLine(); + this.createDarkestDayQuestLine(); + this.createSwordShieldQuestLine(); + this.createDojoArmorQuestLine(); + this.createJungleSecretsQuestLine(); + this.createGalarCrownQuestLine(); + this.createDynaTreeBirdsQuestLine(); + this.createAncientGolemsQuestLine(); + this.createGigantamaxQuestLine(); + this.createOriginalColorMagearnaQuestLine(); + this.createHisuiForcesQuestLine(); + this.createHisuiArceusQuestLine(); + this.createPaldeaLegendsQuestLine(); + this.createPaldeaVictoryQuestLine(); + this.createPaldeaStarfallQuestLine(); + this.createPaldeaWayHomeQuestLine(); + this.createEasterQuestLine(); + this.createHoopaDayPikabluQuestLine(); + this.createDrSplashQuestLine(); + this.createMeltanQuestLine(); + this.createRainbowRocketQuestLine(); + } +} +_a = QuestLineHelper; +// Multi-quest statics +// Item rewards +QuestLineHelper.itemReward = (item, amount, npc) => (function () { + var _b; + player.gainItem(item, amount); + const subject = npc ? `${npc} has given you` : 'You found'; + Notifier.notify({ + title: (_b = this.parentQuestLine) === null || _b === void 0 ? void 0 : _b.name, + message: `${subject} ${amount} ${GameConstants.humanifyString(item)}(s)!`, + type: NotificationConstants.NotificationOption.success, + sound: NotificationConstants.NotificationSound.Quests.quest_ready_to_complete, + timeout: 3e4, + }); +}); +// Alola z crystals, also used for temp battles +QuestLineHelper.zCrystalGet = (crystalType) => function () { + player.gainItem(GameConstants.zCrystalItemType[crystalType], 1); + Notifier.notify({ + title: 'Z Crystal', + message: ` You got the ${GameConstants.zCrystalItemType[crystalType]}!`, + timeout: 1e4, + }); +}; +QuestLineHelper.createZCrystalTrial = (crystalType, dungeon, captain, successMessage, questName, nonTrial, nonTrialDescription, nonTrialBoss) => { + const description = nonTrial ? nonTrialDescription : `Clear ${captain}\'s Trial at ${dungeon}.`; + const dungeonBoss = nonTrial ? nonTrialBoss : `Trial Site of ${dungeon}`; + const clearTrial = new DefeatDungeonBossQuest(dungeon, dungeonBoss) + .withDescription(description) + .withCustomReward(_a.zCrystalGet(crystalType)) + .withOptionalArgs({ + clearedMessage: `${successMessage}

    `, + npcDisplayName: `${captain}`, + npcImageName: `${captain}`, + }); + return questName.addQuest(clearTrial); +}; +/// +/// +class Quests { + constructor() { + this.saveKey = 'quests'; + this.defaults = { + xp: 0, + refreshes: 0, + freeRefresh: false, + }; + this.xp = ko.observable(0).extend({ numeric: 0 }); + this.refreshes = ko.observable(0); + this.lastRefresh = new Date(); + this.lastRefreshLevel = 0; + this.lastRefreshRegion = 0; + this.freeRefresh = ko.observable(false); + this.questList = ko.observableArray(); + this.questLines = ko.observableArray(); + this.level = ko.pureComputed(() => { + return this.xpToLevel(this.xp()); + }); + this.questSlots = ko.pureComputed(() => { + // Minimum of 1, Maximum of 4 + return Math.min(4, Math.max(1, Math.floor((this.level() + 5) / 5))); + }); + // Get current quests by status + this.completedQuests = ko.pureComputed(() => { + return this.questList().filter(quest => quest.isCompleted()); + }); + this.currentQuests = ko.pureComputed(() => { + return this.questList().filter(quest => quest.inProgress()); + }); + this.incompleteQuests = ko.pureComputed(() => { + return this.questList().filter(quest => !quest.isCompleted()); + }); + this.sortedQuestList = ko.pureComputed(() => { + const list = [...this.questList()]; + return list.sort(Quests.questCompareBy); + }); + } + static questCompareBy(quest1, quest2) { + if (Quests.getQuestSortStatus(quest1) < Quests.getQuestSortStatus(quest2)) { + return -1; + } + else if (Quests.getQuestSortStatus(quest1) > Quests.getQuestSortStatus(quest2)) { + return 1; + } + else if (quest1.pointsReward > quest2.pointsReward) { + return -1; + } + else if (quest1.pointsReward < quest2.pointsReward) { + return 1; + } + return 0; + } + static getQuestSortStatus(quest) { + if (quest.isCompleted() && !quest.claimed()) { + return 0; + } + else if (quest.isCompleted()) { + return 3; + } + else if (quest.inProgress()) { + return 1; + } + return 2; + } + /** + * Gets a quest line by name + * @param name The quest line name + */ + getQuestLine(name) { + return this.questLines().find(ql => ql.name.toLowerCase() == name.toLowerCase()); + } + beginQuest(index) { + const quest = this.questList()[index]; + // Check if we can start a new quest, and the requested quest isn't started or completed + if (this.canStartNewQuest() && quest && !quest.inProgress() && !quest.isCompleted()) { + quest.begin(); + if ((Settings.getSetting('hideQuestsOnFull').value) && this.currentQuests().length >= this.questSlots()) { + $('#QuestModal').modal('hide'); + } + } + else { + Notifier.notify({ + message: 'You cannot start more quests.', + type: NotificationConstants.NotificationOption.danger, + }); + } + } + quitQuest(index, shouldConfirm = false) { + // Check if we can quit this quest + const quest = this.questList()[index]; + if (quest && quest.inProgress()) { + quest.quit(shouldConfirm); + } + else { + Notifier.notify({ + message: 'You cannot quit this quest.', + type: NotificationConstants.NotificationOption.danger, + }); + } + } + claimQuest(index) { + // Check if we can claim this quest + const quest = this.questList()[index]; + if (quest && quest.isCompleted() && !quest.claimed()) { + quest.claim(); + if (player.highestRegion() >= GameConstants.Region.kalos && App.game.party.alreadyCaughtPokemonByName('Medicham') && !player.hasMegaStone(GameConstants.MegaStoneType.Medichamite)) { + if (Rand.chance(Math.max(0, (App.game.quests.level() - 15) / 8192))) { + player.gainMegaStone(GameConstants.MegaStoneType.Medichamite); + } + } + // Once the player completes every available quest, refresh the list for free + if (this.allQuestClaimed()) { + this.refreshQuests(true); + // Give player a free refresh + this.freeRefresh(true); + Notifier.notify({ + message: 'All quests completed. Your quest list has been refreshed.', + type: NotificationConstants.NotificationOption.info, + timeout: 1e4, + setting: NotificationConstants.NotificationSetting.General.quest_completed, + }); + } + } + else { + console.trace('cannot claim quest..'); + Notifier.notify({ + message: 'You cannot claim this quest.', + type: NotificationConstants.NotificationOption.danger, + }); + } + } + addXP(amount) { + if (isNaN(amount)) { + return; + } + const currentLevel = this.level(); + GameHelper.incrementObservable(this.xp, amount); + // Refresh the list each time a player levels up + if (this.level() > currentLevel) { + Notifier.notify({ + message: `Your quest level has increased to ${this.level()}!\nYou have a free quest refresh.`, + type: NotificationConstants.NotificationOption.success, + timeout: 1e4, + sound: NotificationConstants.NotificationSound.Quests.quest_level_increased, + }); + this.freeRefresh(true); + App.game.logbook.newLog(LogBookTypes.QUEST, createLogContent.questLevelUp({ level: this.level().toLocaleString() })); + } + } + generateQuestList(date = new Date(), level = this.level()) { + if (this.lastRefresh.toDateString() != date.toDateString()) { + this.refreshes(0); + } + this.lastRefresh = date; + this.lastRefreshLevel = level; + this.lastRefreshRegion = player.highestRegion(); + this.currentQuests().forEach(quest => quest.quit()); + this.questList(QuestHelper.generateQuestList(this.generateSeed(date, level), GameConstants.QUESTS_PER_SET)); + } + generateSeed(date = new Date(), level = this.level()) { + return Number(level * (date.getFullYear() + this.refreshes() * 10) * date.getDate() + 1000 * date.getMonth() + 100000 * date.getDate()); + } + refreshQuests(free = this.freeRefresh(), shouldConfirm = false) { + return __awaiter(this, void 0, void 0, function* () { + if (free || this.canAffordRefresh()) { + if (!free) { + if (shouldConfirm && !(yield Notifier.confirm({ + title: 'Refresh Quest List', + message: 'Are you sure you want to refresh the quest list?', + type: NotificationConstants.NotificationOption.warning, + confirm: 'Refresh', + }))) { + return; + } + App.game.wallet.loseAmount(this.getRefreshCost()); + } + this.freeRefresh(false); + GameHelper.incrementObservable(this.refreshes); + this.generateQuestList(); + } + else { + Notifier.notify({ + message: 'You cannot afford to do that!', + type: NotificationConstants.NotificationOption.danger, + }); + } + }); + } + resetRefreshes() { + this.refreshes(0); + } + canAffordRefresh() { + return App.game.wallet.hasAmount(this.getRefreshCost()); + } + /** + * Formula for the Money cost for refreshing quests + * @returns 0 when all quests are complete, ~1 million when none are + */ + getRefreshCost() { + // If we have a free refersh, just assume all the quest are completed + const notComplete = this.freeRefresh() ? 0 : this.incompleteQuests().length; + const cost = Math.floor((250000 * Math.LOG10E * Math.log(Math.pow(notComplete, 4) + 1)) / 1000) * 1000; + return new Amount(Math.max(0, Math.min(1e6, cost)), GameConstants.Currency.money); + } + canStartNewQuest() { + // Check we haven't already used up all quest slots + if (this.currentQuests().length >= this.questSlots()) { + return false; + } + // Check at least 1 quest is either not completed or in progress + if (this.questList().find(quest => !quest.isCompleted() && !quest.inProgress())) { + return true; + } + return false; + } + /** + * Determines if all quests have been completed and claimed. + */ + allQuestClaimed() { + return !this.incompleteQuests().length && !this.currentQuests().length; + } + /** + * Formula for the amount of exp to increase quest level. + * 1000 XP is needed for level 2, and then increases 20% each level. + * @param level The current quest level + */ + levelToXP(level) { + if (level >= 2) { + // Sum of geometric series + const a = 1000, r = 1.2, n = level - 1; + const sum = a * (Math.pow(r, n) - 1) / (r - 1); + return Math.ceil(sum); + } + else { + return 0; + } + } + xpToLevel(xp) { + const sum = xp, a = 1000, r = 1.2; + const n = Math.log(1 + ((r - 1) * sum) / a) / Math.log(r); + return Math.floor(n + 1); + } + percentToNextQuestLevel() { + const current = this.level(); + const requiredForCurrent = this.levelToXP(current); + const requiredForNext = this.levelToXP(current + 1); + return 100 * (this.xp() - requiredForCurrent) / (requiredForNext - requiredForCurrent); + } + questProgressTooltip() { + const level = this.level(); + const xp = this.xp(); + return { title: `${(xp - this.levelToXP(level)).toLocaleString('en-US')} / ${(this.levelToXP(level + 1) - this.levelToXP(level)).toLocaleString('en-US')}`, trigger: 'hover' }; + } + isDailyQuestsUnlocked() { + return QuestLineHelper.isQuestLineCompleted('Tutorial Quests'); + } + loadQuestList(questList) { + // Sanity Check + this.questList.removeAll(); + questList.forEach(questData => { + try { + if (questData.hasOwnProperty('name')) { + const quest = QuestHelper.createQuest(questData.name, questData.data); + quest.fromJSON(questData); + this.questList.push(quest); + } + else { + this.questList.push(new CapturePokemonsQuest(10, 1)); + } + } + catch (e) { + console.error(`Quest "${questData.name}" failed to load`, questData); + this.questList.push(new CapturePokemonsQuest(10, 1)); + } + }); + } + loadQuestLines(questLines) { + questLines.forEach(questLine => { + try { + if (questLine.state == QuestLineState.inactive) { + return; + } + const ql = this.getQuestLine(questLine.name); + if (ql) { + ql.state(questLine.state); + if (questLine.state == QuestLineState.started || questLine.state == QuestLineState.suspended) { + if (ql.quests()[questLine.quest] instanceof MultipleQuestsQuest) { + ql.resumeAt(questLine.quest, 0); + ql.curQuestObject().quests.forEach((q, i) => { + var _a; + if ((questLine === null || questLine === void 0 ? void 0 : questLine.initial[i]) === true) { + return q.complete(true); + } + q.initial((_a = questLine === null || questLine === void 0 ? void 0 : questLine.initial[i]) !== null && _a !== void 0 ? _a : 0); + }); + } + else { + ql.resumeAt(questLine.quest, questLine.initial); + } + if (questLine.state == QuestLineState.suspended) { + ql.suspendQuest(true); + } + } + } + } + catch (e) { + console.error(`Quest line "${questLine.name}" failed to load`, questLine); + } + }); + } + toJSON() { + return { + xp: this.xp(), + refreshes: this.refreshes(), + lastRefresh: this.lastRefresh, + lastRefreshLevel: this.lastRefreshLevel, + lastRefreshRegion: this.lastRefreshRegion, + freeRefresh: this.freeRefresh(), + questList: this.questList().map(quest => quest.toJSON()), + questLines: this.questLines().filter(q => q.state()), + }; + } + fromJSON(json) { + // Generate the questLines (statistics not yet loaded when constructing) + QuestLineHelper.loadQuestLines(); + if (!json) { + // Generate the questList + this.generateQuestList(); + return; + } + this.xp(json.xp || this.defaults.xp); + this.refreshes(json.refreshes || this.defaults.refreshes); + this.lastRefresh = json.lastRefresh ? new Date(json.lastRefresh) : new Date(); + this.lastRefreshLevel = json.lastRefreshLevel || this.level(); + this.lastRefreshRegion = json.lastRefreshRegion || player.highestRegion(); + if (this.lastRefresh.toDateString() != new Date().toDateString()) { + this.freeRefresh(true); + } + else { + this.freeRefresh(json.freeRefresh || this.defaults.freeRefresh); + } + if (!json.hasOwnProperty('questList') || !json.questList.length) { + // Generate new quest list + this.generateQuestList(this.lastRefresh, this.lastRefreshLevel); + } + else { + // Load saved quests + this.loadQuestList(json.questList); + } + // Load our quest line progress + if (json.questLines) { + this.loadQuestLines(json.questLines); + } + } +} +/// +class BuyPokeballsQuest extends Quest { + constructor(amount, reward, pokeball) { + super(amount, reward); + this.pokeball = pokeball; + this.focus = App.game.statistics.pokeballsPurchased[this.pokeball]; + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Buy ${this.amount.toLocaleString('en-US')} ${ItemList[GameConstants.Pokeball[this.pokeball]].displayName}s.`; + } + toJSON() { + const json = super.toJSON(); + json.name = this.constructor.name; + json.data.push(this.pokeball); + return json; + } +} +/// +class CaptureSpecificPokemonQuest extends Quest { + constructor(pokemonName, capturesNeeded = 1, includeBreeding = false, reward = 0) { + super(capturesNeeded, reward); + this.pokemon = pokemonMap[pokemonName]; + this.focus = ko.pureComputed(() => App.game.statistics.pokemonCaptured[this.pokemon.id]() - (includeBreeding ? 0 : App.game.statistics.pokemonHatched[this.pokemon.id]())); + this.includeBreeding = includeBreeding; + } + get description() { + if (this.customDescription) { + return this.customDescription; + } + if (this.amount === 1) { + return `Capture ${this.includeBreeding ? 'or hatch ' : ''}${this.pokemon.name}.`; + } + return `Capture ${this.includeBreeding ? 'or hatch ' : ''}${this.pokemon.name} ${this.amount} times.`; + } + claim() { + if (this.customReward !== undefined) { + this.customReward(); + } + return super.claim(); + } +} +class CustomQuest extends Quest { + constructor(amount, reward, description, focus) { + super(amount, reward); + this.customDescription = description; + this.focus = ko.pureComputed(focus); + } +} +class DefeatDungeonBossQuest extends Quest { + constructor(dungeon, dungeonBoss, reward = 0) { + super(1, reward); + this.dungeon = dungeon; + this.dungeonBoss = dungeonBoss; + const region = GameConstants.getDungeonRegion(this.dungeon); + if (region == GameConstants.Region.none) { + throw new Error(`Invalid dungeon for quest: ${this.dungeon}`); + } + this.focus = ko.observable(0); + } + get description() { + var _a; + return (_a = this.customDescription) !== null && _a !== void 0 ? _a : `Defeat ${this.dungeonBoss} in ${this.dungeon}.`; + } + onLoad() { + super.onLoad(); + // TODO : @types/knockout@3.4.66 → 3.5.1 + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + ko.when(() => { var _a; return DungeonRunner.defeatedBoss() === this.dungeonBoss && ((_a = DungeonRunner.dungeon) === null || _a === void 0 ? void 0 : _a.name) === this.dungeon; }, () => this.focus(1)); + } +} +class DefeatTemporaryBattleQuest extends Quest { + constructor(temporaryBattle, customDescription, reward = 0) { + super(1, reward); + this.temporaryBattle = temporaryBattle; + this.customDescription = customDescription; + this.focus = App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex(this.temporaryBattle)]; + this.customDescription = customDescription; + } +} +/// +class MultipleQuestsQuest extends Quest { + constructor(quests, description, reward = 0, questCompletedRequired) { + super(questCompletedRequired !== null && questCompletedRequired !== void 0 ? questCompletedRequired : quests.length, reward); + this.quests = quests; + // Hide the quest ready to claim notifications + quests.forEach((q) => q.asSubQuest(this)); + this.customDescription = description; + this.focus = ko.pureComputed(() => { + return quests.filter(q => q.isCompleted()).length; + }); + } + begin() { + this.quests.forEach(q => q.begin()); + super.begin(); + } + createAutoCompleter() { + this.quests.forEach(q => q.createAutoCompleter()); + super.createAutoCompleter(); + } + deleteAutoCompleter() { + this.quests.forEach(q => q.deleteAutoCompleter()); + super.deleteAutoCompleter(); + } + deleteFocusSub(fromMainQuest = false) { + if (super.deleteFocusSub(fromMainQuest)) { + this.quests.forEach(q => q.deleteFocusSub(true)); + return true; + } + return false; + } +} +class TalkToNPCQuest extends Quest { + constructor(npc, description, reward = 0) { + super(1, reward); + this.npc = npc; + this.customDescription = description; + this.focus = npc.talkedTo; + } + begin() { + this.npc.talkedTo(false); + super.begin(); + } +} +var BaitType; +(function (BaitType) { + BaitType[BaitType["Bait"] = 0] = "Bait"; + BaitType[BaitType["Razz"] = 1] = "Razz"; + BaitType[BaitType["Nanab"] = 2] = "Nanab"; +})(BaitType || (BaitType = {})); +class Bait { + constructor(type, name, useName, image, amount, use) { + this.type = type; + this.name = name; + this.useName = useName; + this.image = image; + this.amount = amount; + this.use = use; + } + get btnName() { + return `${this.name} (${this.amount()})`; + } +} +const BaitList = {}; +BaitList.Bait = new Bait(BaitType.Bait, 'Bait', 'some bait', 'assets/images/safari/bait.png', () => '∞', (pokemon) => { + pokemon.eatingBait = BaitType.Bait; + pokemon.eating = Math.max(pokemon.eating, Rand.intBetween(2, 6)); + pokemon.angry = 0; +}); +BaitList.Razz = new Bait(BaitType.Razz, 'Razz Berry', 'a Razz Berry', FarmController.getBerryImage(BerryType.Razz), () => App.game.farming.berryList[BerryType.Razz](), (pokemon) => { + GameHelper.incrementObservable(App.game.farming.berryList[BerryType.Razz], -1); + pokemon.eatingBait = BaitType.Razz; + pokemon.eating = Math.max(pokemon.eating, Rand.intBetween(2, 7)); + pokemon.angry = 0; +}); +BaitList.Nanab = new Bait(BaitType.Nanab, 'Nanab Berry', 'a Nanab Berry', FarmController.getBerryImage(BerryType.Nanab), () => App.game.farming.berryList[BerryType.Nanab](), (pokemon) => { + GameHelper.incrementObservable(App.game.farming.berryList[BerryType.Nanab], -1); + pokemon.eatingBait = BaitType.Nanab; + pokemon.eating = Math.max(pokemon.eating, Rand.intBetween(2, 7)); + pokemon.angry = 0; +}); +class Safari { + static sizeX() { + return Math.max(5, Math.floor(document.querySelector('#safariModal .modal-dialog').scrollWidth / 32)); + } + static sizeY() { + return Math.max(5, Math.floor((window.innerHeight - 250) / 32)); + } + static load() { + Safari.activeRegion(player.region); + Safari.grid = []; + Safari.pokemonGrid([]); + Safari.itemGrid([]); + Safari.playerXY.x = 0; + Safari.playerXY.y = 0; + Safari.lastDirection = 'up'; + Safari.activeEnvironment(SafariEnvironments.Grass); + Safari.inBattle(false); + Safari.balls(Safari.calculateStartPokeballs()); + for (let i = 0; i < Safari.sizeY(); i++) { + Safari.grid.push(Array(Safari.sizeX()).fill(GameConstants.SafariTile.ground)); + } + if (Safari.activeRegion() === GameConstants.Region.alola) { + const land = new LandBody(5, 3); + land.grid.pop(); + const [spawnX, spawnY] = Safari.getPlayerStartCoords(); + Safari.addBody(spawnX - 2, spawnY - 1, land); + // calculate the maximum amount of islands to be proportional to the size of the Safari map + // 25 is the minimal number of tiles + const islands = Math.floor(Safari.sizeX() * Safari.sizeY() / 25); + for (let i = 0; i < islands; i++) { + Safari.addRandomBody(new ShapedLandBody()); + } + // Transform every Ground into Water and Sand into Ground + for (let i = 0; i < Safari.grid.length; i++) { + for (let j = 0; j < Safari.grid[i].length; j++) { + if (Safari.grid[i][j] === GameConstants.SafariTile.ground) { + Safari.grid[i][j] = GameConstants.SafariTile.waterC; + } + // Sand was temporary, because ground was used temporary for water... + if (Safari.grid[i][j] === GameConstants.SafariTile.sandC) { + Safari.grid[i][j] = GameConstants.SafariTile.ground; + } + } + } + } + else { + const bodyOrder = [ + FenceBody, WaterBody, SandBody, WaterBody, WaterBody, SandBody, TreeBody, TreeBody, TreeBody, TreeBody, TreeBody, FenceBody, + SandBody, FenceBody, WaterBody, SandBody, WaterBody, WaterBody, SandBody, SandBody, GrassBody, GrassBody, GrassBody, GrassBody, + ]; + bodyOrder.forEach((bodyType) => Safari.addRandomBody(new bodyType())); + } + Safari.calculateAccessibleTiles(); + Safari.inProgress(true); + } + static addRandomBody(body) { + let x = Safari.getRandomCoord(Safari.sizeX() - 2); + let y = Safari.getRandomCoord(Safari.sizeY() - 2); + if (body.type === 'fence') { + x = Math.max(0, x - 3); + y = Math.max(0, y - 3); + } + let res = Safari.canAddBody(x, y, body); + // Force the addition of water tiles if there are no water tiles in the grid + if (!res && body.type === 'water' && !Safari.hasWaterTiles()) { + let attempts = 0; + while (!res && attempts++ < 50) { + // Create a new WaterBody with minimum X and Y (3x3) after 10 attempts + if (attempts === 10) { + body = new WaterBody(3, 3); + } + x = Safari.getRandomCoord(Safari.sizeX() - 2); + y = Safari.getRandomCoord(Safari.sizeY() - 2); + res = Safari.canAddBody(x, y, body); + } + } + if (res || body.type === 'grass') { + Safari.addBody(x, y, body); + } + } + static getRandomCoord(max) { + return Rand.intBetween(1, max - 3); + } + static canAddBody(x, y, body) { + if (x == 0 || + y == 0 || + y + body.maxY() >= Safari.sizeY() || + x + body.maxX() >= Safari.sizeX()) { + return false; + } + for (let i = 0; i < body.grid.length; i++) { + for (let j = 0; j < body.grid[i].length; j++) { + if ((i + y) < Safari.sizeY() && (j + x) < Safari.sizeX()) { + if (body.grid[i][j] !== GameConstants.SafariTile.ground) { + if (Safari.grid[i + y][j + x] !== GameConstants.SafariTile.ground) { + return false; + } + } + } + else { + return false; + } + } + } + return true; + } + static addBody(x, y, body) { + for (let i = 0; i < body.grid.length; i++) { + for (let j = 0; j < body.grid[i].length; j++) { + if (body.grid[i][j] !== 0) { + if ((i + y) < Safari.sizeY() && (j + x) < Safari.sizeX()) { + if (Safari.grid[i + y][j + x] === 0) { + Safari.grid[i + y][j + x] = body.grid[i][j]; + } + } + } + } + } + } + // Check if grid has water tiles + static hasWaterTiles() { + return Safari.grid.some((row) => row.some((tile) => GameConstants.SAFARI_WATER_BLOCKS.includes(tile))); + } + static calculateAccessibleTiles() { + // Reset accessible tile grid + Safari.accessibleTiles = Safari.grid.map(row => row.map(tile => false)); + // Start with the tile player spawns on + const toProcess = [Safari.getPlayerStartCoords()]; + // While we have things in our list of tiles to process + while (toProcess.length) { + // Get the first one and mark it as accessible + const [x, y] = toProcess.shift(); + Safari.accessibleTiles[y][x] = true; + // Then queue up any neighbors for processing + [[x + 1, y], [x - 1, y], [x, y + 1], [x, y - 1]] + .forEach(([nx, ny]) => { + var _a; + if ( // but skip if: + // outside map + !Safari.isInMap(nx, ny) || + ( + // already processed, + (_a = Safari.accessibleTiles[ny]) === null || _a === void 0 ? void 0 : _a[nx]) || + // already queued, + toProcess.some(([px, py]) => px === nx && py === ny) || + // or can't access + !Safari.canMove(nx, ny)) { + return; + } + toProcess.push([nx, ny]); + }); + } + } + static safariReset() { + Notifier.confirm({ + title: 'Safari Zone', + message: `You have an active Safari in ${GameConstants.camelCaseToString(GameConstants.Region[Safari.activeRegion()])}.\nDo you want to quit that Safari and start a new one?`, + type: NotificationConstants.NotificationOption.warning, + confirm: 'Quit', + }).then(confirmed => { + if (confirmed) { + //Reload zone + Safari.inBattle(false); + Safari.inProgress(false); + SafariBattle.busy(false); + $('#safariBattleModal').modal('hide'); + Safari.openModal(); + } + }); + } + static openModal() { + if (DisplayObservables.modalState.safariModal !== 'hidden') { + // Do nothing if the modal is already open or mid-animation + return; + } + else if (Safari.inProgress() && Safari.activeRegion() !== player.region) { + Safari.safariReset(); + } + else { + App.game.gameState = GameConstants.GameState.safari; + $('#safariModal').modal({ backdrop: 'static', keyboard: false }); + } + } + static startSafari() { + if (Safari.canAccess()) { + // Check if player has an active Safari Zone session + if (Safari.activeRegion() >= 0 && player.region != Safari.activeRegion()) { + Safari.safariReset(); + } + else { + Safari.openModal(); + } + } + else { + Notifier.notify({ + message: 'You need the Safari Pass to access this location.\nVisit the Gym in Fuschia City', + type: NotificationConstants.NotificationOption.warning, + }); + } + } + static closeModal() { + if (!Safari.inBattle()) { + $('#safariModal').modal('hide'); + } + } + static canPay() { + return App.game.wallet.hasAmount(Safari.cost()); + } + static cost() { + switch (player.region) { + case GameConstants.Region.kanto: + return new Amount(100, GameConstants.Currency.questPoint); + case GameConstants.Region.johto: + return new Amount(500, GameConstants.Currency.questPoint); + case GameConstants.Region.sinnoh: + return new Amount(750, GameConstants.Currency.questPoint); + case GameConstants.Region.kalos: + return new Amount(1000, GameConstants.Currency.questPoint); + case GameConstants.Region.alola: + return new Amount(1250, GameConstants.Currency.questPoint); + default: + return new Amount(100, GameConstants.Currency.questPoint); + } + } + static payEntranceFee() { + if (Safari.canPay()) { + // TODO: add increasing cost back + //typeof player.safariCostModifier == undefined ? 1 : player.safariCostModifier++; + App.game.wallet.loseAmount(Safari.cost()); + Safari.load(); + GameHelper.incrementObservable(App.game.statistics.safariTimesEntered, 1); + } + } + static canAccess() { + return App.game.keyItems.hasKeyItem(KeyItemType.Safari_ticket); + } + static getPlayerStartCoords() { + return [Math.floor((Safari.sizeX() - 1) / 2), Safari.sizeY() - 1]; + } + // Called by knockout once map is done rendering + static addPlayer() { + const [i, j] = Safari.getPlayerStartCoords(); + const topLeft = $('#safari-0-0').offset(); + const offset = { + top: 32 * j + topLeft.top - 24, + left: 32 * i + topLeft.left - 12, + }; + document.getElementById('sprite').classList.value = `walk${Safari.lastDirection}`; + $('#sprite').offset(offset); + Safari.playerXY.x = i; + Safari.playerXY.y = j; + Safari.origin = offset; + } + static move(dir) { + if (!Safari.inProgress()) { + return; + } + else if (!Safari.walking && !Safari.isMoving && !Safari.inBattle()) { + Safari.queue = []; + Safari.walking = true; + Safari.queue.unshift(dir); + Safari.startMoving(dir); + } + else { + if (dir) { + Safari.setNextDirection(dir); + } + } + } + static startMoving(dir) { + Safari.nextDirection = dir; + if (!Safari.isMoving) { + Safari.step(dir); + } + } + static step(direction) { + if (!Safari.inProgress()) { + return; + } + Safari.lastDirection = direction; + const directionOffset = Safari.directionToXY(direction); + Safari.isMoving = true; + const newPos = { + x: Safari.playerXY.x + directionOffset.x, + y: Safari.playerXY.y + directionOffset.y, + }; + // CSS class with the environment (for the sprite change) + let envClass = Safari.environmentCssClass(); + if (Safari.canMove(newPos.x, newPos.y)) { + const next = $(`#safari-${newPos.x}-${newPos.y}`).offset(); + Safari.steps++; + GameHelper.incrementObservable(App.game.statistics.safariStepsTaken, 1); + const offset = { + top: `+=${directionOffset.y * 32}`, + left: `+=${directionOffset.x * 32}`, + }; + document.getElementById('sprite').classList.value = `walk${direction} moving`; + $('#sprite').addClass(`${envClass}`); + Safari.playerXY.x = newPos.x; + Safari.playerXY.y = newPos.y; + Safari.activeEnvironment(Safari.getEnvironmentTile(Safari.playerXY.x, Safari.playerXY.y)); + // Re-call the class as the activeEnvironment may have changed + envClass = Safari.environmentCssClass(); + $('#sprite').animate(offset, Safari.moveSpeed, 'linear', () => { + Safari.checkBattle(); + Safari.checkItem(); + Safari.isMoving = false; + if (Safari.walking) { + if (!Safari.checkBattle() && Safari.queue[0]) { + Safari.step(Safari.queue[0]); + } + else { + document.getElementById('sprite').classList.value = `walk${direction}`; + $('#sprite').addClass(`${envClass}`); + } + } + else { + document.getElementById('sprite').classList.value = `walk${direction}`; + $('#sprite').addClass(`${envClass}`); + } + }); + App.game.breeding.progressEggs(1 + Math.floor(Safari.safariLevel() / 10)); + Safari.spawnPokemonCheck(); + Safari.despawnPokemonCheck(); + } + else { + document.getElementById('sprite').classList.value = `walk${direction}`; + $('#sprite').addClass(`${envClass}`); + setTimeout(() => { + Safari.walking = false; + Safari.isMoving = false; + if (Safari.queue[0]) { + Safari.isMoving = true; + Safari.walking = true; + Safari.step(Safari.queue[0]); + } + }, Safari.moveSpeed); + } + } + static spawnPokemonCheck() { + if (Safari.steps % 10 === 0 && Rand.boolean()) { + Safari.spawnRandomPokemon(); + } + } + static spawnItemCheck() { + const baseChance = 0.4; + const itemLevelModifier = (Safari.safariLevel() - 1) / 100; + if (Rand.chance(baseChance + itemLevelModifier)) { + Safari.spawnRandomItem(); + } + } + static despawnPokemonCheck() { + let index = Safari.pokemonGrid().length; + while (index-- > 0) { + if (--Safari.pokemonGrid()[index].steps <= 0) { + Safari.pokemonGrid.splice(index, 1); + } + } + } + static spawnRandomPokemon() { + const pos = Safari.generatePlaceableSpawnPosition(); + if (pos) { + const pokemon = SafariPokemon.random(Safari.getEnvironmentTile(pos.x, pos.y)); + pokemon.x = pos.x; + pokemon.y = pos.y; + pokemon.steps = Safari.grid.length + Safari.grid[0].length + Rand.floor(21); + Safari.pokemonGrid.push(pokemon); + } + } + static spawnRandomItem() { + if (!SafariItemController.currentRegionHasItems()) { + return; + } + const pos = Safari.generatePlaceableSpawnPosition(true); + if (pos) { + Safari.itemGrid.push(new SafariItem(pos.x, pos.y)); + } + } + static generatePlaceableSpawnPosition(isItem = false) { + let result = false; + let x = 0; + let y = 0; + let attempts = 0; + while (!result && attempts++ < Safari.maxPlacementAttempts) { + x = Rand.floor(Safari.grid[0].length); + y = Rand.floor(Safari.grid.length); + result = Safari.canPlaceAtPosition(x, y, isItem); + // Ignore ground requirement if needed, for Alola + if (attempts == Safari.maxPlacementAttempts && Safari.activeRegion() === GameConstants.Region.alola && isItem) { + isItem = false; + attempts = 0; + } + } + return result ? { x: x, y: y } : null; + } + static canPlaceAtPosition(x, y, isItem = false) { + // Items don't spawn on water, except in MJ Safari + const canPlace = !(isItem && GameConstants.SAFARI_WATER_BLOCKS.includes(Safari.grid[y][x])); + return Safari.canMove(x, y) && canPlace && + Safari.isAccessible(x, y) && + !(x == Safari.playerXY.x && y == Safari.playerXY.y) && + !Safari.pokemonGrid().some(p => p.x === x && p.y === y) && + !Safari.itemGrid().some(i => i.x === x && i.y === y); + } + static directionToXY(dir) { + let x = 0; + let y = 0; + switch (dir) { + case 'left': + x = -1; + break; + case 'up': + y = -1; + break; + case 'right': + x = 1; + break; + case 'down': + y = 1; + break; + } + return { x: x, y: y }; + } + static canMove(x, y) { + if (!Safari.isInMap(x, y)) { + return false; + } + return GameConstants.SAFARI_LEGAL_WALK_BLOCKS.includes(Safari.grid[y][x]); + } + static isInMap(x, y) { + return 0 <= y && y < Safari.grid.length && 0 <= x && x < Safari.grid[y].length; + } + static isAccessible(x, y) { + return Safari.accessibleTiles[y][x]; + } + static setNextDirection(direction) { + if (direction != Safari.lastDirection) { + if (Safari.queue[0] != direction) { + if (Safari.queue.length == 1) { + Safari.queue.unshift(direction); + } + else { + Safari.queue[0] = direction; + } + } + Safari.nextDirection = direction; + Safari.walking = true; + } + } + static stop(dir) { + for (let i = 0; i < Safari.queue.length; i++) { + if (Safari.queue[i] == dir) { + Safari.queue.splice(i, 1); + } + } + if (!Safari.queue[0]) { + Safari.walking = false; + } + } + static checkBattle() { + if (Safari.inBattle()) { + return false; + } + const pokemonOnPlayer = Safari.pokemonGrid().findIndex(p => p.x === Safari.playerXY.x && p.y === Safari.playerXY.y); + if (pokemonOnPlayer >= 0) { + SafariBattle.load(Safari.pokemonGrid()[pokemonOnPlayer]); + Safari.pokemonGrid.splice(pokemonOnPlayer, 1); + return true; + } + const currentTile = Safari.grid[Safari.playerXY.y][Safari.playerXY.x]; + if (currentTile === GameConstants.SafariTile.grass || GameConstants.SAFARI_WATER_BLOCKS.includes(currentTile)) { + // Reduce encounter chances for Magikarp Jump Safari. + const chance = Safari.activeRegion() === GameConstants.Region.alola ? GameConstants.SAFARI_MJ_BATTLE_CHANCE : GameConstants.SAFARI_BATTLE_CHANCE; + if (Rand.chance(chance)) { + SafariBattle.load(); + return true; + } + } + return false; + } + static getEnvironmentTile(x, y) { + if (!Safari.isInMap(x, y)) { + return null; + } + else if (GameConstants.SAFARI_WATER_BLOCKS.includes(Safari.grid[y][x])) { // Water environment + return SafariEnvironments.Water; + } + else { // Grass environment by default + return SafariEnvironments.Grass; + } + } + static checkItem() { + const itemOnPlayer = Safari.itemGrid().findIndex(p => p.x === Safari.playerXY.x && p.y === Safari.playerXY.y); + if (itemOnPlayer >= 0) { + const item = SafariItemController.getRandomItem(); + if (item == undefined) { + return; + } + const name = BagHandler.displayName(item); + BagHandler.gainItem(item); + GameHelper.incrementObservable(App.game.statistics.safariItemsObtained, 1); + Notifier.notify({ + message: `You found ${GameHelper.anOrA(name)} ${name}!`, + image: BagHandler.image(item), + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Items.dropped_item, + }); + Safari.itemGrid.splice(itemOnPlayer, 1); + } + } + static calculateStartPokeballs() { + return GameConstants.SAFARI_BASE_POKEBALL_COUNT; + } + static completed(shiny = false) { + // Check current region + if (SafariPokemonList.list[player.region]) { + // Check each pokemon within this zone + return SafariPokemonList.list[player.region]().every(poke => { + return App.game.party.alreadyCaughtPokemonByName(poke.name, shiny); + }); + } + return false; + } + static safariProgressTooltip() { + const tooltip = { trigger: 'hover', title: '' }; + const level = Safari.safariLevel(); + if (level == Safari.maxSafariLevel) { + tooltip.title = 'Max level reached'; + } + else { + tooltip.title = `${(Safari.safariExp() - Safari.expRequiredForLevel(level)).toLocaleString('en-US')} / ${(Safari.expRequiredForLevel(level + 1) - Safari.expRequiredForLevel(level)).toLocaleString('en-US')}`; + } + return tooltip; + } + static expRequiredForLevel(level) { + return Math.ceil(2000 * (Math.pow(1.2, (level - 1)) - 1)); + } + static environmentCssClass() { + return GameHelper.enumStrings(SafariEnvironments)[Safari.activeEnvironment()].toLowerCase(); + } +} +Safari.pokemonGrid = ko.observableArray([]); +Safari.itemGrid = ko.observableArray([]); +Safari.lastDirection = 'up'; +Safari.steps = 0; +Safari.walking = false; +Safari.isMoving = false; +Safari.queue = []; +Safari.playerXY = { 'x': 0, 'y': 0 }; +Safari.inProgress = ko.observable(false); +Safari.inBattle = ko.observable(false); +Safari.balls = ko.observable().extend({ numeric: 0 }); +Safari.activeRegion = ko.observable(GameConstants.Region.none); +Safari.activeEnvironment = ko.observable(SafariEnvironments.Grass); +Safari.maxPlacementAttempts = 20; +Safari.moveSpeed = 250; +// Safari level +Safari.maxSafariLevel = 40; +Safari.safariExp = ko.pureComputed(() => { + return App.game.statistics.safariRocksThrown() * 10 + + App.game.statistics.safariBaitThrown() * 5 + + App.game.statistics.safariBallsThrown() * 10 + + App.game.statistics.safariPokemonCaptured() * 50 + + App.game.statistics.safariShinyPokemonCaptured() * 50 * 4 + // Shiny increments both, so this adds up to 5x + App.game.statistics.safariItemsObtained() * 10; +}); +Safari.safariLevel = ko.pureComputed(() => { + const xp = Safari.safariExp(); + for (let i = 1; i <= Safari.maxSafariLevel; i++) { + if (xp < Safari.expRequiredForLevel(i)) { + return i - 1; + } + } + return Safari.maxSafariLevel; +}); +Safari.percentToNextSafariLevel = ko.pureComputed(() => { + const level = Safari.safariLevel(); + if (level === Safari.maxSafariLevel) { + return 100; + } + const expForNextLevel = Safari.expRequiredForLevel(level + 1) - Safari.expRequiredForLevel(level); + const expThisLevel = Safari.safariExp() - Safari.expRequiredForLevel(level); + return expThisLevel / expForNextLevel * 100; +}); +$(document).ready(() => { + // Add listeners to Safari dpad buttons + ['Up', 'Left', 'Down', 'Right'].forEach((dir) => { + const button = document.getElementById(`safari-dpad-${dir.toLowerCase()}`); + const keyDown = () => GameController.simulateKey(`Arrow${dir}`); + const keyUp = () => GameController.simulateKey(`Arrow${dir}`, 'up'); + button.addEventListener('mousedown', keyDown, { passive: false }); + button.addEventListener('mouseout', keyUp, { passive: false }); + button.addEventListener('mouseup', keyUp, { passive: false }); + button.addEventListener('touchstart', keyDown, { passive: false }); + button.addEventListener('touchend', keyUp, { passive: false }); + button.addEventListener('touchcancel', keyUp, { passive: false }); + }); + $('#safariModal').on('hide.bs.modal', () => { + Safari.inBattle(false); + SafariBattle.busy(false); + switch (player.region) { + case GameConstants.Region.kanto: + MapHelper.moveToTown('Safari Zone'); + break; + case GameConstants.Region.johto: + MapHelper.moveToTown('National Park'); + break; + case GameConstants.Region.sinnoh: + MapHelper.moveToTown('Great Marsh'); + break; + case GameConstants.Region.kalos: + MapHelper.moveToTown('Friend Safari'); + break; + case GameConstants.Region.alola: + MapHelper.moveToTown('Hoppy Town Fishing Pond'); + break; + default: + MapHelper.moveToTown(GameConstants.DockTowns[player.region]); + break; + } + }); +}); +class SafariBattle { + static get enemy() { + return SafariBattle._enemy(); + } + static set enemy(pokemon) { + SafariBattle._enemy(pokemon); + } + static load(enemy = SafariPokemon.random(Safari.activeEnvironment())) { + // Stop left over keypresses + GameController.simulateKey('ArrowUp', 'up'); + GameController.simulateKey('ArrowDown', 'up'); + GameController.simulateKey('ArrowLeft', 'up'); + GameController.simulateKey('ArrowRight', 'up'); + // Generate enemy + SafariBattle.enemy = enemy; + Safari.inBattle(true); + SafariBattle.text('What will you do?'); + SafariBattle.escapeAttempts = 0; + $('#safariBattleModal').modal({ backdrop: 'static', keyboard: false }); + // Shiny + const location = `${GameConstants.camelCaseToString(GameConstants.Region[Safari.activeRegion()])} Safari`; + if (enemy.shiny) { + App.game.logbook.newLog(LogBookTypes.SHINY, App.game.party.alreadyCaughtPokemon(enemy.id, true) + ? createLogContent.encounterShinyDupe({ + location: location, + pokemon: enemy.name, + }) + : createLogContent.encounterShiny({ + location: location, + pokemon: enemy.name, + })); + } + else if (!App.game.party.alreadyCaughtPokemon(enemy.id)) { + App.game.logbook.newLog(LogBookTypes.NEW, createLogContent.encounterWild({ + location: location, + pokemon: enemy.name, + })); + } + } + static throwBall() { + var _a; + if (Safari.inBattle() && !SafariBattle.busy()) { + SafariBattle.busy(true); + Safari.balls(Safari.balls() - 1); + SafariBattle.text('You throw a ball...'); + GameHelper.incrementObservable(App.game.statistics.safariBallsThrown, 1); + const targetOffset = $('#safariBattleModal .enemy').offset(); + targetOffset.left += 36; + targetOffset.top += 16; + const ballSpeed = SafariBattle.Speed.ballThrowAnim * SafariBattle.getTierMultiplier(); + const ptclhtml = SafariBattle.pokeball(); + (_a = SafariBattle.ballParticle) === null || _a === void 0 ? void 0 : _a.remove(); + SafariBattle.ballParticle = SafariBattle.dropParticle(ptclhtml, $('#safariBattleModal .pageItemFooter').offset(), targetOffset, ballSpeed, 'cubic-bezier(0,0,0.4,1)', true).css('z-index', 9999); + $('#safariBall').css('animation-duration', `${ballSpeed}ms`).addClass('spin'); + SafariBattle.delay(SafariBattle.Speed.ballThrowDelay) // throwing the ball + .then(SafariBattle.startCapture) // pokemon being sucked into ball + .then(SafariBattle.thenDelay(SafariBattle.Speed.enemyTransition)) + .then(SafariBattle.startBounce) // pokeball dropping to ground + .then(SafariBattle.thenDelay(SafariBattle.Speed.ballBounceDelay)) + .then(SafariBattle.calcCapture) // roll a dice for catching, use dice roll to determine how many pokeball rolls + .then(SafariBattle.startRoll) + .then(SafariBattle.finishCapture); // capture pokemon or break free + } + } + static delay(ms, useMultiplier = true) { + return new Promise((resolve, reject) => { + setTimeout(resolve, ms * (useMultiplier ? SafariBattle.getTierMultiplier() : 1)); + }); + } + static thenDelay(ms, useMultiplier = true) { + return function (pass) { + return SafariBattle.delay(ms, useMultiplier) + .then(() => pass); + }; + } + static startCapture() { + return new Promise((resolve, reject) => { + $('#safariBattleModal .enemy').css('transition-duration', `${SafariBattle.Speed.enemyTransition * SafariBattle.getTierMultiplier()}ms`); + $('#safariBattleModal .enemy').addClass('safariCapture'); + $('#safariBall').removeClass('spin'); + resolve(); + }); + } + static startBounce() { + return new Promise((resolve, reject) => { + $('#safariBattleModal .enemy > img').css('opacity', '0'); + const bounceSpeed = SafariBattle.Speed.ballBounceAnim * SafariBattle.getTierMultiplier(); + SafariBattle.ballParticle.css('animation-duration', `${bounceSpeed}ms`).addClass('bounce'); + resolve(); + }); + } + static calcCapture() { + return new Promise((resolve, reject) => { + const random = Math.random(); + const catchF = SafariBattle.enemy.catchFactor / 100; + const isCaught = random <= catchF; + const numRolls = isCaught ? 3 : Math.min(Math.floor(4 * (1 - random) / (1 - catchF)), 3); + resolve([isCaught, numRolls]); + }); + } + static startRoll([isCaught, numRolls], roll = 0) { + return new Promise((resolve, reject) => { + if (roll >= numRolls) { + $('#safariBall').removeClass('safari-roll-left safari-roll-right'); + return resolve([isCaught, numRolls]); + } + const delayLength = SafariBattle.Speed.ballRollAnim + SafariBattle.Speed.ballRollDelay * (roll != numRolls - 1 ? 1 : numRolls / 2); + SafariBattle.animateRoll(roll); + SafariBattle.delay(delayLength) + .then(() => { + resolve(SafariBattle.startRoll([isCaught, numRolls], roll + 1)); + }); + }); + } + static animateRoll(n) { + if (n == 0) { + const rollSpeed = SafariBattle.Speed.ballRollAnim * SafariBattle.getTierMultiplier(); + $('#safariBall').css('animation-duration', `${rollSpeed}ms`).addClass('safari-roll-left'); + } + else { + $('#safariBall').toggleClass('safari-roll-left').toggleClass('safari-roll-right'); + } + } + static finishCapture([isCaught, numRolls]) { + const isgameOver = Safari.balls() <= 0; + return new Promise((resolve, reject) => { + if (isCaught) { + SafariBattle.capturePokemon(); + if (!isgameOver) { + Safari.spawnItemCheck(); + } + $('#safariBall').css('filter', 'brightness(0.4) grayscale(100%)'); + SafariBattle.delay(SafariBattle.Speed.enemyCaught * (1 + SafariBattle.getTierMultiplier()) / 2, false) + .then(() => { + SafariBattle.ballParticle.remove(); + isgameOver ? SafariBattle.gameOver() : SafariBattle.endBattle(); + }); + } + else { + $('#safariBattleModal .enemy > img').css('opacity', '1'); + $('#safariBattleModal .enemy').removeClass('safariCapture'); + SafariBattle.text(SafariBattle.CATCH_MESSAGES[numRolls]); + SafariBattle.ballParticle.remove(); + SafariBattle.delay(SafariBattle.Speed.enemyEscape * (1 + SafariBattle.getTierMultiplier()) / 2, false) + .then(() => { + isgameOver ? SafariBattle.gameOver() : SafariBattle.enemyTurn(); + }); + } + }); + } + static capturePokemon() { + SafariBattle.text(`GOTCHA!
    ${SafariBattle.enemy.displayName} was caught!`); + GameHelper.incrementObservable(App.game.statistics.safariPokemonCaptured, 1); + if (SafariBattle.enemy.shiny) { + GameHelper.incrementObservable(App.game.statistics.safariShinyPokemonCaptured, 1); + } + const pokemonID = PokemonHelper.getPokemonByName(SafariBattle.enemy.name).id; + App.game.party.gainPokemonById(pokemonID, SafariBattle.enemy.shiny); + const partyPokemon = App.game.party.getPokemon(pokemonID); + partyPokemon.effortPoints += App.game.party.calculateEffortPoints(partyPokemon, SafariBattle.enemy.shiny, GameConstants.ShadowStatus.None, GameConstants.SAFARI_EP_YIELD); + switch (player.region) { + case (GameConstants.Region.johto): + const shinyModifier = SafariBattle.enemy.shiny ? GameConstants.BUG_SAFARI_SHINY_MODIFIER : 1; + const bugReward = Math.floor(partyPokemon.baseAttack / 5) * shinyModifier; + App.game.wallet.gainContestTokens(bugReward); + Notifier.notify({ + title: 'Bug Catching Contest', + message: ` You earned ${bugReward} Contest Tokens!`, + type: NotificationConstants.NotificationOption.primary, + timeout: 5000, + }); + break; + } + } + static throwBait() { + if (Safari.inBattle() && !SafariBattle.busy()) { + SafariBattle.busy(true); + const bait = SafariBattle.selectedBait(); + if (bait.amount() <= 0) { + SafariBattle.text(`You don't have enough ${bait.name}`); + SafariBattle.delay(SafariBattle.Speed.turnLength, false) + .then(() => { + SafariBattle.text('What will you do?'); + SafariBattle.busy(false); + }); + return; + } + SafariBattle.text(`You throw ${bait.useName} at ${SafariBattle.enemy.displayName}`); + GameHelper.incrementObservable(App.game.statistics.safariBaitThrown, 1); + bait.use(SafariBattle.enemy); + const enemy = $('#safariBattleModal .enemy').offset(); + enemy.left += 30; + enemy.top += 70; + SafariBattle.dropParticle(``, $('#safariBattleModal .pageItemFooter').offset(), enemy, SafariBattle.Speed.bait * SafariBattle.getTierMultiplier(), 'cubic-bezier(0,0,0.4,1)').css('z-index', 9999); + SafariBattle.delay(1.5 * SafariBattle.Speed.bait) + .then(() => SafariBattle.enemyTurn()); + } + } + static throwRock() { + if (Safari.inBattle() && !SafariBattle.busy()) { + SafariBattle.busy(true); + SafariBattle.text(`You throw a rock at ${SafariBattle.enemy.displayName}`); + GameHelper.incrementObservable(App.game.statistics.safariRocksThrown, 1); + SafariBattle.enemy.angry = Math.max(SafariBattle.enemy.angry, Rand.intBetween(2, 6)); + SafariBattle.enemy.eating = 0; + const enemyOffset = $('#safariBattleModal .enemy').offset(); + enemyOffset.left += 40; + enemyOffset.top += 10; + SafariBattle.dropParticle('', $('#safariBattleModal .pageItemFooter').offset(), enemyOffset, SafariBattle.Speed.rock * SafariBattle.getTierMultiplier(), 'cubic-bezier(0,0,0.4,1)').css('z-index', 9999); + SafariBattle.delay(SafariBattle.Speed.rock) + .then(() => { + const hitSplash = $('').html('').children().appendTo('#safariBattleModal'); + hitSplash.css({ 'position': 'absolute', 'opacity': 0.8, 'z-index': 9998 }); + hitSplash.offset(enemyOffset); + hitSplash.fadeOut(0.5 * SafariBattle.Speed.rock, () => { + hitSplash.remove(); + }); + }) + .then(SafariBattle.thenDelay(0.375 * SafariBattle.Speed.rock)) + .then(() => { + const newOffset = { + top: enemyOffset.top + 4, + left: enemyOffset.left - 20, + }; + const ang = $('').html('').children().appendTo('#safariBattleModal'); + ang.css({ 'position': 'absolute', 'z-index': 9999 }); + ang.offset(newOffset); + ang.addClass('pulse'); + return newOffset; + }) + .then(SafariBattle.thenDelay(0.4375 * SafariBattle.Speed.rock)) + .then((newOffset) => { + newOffset.top -= 10; + newOffset.left += 60; + $('#safariParticleAngry').offset(newOffset); + }) + .then(SafariBattle.thenDelay(0.4375 * SafariBattle.Speed.rock)) + .then(() => { + $('#safariParticleAngry').remove(); + }); + SafariBattle.delay(2.5 * SafariBattle.Speed.rock) + .then(() => SafariBattle.enemyTurn()); + } + } + static run() { + return __awaiter(this, void 0, void 0, function* () { + if (Safari.inBattle() && !SafariBattle.busy()) { + SafariBattle.busy(true); + if (SafariBattle.enemy.shiny) { + if (!(yield Notifier.confirm({ + title: 'Shiny Encounter', + message: 'Are you sure you want to run away from this battle?', + type: NotificationConstants.NotificationOption.danger, + confirm: 'Yes', + cancel: 'No', + }))) { + SafariBattle.busy(false); + return; + } + } + SafariBattle.text('You flee.'); + SafariBattle.delay(SafariBattle.Speed.turnLength) + .then(() => SafariBattle.endBattle()); + } + }); + } + static enemyTurn() { + // Enemy turn to flee; + if (Rand.chance(SafariBattle.enemy.escapeFactor / 100)) { + SafariBattle.text(`${SafariBattle.enemy.displayName} has fled.`); + SafariBattle.delay(SafariBattle.Speed.enemyFlee) + .then(() => SafariBattle.endBattle()); + return; + } + else if (SafariBattle.enemy.eating > 1) { + SafariBattle.text(`${SafariBattle.enemy.displayName} is eating...`); + } + else if (SafariBattle.enemy.angry > 1) { + SafariBattle.text(`${SafariBattle.enemy.displayName} is angry!`); + } + else { + SafariBattle.text(`${SafariBattle.enemy.displayName} is watching carefully...`); + } + SafariBattle.enemy.eating = Math.max(0, SafariBattle.enemy.eating - 1); + SafariBattle.enemy.angry = Math.max(0, SafariBattle.enemy.angry - 1); + SafariBattle.delay(SafariBattle.Speed.turnLength, false) + .then(() => { + SafariBattle.text('What will you do?'); + SafariBattle.busy(false); + }); + } + static endBattle() { + $('#safariBattleModal').one('hidden.bs.modal', () => { + Safari.inBattle(false); + SafariBattle.busy(false); + }).modal('hide'); + } + static gameOver() { + SafariBattle.text(GameConstants.SAFARI_OUT_OF_BALLS); + SafariBattle.delay(SafariBattle.Speed.gameOver) + .then(() => { + Safari.inBattle(false); + Safari.inProgress(false); + SafariBattle.busy(false); + $('#safariBattleModal').modal('hide'); + $('#safariModal').modal('hide'); + }); + } + static dropParticle(html, pos, target, time = 2, top, persistentParticle = false) { + const p = $('').html(html).children().appendTo('#safariBattleModal'); + p.css('position', 'absolute'); + p.offset(pos); + if (!top) { + top = 'cubic-bezier(0.6, -0.3, 0.7, 0)'; + } + p[0].style.transition = `left ${time}ms linear, top ${time}ms ${top}`; + p.offset(target); + if (!persistentParticle) { + setTimeout(() => { + p.fadeOut(); + }, time - 200); + setTimeout(() => { + p.remove(); + }, time); + } + return p; + } + static getTierMultiplier() { + return SafariBattle.tierMultiplier(Safari.safariLevel()); + } + static tierMultiplier(level) { + const TIERS = [0, 10, 20, 30, 40]; + const MULTIPLIERS = [1, 0.90, 0.75, 0.57, 0.45]; + let tier = 0; + for (let i = 0; i < TIERS.length; i++) { + if (level >= TIERS[i]) { + tier = i; + } + } + return MULTIPLIERS[tier]; + } + static pokeball() { + switch (player.region) { + case GameConstants.Region.johto: + return '
    '; + default: + return '
    '; + } + } +} +SafariBattle._enemy = ko.observable(); +SafariBattle.busy = ko.observable(false).extend({ boolean: null }); +SafariBattle.text = ko.observable('What will you do?'); +SafariBattle.escapeAttempts = 0; +SafariBattle.selectedBait = ko.observable(BaitList.Bait); +(function (SafariBattle) { + SafariBattle.Speed = { + ballThrowAnim: 700, + ballThrowDelay: 825, + ballBounceAnim: 1200, + ballBounceDelay: 1500, + ballRollAnim: 575, + ballRollDelay: 475, + enemyTransition: 700, + enemyFlee: 1000, + enemyCaught: 1700, + enemyEscape: 1000, + bait: 1000, + rock: 800, + turnLength: 1500, + gameOver: 2000, + }; + SafariBattle.CATCH_MESSAGES = [ + 'Oh, no!
    The Pokémon broke free!', + 'Aww! It appeared to be caught!', + 'Aargh! Almost had it!', + 'Shoot! It was so close, too!', + ]; +})(SafariBattle || (SafariBattle = {})); +class SafariBody { + constructor() { + } + getTileNeighbours(x, y) { + const ret = Array(4); //["N", "E", "S", "W"] + const cross = Array(4); //["NE", "SE", "SW", "NW"] + if (x === 0) { + ret[3] = false; + } + else { + ret[3] = this.grid[y][x - 1] !== GameConstants.SafariTile.ground; + } + if (y === 0) { + ret[0] = false; + } + else { + ret[0] = this.grid[y - 1][x] !== GameConstants.SafariTile.ground; + } + if (x === this.grid[0].length - 1) { + ret[1] = false; + } + else { + ret[1] = this.grid[y][x + 1] !== GameConstants.SafariTile.ground; + } + if (y === this.grid.length - 1) { + ret[2] = false; + } + else { + ret[2] = this.grid[y + 1][x] !== GameConstants.SafariTile.ground && this.grid[y + 1][x] !== undefined; + } + if (ret.equals([true, true, true, true])) { + cross[0] = this.grid[y - 1][x + 1] !== GameConstants.SafariTile.ground; + cross[1] = this.grid[y + 1][x + 1] !== GameConstants.SafariTile.ground; + cross[2] = this.grid[y + 1][x - 1] !== GameConstants.SafariTile.ground; + cross[3] = this.grid[y - 1][x - 1] !== GameConstants.SafariTile.ground; + } + return { + plus: ret, + cross: cross, + }; + } + //duplicated in DungeonMap + static shuffle(a) { + let j, x, i; + for (i = a.length; i; i--) { + j = Rand.floor(i); + x = a[i - 1]; + a[i - 1] = a[j]; + a[j] = x; + } + } + maxY() { + return this.grid.length; + } + maxX() { + let max = 0; + for (const row of this.grid) { + if (row.length > max) { + max = row.length; + } + } + return max; + } +} +class SandBody extends SafariBody { + constructor(x = SandBody.randomInt(), y = SandBody.randomInt(), type = 'sand') { + super(); + this.edgeDetectCheck = GameConstants.SafariTile.sandC; + this.type = type; + this.grid = this.generateCube(x, y); + this.edgeDetect(); + } + static randomInt() { + return Rand.intBetween(3, 5); + } + generateCube(sizeX, sizeY) { + let body = []; + for (let i = 0; i < sizeY; i++) { + const row = [...Array(sizeX)].map(Number.prototype.valueOf, 0); + body.push(row); + } + const amount = this.type === 'fence' ? 20 : 4; + for (let i = 0; i < amount; i++) { + const x = Rand.floor(sizeX - 2); + const y = Rand.floor(sizeY - 2); + body = SandBody.addCube(x, y, body); + } + return body; + } + static addCube(x, y, body) { + if (Rand.boolean()) { + body[y + 2][x] = GameConstants.SafariTile.sandC; + body[y + 2][x + 1] = GameConstants.SafariTile.sandC; + body[y][x + 2] = GameConstants.SafariTile.sandC; + body[y + 1][x + 2] = GameConstants.SafariTile.sandC; + body[y + 2][x + 2] = GameConstants.SafariTile.sandC; + } + body[y][x] = GameConstants.SafariTile.sandC; + body[y + 1][x] = GameConstants.SafariTile.sandC; + body[y][x + 1] = GameConstants.SafariTile.sandC; + body[y + 1][x + 1] = GameConstants.SafariTile.sandC; + return body; + } + edgeDetect() { + for (let i = 0; i < this.grid.length; i++) { + for (let j = 0; j < this.grid[i].length; j++) { + if (this.grid[i][j] === this.edgeDetectCheck) { + this.grid[i][j] = this.getNumber(this.getTileNeighbours(j, i)); + } + } + } + } + getNumber(neighbours) { + const plus = neighbours.plus; + const cross = neighbours.cross; + if (plus.equals([false, true, true, false])) { + return GameConstants.SafariTile.sandUL; + } + if (plus.equals([false, true, true, true])) { + return GameConstants.SafariTile.sandU; + } + if (plus.equals([false, false, true, true])) { + return GameConstants.SafariTile.sandUR; + } + if (plus.equals([true, true, true, false])) { + return GameConstants.SafariTile.sandL; + } + if (plus.equals([true, true, true, true])) { + if (!cross[0]) { + return GameConstants.SafariTile.sandURinverted; + } + if (!cross[1]) { + return GameConstants.SafariTile.sandDRinverted; + } + if (!cross[2]) { + return GameConstants.SafariTile.sandDLinverted; + } + if (!cross[3]) { + return GameConstants.SafariTile.sandULinverted; + } + return GameConstants.SafariTile.sandC; + } + if (plus.equals([true, false, true, true])) { + return GameConstants.SafariTile.sandR; + } + if (plus.equals([true, true, false, false])) { + return GameConstants.SafariTile.sandDL; + } + if (plus.equals([true, true, false, true])) { + return GameConstants.SafariTile.sandD; + } + if (plus.equals([true, false, false, true])) { + return GameConstants.SafariTile.sandDR; + } + return GameConstants.SafariTile.grass; + } +} +class FenceBody extends SandBody { + constructor() { + super(7, 7, 'fence'); + this.edgeDetectCheck = 0; + this.openFence(); + } + getNumber(neighbours) { + const plus = neighbours.plus; + const cross = neighbours.cross; + if (plus.equals([false, true, true, false])) { + return GameConstants.SafariTile.fenceUL; + } + if (plus.equals([false, true, true, true])) { + return GameConstants.SafariTile.fenceU; + } + if (plus.equals([false, false, true, true])) { + return GameConstants.SafariTile.fenceUR; + } + if (plus.equals([true, true, true, false])) { + return GameConstants.SafariTile.fenceL; + } + if (plus.equals([true, true, true, true])) { + if (!cross[0]) { + return GameConstants.SafariTile.fenceDRend; + } + if (!cross[1]) { + return GameConstants.SafariTile.fenceURend; + } + if (!cross[2]) { + return GameConstants.SafariTile.fenceULend; + } + if (!cross[3]) { + return GameConstants.SafariTile.fenceDLend; + } + return GameConstants.SafariTile.grass; + } + if (plus.equals([true, false, true, true])) { + return GameConstants.SafariTile.fenceR; + } + if (plus.equals([true, true, false, false])) { + return GameConstants.SafariTile.fenceDL; + } + if (plus.equals([true, true, false, true])) { + return GameConstants.SafariTile.fenceD; + } + if (plus.equals([true, false, false, true])) { + return GameConstants.SafariTile.fenceDR; + } + return GameConstants.SafariTile.grass; + } + openFence() { + const removedTiles = []; + const options = [GameConstants.SafariTile.fenceU, GameConstants.SafariTile.fenceL, GameConstants.SafariTile.fenceR, GameConstants.SafariTile.fenceD]; + const pick = Rand.fromArray(options); + for (let i = 0; i < this.grid.length; i++) { + for (let j = 0; j < this.grid[0].length; j++) { + if (this.grid[i][j] === pick) { + if (pick == GameConstants.SafariTile.fenceL || pick == GameConstants.SafariTile.fenceR) { // Only tiles connected to the left/right fence tiles are broken + removedTiles.push({ x: j, y: i }); + } + this.grid[i][j] = GameConstants.SafariTile.ground; + } + } + } + // Check tiles above and below the removed ones to avoid broken fences tiles + removedTiles === null || removedTiles === void 0 ? void 0 : removedTiles.map((pos) => { + const tileAbove = this.grid[pos.y - 1] ? this.grid[pos.y - 1][pos.x] : undefined; + const tileBelow = this.grid[pos.y + 1] ? this.grid[pos.y + 1][pos.x] : undefined; + switch (pick) { + case GameConstants.SafariTile.fenceL: // Left fence tile + if (tileAbove === GameConstants.SafariTile.fenceUL || tileAbove === GameConstants.SafariTile.fenceULend) { + this.grid[pos.y - 1][pos.x] = GameConstants.SafariTile.fenceU; + } + if (tileBelow === GameConstants.SafariTile.fenceDL || tileBelow === GameConstants.SafariTile.fenceDLend) { + this.grid[pos.y + 1][pos.x] = GameConstants.SafariTile.fenceD; + } + break; + case GameConstants.SafariTile.fenceR: // Right fence tile + if (tileAbove === GameConstants.SafariTile.fenceUR || tileAbove === GameConstants.SafariTile.fenceURend) { + this.grid[pos.y - 1][pos.x] = GameConstants.SafariTile.fenceU; + } + if (tileBelow === GameConstants.SafariTile.fenceDR || tileBelow === GameConstants.SafariTile.fenceDRend) { + this.grid[pos.y + 1][pos.x] = GameConstants.SafariTile.fenceD; + } + break; + default: + } + }); + } +} +class WaterBody extends SafariBody { + constructor(x = Rand.intBetween(3, 5), y = Rand.intBetween(3, 5)) { + super(); + const body = []; + for (let i = 0; i < y; i++) { + const row = []; + for (let j = 0; j < x; j++) { + if (i === 0) { + if (j === 0) { + row.push(GameConstants.SafariTile.waterUL); + } + else if (j < x - 1) { + row.push(GameConstants.SafariTile.waterU); + } + else if (j === x - 1) { + row.push(GameConstants.SafariTile.waterUR); + } + } + else if (i < y - 1) { + if (j === 0) { + row.push(GameConstants.SafariTile.waterL); + } + else if (j < x - 1) { + row.push(GameConstants.SafariTile.waterC); + } + else if (j === x - 1) { + row.push(GameConstants.SafariTile.waterR); + } + } + else if (i === y - 1) { + if (j === 0) { + row.push(GameConstants.SafariTile.waterDL); + } + else if (j < x - 1) { + row.push(GameConstants.SafariTile.waterD); + } + else if (j === x - 1) { + row.push(GameConstants.SafariTile.waterDR); + } + } + } + body.push(row); + } + this.grid = body; + this.type = 'water'; + } +} +class GrassBody extends SafariBody { + constructor() { + super(); + const x = Rand.intBetween(4, 6); + const y = Rand.intBetween(4, 6); + const body = []; + for (let i = 0; i < y; i++) { + const row = []; + for (let j = 0; j < x; j++) { + if (j < x * 2 / 3 - 1) { + row.push(GameConstants.SafariTile.grass); + } + else { + row.push(GameConstants.SafariTile.ground); + } + } + SafariBody.shuffle(row); + body.push(row); + } + this.grid = body; + this.fillHoles(); + this.type = 'grass'; + } + fillHoles() { + for (let i = 0; i < this.grid.length; i++) { + for (let j = 0; j < this.grid[0].length; j++) { + if (this.grid[i][j] === GameConstants.SafariTile.ground) { + if (i !== 0 && i !== this.grid.length - 1) { + if (this.grid[i - 1][j] === GameConstants.SafariTile.grass && this.grid[i + 1][j] === GameConstants.SafariTile.grass) { + this.grid[i][j] = GameConstants.SafariTile.grass; + } + } + } + } + } + for (let i = 0; i < this.grid.length; i++) { + for (let j = 0; j < this.grid[0].length; j++) { + if (this.grid[i][j] === GameConstants.SafariTile.ground) { + if (j !== 0 && j !== this.grid[0].length - 1) { + if (this.grid[i][j - 1] === GameConstants.SafariTile.grass && this.grid[i][j + 1] === GameConstants.SafariTile.grass) { + this.grid[i][j] = GameConstants.SafariTile.grass; + } + } + } + } + } + } +} +class TreeBody extends SafariBody { + constructor() { + super(); + this.grid = [ + [GameConstants.SafariTile.treeTopL, GameConstants.SafariTile.treeTopC, GameConstants.SafariTile.treeTopR], + [GameConstants.SafariTile.treeLeavesL, GameConstants.SafariTile.treeLeavesC, GameConstants.SafariTile.treeLeavesR], + [GameConstants.SafariTile.treeTrunkL, GameConstants.SafariTile.treeTrunkC, GameConstants.SafariTile.treeTrunkR], + [GameConstants.SafariTile.treeRootsL, GameConstants.SafariTile.treeRootsC, GameConstants.SafariTile.treeRootsR], + ]; + this.type = 'tree'; + } +} +class LandBody extends SafariBody { + constructor(x, y) { + super(); + this.grid = new Array(y - 2).fill(new Array(x - 2).fill(GameConstants.SafariTile.sandC)); + this.grid[0].unshift(GameConstants.SafariTile.waterR); + this.grid[0].push(GameConstants.SafariTile.waterL); + this.grid.unshift([GameConstants.SafariTile.waterDRCorner, ...new Array(x - 2).fill(GameConstants.SafariTile.waterD), GameConstants.SafariTile.waterDLCorner]); + this.grid.push([GameConstants.SafariTile.waterURCorner, ...new Array(x - 2).fill(GameConstants.SafariTile.waterU), GameConstants.SafariTile.waterULCorner]); + this.type = 'land'; + } +} +class ShapedLandBody extends SafariBody { + /** Replace illegal configurations and place edge tiles */ + fulfill() { + let change = false; + const UP = 1, UPRIGHT = 2, RIGHT = 4, DOWNRIGHT = 8, DOWN = 16, DOWNLEFT = 32, LEFT = 64, UPLEFT = 128; + // We prevent tiles whose significant edges are more than two or not adjacent + // Otherwise, we would need something like 50 different sprites... + do { + change = false; + this.grid.forEach((row, y) => { + row.forEach((cell, x) => { + var _a, _b, _c, _d, _e, _f; + if (cell === GameConstants.SafariTile.sandC) { + return; + } + let mapValue = 0; + let tile = cell; + if (((_a = this.grid[y - 1]) === null || _a === void 0 ? void 0 : _a[x]) === GameConstants.SafariTile.sandC) { + mapValue += UP; + } + if (((_b = this.grid[y + 1]) === null || _b === void 0 ? void 0 : _b[x]) === GameConstants.SafariTile.sandC) { + mapValue += DOWN; + } + if (this.grid[y][x - 1] === GameConstants.SafariTile.sandC) { + mapValue += LEFT; + } + if (this.grid[y][x + 1] === GameConstants.SafariTile.sandC) { + mapValue += RIGHT; + } + if (((_c = this.grid[y - 1]) === null || _c === void 0 ? void 0 : _c[x - 1]) === GameConstants.SafariTile.sandC && (mapValue & (UP + LEFT)) === 0) { + mapValue += UPLEFT; + } + if (((_d = this.grid[y - 1]) === null || _d === void 0 ? void 0 : _d[x + 1]) === GameConstants.SafariTile.sandC && (mapValue & (UP + RIGHT)) === 0) { + mapValue += UPRIGHT; + } + if (((_e = this.grid[y + 1]) === null || _e === void 0 ? void 0 : _e[x + 1]) === GameConstants.SafariTile.sandC && (mapValue & (DOWN + RIGHT)) === 0) { + mapValue += DOWNRIGHT; + } + if (((_f = this.grid[y + 1]) === null || _f === void 0 ? void 0 : _f[x - 1]) === GameConstants.SafariTile.sandC && (mapValue & (DOWN + LEFT)) === 0) { + mapValue += DOWNLEFT; + } + switch (mapValue) { + case 0: + tile = GameConstants.SafariTile.ground; + break; + case UP: + tile = GameConstants.SafariTile.waterU; + break; + case DOWN: + tile = GameConstants.SafariTile.waterD; + break; + case LEFT: + tile = GameConstants.SafariTile.waterL; + break; + case RIGHT: + tile = GameConstants.SafariTile.waterR; + break; + case UP | LEFT: + tile = GameConstants.SafariTile.waterUL; + break; + case UP | RIGHT: + tile = GameConstants.SafariTile.waterUR; + break; + case DOWN | LEFT: + tile = GameConstants.SafariTile.waterDL; + break; + case DOWN | RIGHT: + tile = GameConstants.SafariTile.waterDR; + break; + case UPRIGHT: + tile = GameConstants.SafariTile.waterURCorner; + break; + case UPLEFT: + tile = GameConstants.SafariTile.waterULCorner; + break; + case DOWNRIGHT: + tile = GameConstants.SafariTile.waterDRCorner; + break; + case DOWNLEFT: + tile = GameConstants.SafariTile.waterDLCorner; + break; + // Illegal water tile + default: + change = true; + tile = GameConstants.SafariTile.sandC; + } + this.grid[y][x] = tile; + }); + }); + } while (change); + } + trim() { + let change = false; + do { + change = false; + if (this.grid[this.grid.length - 1].every(tile => tile === GameConstants.SafariTile.ground)) { + this.grid.pop(); + change = true; + } + if (this.grid[0].every(tile => tile === GameConstants.SafariTile.ground)) { + this.grid.shift(); + change = true; + } + } while (change); + do { + change = false; + if (this.grid.every(row => row[0] === GameConstants.SafariTile.ground)) { + this.grid.forEach(r => r.shift()); + change = true; + } + if (this.grid.every(row => row[row.length - 1] === GameConstants.SafariTile.ground)) { + this.grid.forEach(r => r.pop()); + change = true; + } + } while (change); + } + /** sand is temporarily used as ground, because ground is temporarily used as water. This so we do not change too much code everywhere */ + constructor() { + super(); + this.type = 'land'; + const tileArray = []; + // The chance is weird, but it makes well-sized islands + while (tileArray.length < 9 && Rand.chance(1 + tileArray.length / 5)) { + tileArray.push(GameConstants.SafariTile.sandC); + } + // Fill the rest with "water" tiles + while (tileArray.length < 9) { + tileArray.push(GameConstants.SafariTile.ground); + } + LandBody.shuffle(tileArray); + this.grid = []; + while (tileArray.length > 0) { + this.grid.push(tileArray.splice(0, 3)); + } + this.fulfill(); + // Fulfill is directional so flippings will make it look more random + if (Rand.boolean()) { + this.grid.reverse(); + } + if (Rand.boolean()) { + this.grid.forEach(r => r.reverse()); + } + this.grid.push(new Array(3).fill(GameConstants.SafariTile.ground)); + this.grid.unshift(new Array(3).fill(GameConstants.SafariTile.ground)); + this.grid.forEach(r => { + r.push(GameConstants.SafariTile.ground); + r.unshift(GameConstants.SafariTile.ground); + }); + this.fulfill(); + this.trim(); + // https://static.wixstatic.com/media/997b44_90b0ef0cb8ef477c9d750565def78d0b~mv2.gif + const landSize = this.grid.flat().reduce((acc, t) => acc + +(t === GameConstants.SafariTile.sandC), 0); + this.grid.forEach((r, y) => { + r.forEach((t, x) => { + if (t === GameConstants.SafariTile.sandC && Rand.chance(Math.sqrt(landSize - 3) / 6)) { + this.grid[y][x] = GameConstants.SafariTile.grass; + } + }); + }); + } +} +Array.prototype.equals = function (array) { + // if the other array is a falsy value, return + if (!array) { + return false; + } + // compare lengths - can save a lot of time + if (this.length != array.length) { + return false; + } + for (let i = 0, l = this.length; i < l; i++) { + // Check if we have nested arrays + if (this[i] instanceof Array && array[i] instanceof Array) { + // recurse into the nested arrays + if (!this[i].equals(array[i])) { + return false; + } + } + else if (this[i] != array[i]) { + // Warning - two different object instances will never be equal: {x:20} != {x:20} + return false; + } + } + return true; +}; +class SafariItem { + constructor(x, y) { + this.x = x; + this.y = y; + } +} +class SafariItemController { + static getRandomItem() { + if (!SafariItemController.list[player.region]) { + return undefined; + } + const list = SafariItemController.list[player.region].filter((i) => (!i.requirement || i.requirement.isCompleted()) && BagHandler.isAvailable(i.item)); + return Rand.fromWeightedArray(list.map((i) => i.item), list.map((i) => i.weight)); + } + static currentRegionHasItems() { + if (SafariItemController.getRandomItem()) { + return true; + } + return false; + } +} +SafariItemController.list = { + [GameConstants.Region.kanto]: [ + { item: { id: 'Razz', type: ItemType.berry }, weight: 1.8 }, + { item: { id: 'Nanab', type: ItemType.berry }, weight: 1.8 }, + { item: { id: 'Pinap', type: ItemType.berry }, weight: 1.8 }, + { item: { id: 'Sitrus', type: ItemType.berry }, weight: 1.8 }, + { item: { id: 'Oran', type: ItemType.berry }, weight: 1.8 }, + { item: { id: 'Leaf Stone', type: ItemType.underground }, weight: 0.25 }, + { item: { id: 'Fire Stone', type: ItemType.underground }, weight: 0.25 }, + { item: { id: 'Thunder Stone', type: ItemType.underground }, weight: 0.25 }, + { item: { id: 'Water Stone', type: ItemType.underground }, weight: 0.25 }, + { item: { id: 'MediumRestore', type: ItemType.item }, weight: 2.25 }, + { item: { id: 'LargeRestore', type: ItemType.item }, weight: 1.25 }, + { item: { id: 'Protein', type: ItemType.item }, weight: 0.25 }, + { item: { id: 'Rare_Candy', type: ItemType.item }, weight: 1 }, + { item: { id: 'Revive', type: ItemType.underground }, weight: 2.5 }, + { item: { id: 'Max Revive', type: ItemType.underground }, weight: 1.5 }, + { item: { id: 'Exeggcute (Single)', type: ItemType.item }, weight: 0.25, requirement: new MultiRequirement([new SafariLevelRequirement(5), new ObtainedPokemonRequirement('Exeggcute')]) }, + { item: { id: 'Pinsirite', type: ItemType.item }, weight: 1, requirement: new MultiRequirement([new MaxRegionRequirement(GameConstants.Region.kalos), new ObtainedPokemonRequirement('Pinsir'), new SafariLevelRequirement(10)]) }, + ], + [GameConstants.Region.johto]: [ + { item: { id: 'Nestball', type: ItemType.item }, weight: 1 }, + { item: { id: 'Fastball', type: ItemType.item }, weight: 1 }, + { item: { id: 'Luxuryball', type: ItemType.item }, weight: 1 }, + { item: { id: 'MediumRestore', type: ItemType.item }, weight: 1 }, + { item: { id: 'LargeRestore', type: ItemType.item }, weight: 1 }, + { item: { id: 'Boost_Mulch', type: ItemType.item }, weight: 2 }, + { item: { id: 'Rich_Mulch', type: ItemType.item }, weight: 2 }, + { item: { id: 'Surprise_Mulch', type: ItemType.item }, weight: 2 }, + { item: { id: 'Amaze_Mulch', type: ItemType.item }, weight: 2 }, + { item: { id: 'Freeze_Mulch', type: ItemType.item }, weight: 2 }, + { item: { id: 'Berry_Shovel', type: ItemType.item }, weight: 1 }, + { item: { id: 'Mulch_Shovel', type: ItemType.item }, weight: 1 }, + { item: { id: 'Rare_Candy', type: ItemType.item }, weight: 1 }, + { item: { id: 'Sun Stone', type: ItemType.underground }, weight: 1 }, + { item: { id: 'Everstone', type: ItemType.underground }, weight: 1 }, + ], + [GameConstants.Region.sinnoh]: [ + { item: { id: 'LargeRestore', type: ItemType.item }, weight: 1 }, + { item: { id: 'Calcium', type: ItemType.item }, weight: 0.25 }, + { item: { id: 'Rare_Candy', type: ItemType.item }, weight: 1 }, + { item: { id: 'Black Shard', type: ItemType.underground }, weight: 1 }, + { item: { id: 'Crimson Shard', type: ItemType.underground }, weight: 1 }, + { item: { id: 'Lime Shard', type: ItemType.underground }, weight: 1 }, + { item: { id: 'White Shard', type: ItemType.underground }, weight: 1 }, + { item: { id: 'Dawn Stone', type: ItemType.underground }, weight: 0.5 }, + { item: { id: 'Dusk Stone', type: ItemType.underground }, weight: 0.5 }, + { item: { id: 'Shiny Stone', type: ItemType.underground }, weight: 0.5 }, + { item: { id: 'Odd Keystone', type: ItemType.underground }, weight: 1 }, + { item: { id: 'Draco Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Dread Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Earth Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Fist Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Flame Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Icicle Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Insect Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Iron Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Meadow Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Mind Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Pixie Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Sky Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Splash Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Spooky Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Stone Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Toxic Plate', type: ItemType.underground }, weight: 0.1 }, + { item: { id: 'Zap Plate', type: ItemType.underground }, weight: 0.1 }, + ], + [GameConstants.Region.kalos]: [ + { item: { id: 'Mago', type: ItemType.berry }, weight: 1.95 }, + { item: { id: 'Iapapa', type: ItemType.berry }, weight: 1.95 }, + { item: { id: 'Hondew', type: ItemType.berry }, weight: 1.95 }, + { item: { id: 'Tamato', type: ItemType.berry }, weight: 1.95 }, + { item: { id: 'Durin', type: ItemType.berry }, weight: 1.95 }, + { item: { id: 'Shiny Stone', type: ItemType.underground }, weight: 0.33 }, + { item: { id: 'Dusk Stone', type: ItemType.underground }, weight: 0.33 }, + { item: { id: 'Dawn Stone', type: ItemType.underground }, weight: 0.34 }, + { item: { id: 'Carbos', type: ItemType.item }, weight: 0.25 }, + { item: { id: 'Calcium', type: ItemType.item }, weight: 0.25 }, + { item: { id: 'Rare_Candy', type: ItemType.item }, weight: 1 }, + { item: { id: 'Duskball', type: ItemType.item }, weight: 2 }, + { item: { id: 'Luxuryball', type: ItemType.item }, weight: 2 }, + { item: { id: 'Repeatball', type: ItemType.item }, weight: 1.5 }, + { item: { id: 'Star Piece', type: ItemType.underground }, weight: 1 }, + { item: { id: 'Exeggcute (Single)', type: ItemType.item }, weight: 0.25, requirement: new MultiRequirement([new SafariLevelRequirement(5), new ObtainedPokemonRequirement('Exeggcute')]) }, + { item: { id: 'Scizorite', type: ItemType.item }, weight: 1, requirement: new MultiRequirement([new MaxRegionRequirement(GameConstants.Region.kalos), new ObtainedPokemonRequirement('Scizor'), new SafariLevelRequirement(15)]) }, + ], + [GameConstants.Region.alola]: [ + { item: { id: 'Coba', type: ItemType.berry }, weight: 2 }, + { item: { id: 'Iapapa', type: ItemType.berry }, weight: 2 }, + { item: { id: 'Belue', type: ItemType.berry }, weight: 2 }, + { item: { id: 'Figy', type: ItemType.berry }, weight: 2 }, + { item: { id: 'Kelpsy', type: ItemType.berry }, weight: 2 }, + { item: { id: 'Damp Rock', type: ItemType.underground }, weight: 1 }, + { item: { id: 'Protein', type: ItemType.item }, weight: 0.5 }, + { item: { id: 'Carbos', type: ItemType.item }, weight: 0.5 }, + { item: { id: 'Magikarp_Biscuit', type: ItemType.item }, weight: 4 }, + { item: { id: 'Diveball', type: ItemType.item }, weight: 2 }, + { item: { id: 'Repeatball', type: ItemType.item }, weight: 2 }, + ], +}; +class SafariPokemon { + constructor(name, sprite) { + this.shadow = GameConstants.ShadowStatus.None; + // Used for overworld sprites + this.x = 0; + this.y = 0; + this.steps = 0; + const data = PokemonHelper.getPokemonByName(name); + this.name = data.name; + this.id = data.id; + this.type1 = data.type1; + this.type2 = data.type2; + this.shiny = PokemonFactory.generateShiny(GameConstants.SHINY_CHANCE_SAFARI); + this._displayName = PokemonHelper.displayName(name); + this.gender = PokemonFactory.generateGender(data.gender.femaleRatio, data.gender.type); + PokemonHelper.incrementPokemonStatistics(this.id, GameConstants.PokemonStatisticsType.Encountered, this.shiny, this.gender, GameConstants.ShadowStatus.None); + // Shiny + if (this.shiny) { + Notifier.notify({ + message: `✨ You encountered a shiny ${this.displayName}! ✨`, + pokemonImage: PokemonHelper.getImage(this.id, this.shiny, this.gender), + type: NotificationConstants.NotificationOption.warning, + sound: NotificationConstants.NotificationSound.General.shiny_long, + setting: NotificationConstants.NotificationSetting.General.encountered_shiny, + }); + } + this.baseCatchFactor = data.catchRate * 1 / 6; + this.baseEscapeFactor = 30; + this._angry = ko.observable(0); + this._eating = ko.observable(0); + this._eatingBait = ko.observable(BaitType.Bait); + this.levelModifier = (Safari.safariLevel() - 1) / 50; + switch (sprite) { + case 'base': + this.spriteID = Math.floor(this.id); + break; + case 'self': + this.spriteID = this.id; + break; + default: this.spriteID = PokemonHelper.getPokemonByName(sprite).id; + } + } + static calcPokemonWeight(pokemon) { + return pokemon.weight * (App.game.party.alreadyCaughtPokemonByName(pokemon.name) ? 1 : 2); + } + get catchFactor() { + const oakBonus = App.game.oakItems.calculateBonus(OakItemType.Magic_Ball); + let catchF = this.baseCatchFactor + oakBonus + (this.levelModifier * 10); + if (this.eating > 0) { + catchF /= 2 - this.levelModifier; + } + if (this.angry > 0) { + catchF *= 2 + this.levelModifier; + } + if (this.eatingBait === BaitType.Nanab) { + catchF *= 1.5 + this.levelModifier; + } + return Math.min(100, catchF); + } + get escapeFactor() { + let escapeF = this.baseEscapeFactor; + if (this.eating > 0) { + escapeF /= 4 + this.levelModifier; + } + if (this.angry > 0) { + escapeF *= 2 - this.levelModifier; + } + if (this.eatingBait === BaitType.Razz) { + escapeF /= 1.5 + this.levelModifier; + } + return escapeF; + } + get angry() { + return this._angry(); + } + set angry(value) { + this._angry(value); + } + get eating() { + return this._eating(); + } + set eating(value) { + this._eating(value); + } + get eatingBait() { + return this._eatingBait(); + } + set eatingBait(value) { + this._eatingBait(value); + } + static random(environment = SafariEnvironments.Grass) { + // Get a random pokemon from current region and zone for Safari Zone + const safariPokemon = SafariPokemonList.list[Safari.activeRegion()]().filter((p) => p.isAvailable() && p.environments.includes(environment)); + const pokemon = Rand.fromWeightedArray(safariPokemon, safariPokemon.map(p => p.weight)); + return new SafariPokemon(pokemon.name, pokemon.sprite); + } + get displayName() { + return this._displayName(); + } +} +class SafariEncounter { + constructor(name, weight, environments = [SafariEnvironments.Grass], requirement, // True is used to simplify Friend Safari Pokémon generation + hide = true, // Hide from the list + sprite = 'base') { + this.name = name; + this.weight = weight; + this.environments = environments; + this.hide = hide; + this.sprite = sprite; + this.requirement = requirement === true ? new ObtainedPokemonRequirement(this.name) : requirement; + } + isAvailable() { + var _a, _b; + return (_b = (_a = this.requirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true; + } +} +class SafariPokemonList { + static generateSafariLists() { + this.generateKantoSafariList(); + this.generateJohtoSafariList(); + this.generateSinnohSafariList(); + this.generateAlolaSafariList(); + // Always generate Kalos Safari last + this.generateKalosSafariList(); + } + static generateKantoSafariList() { + // Lower weighted pokemon will appear less frequently, equally weighted are equally likely to appear + const pokemon = [ + // Grass + new SafariEncounter('Nidoran(F)', 15), + new SafariEncounter('Nidorina', 10), + new SafariEncounter('Nidoran(M)', 25), + new SafariEncounter('Nidorino', 10), + new SafariEncounter('Exeggcute', 20), + new SafariEncounter('Paras', 5), + new SafariEncounter('Parasect', 15), + new SafariEncounter('Rhyhorn', 10), + new SafariEncounter('Chansey', 4), + new SafariEncounter('Scyther', 4), + new SafariEncounter('Pinsir', 4), + new SafariEncounter('Kangaskhan', 15), + new SafariEncounter('Tauros', 10), + new SafariEncounter('Cubone', 10), + new SafariEncounter('Marowak', 5), + new SafariEncounter('Tangela', 4), + // Water + new SafariEncounter('Magikarp', 20, [SafariEnvironments.Water]), + new SafariEncounter('Psyduck', 20, [SafariEnvironments.Water]), + new SafariEncounter('Slowpoke', 20, [SafariEnvironments.Water]), + new SafariEncounter('Poliwag', 15, [SafariEnvironments.Water]), + new SafariEncounter('Goldeen', 15, [SafariEnvironments.Water]), + new SafariEncounter('Seaking', 5, [SafariEnvironments.Water]), + new SafariEncounter('Dratini', 10, [SafariEnvironments.Water], true, false), + new SafariEncounter('Dragonair', 4, [SafariEnvironments.Water], true, false), + ]; + SafariPokemonList.list[GameConstants.Region.kanto](pokemon); + } + static generateJohtoSafariList() { + // Lower weighted pokemon will appear less frequently, equally weighted are equally likely to appear + // Unlocks new mons after being caught + const pokemon = [ + // Grass + new SafariEncounter('Caterpie', 5), + new SafariEncounter('Metapod', 2), + new SafariEncounter('Butterfree', 1), + new SafariEncounter('Weedle', 5), + new SafariEncounter('Kakuna', 2), + new SafariEncounter('Beedrill', 1), + new SafariEncounter('Venonat', 3), + new SafariEncounter('Ledyba', 3), + new SafariEncounter('Spinarak', 3), + new SafariEncounter('Paras', 3), + new SafariEncounter('Scyther', 3), + new SafariEncounter('Pinsir', 2), + new SafariEncounter('Pineco', 3), + new SafariEncounter('Shuckle', 2), + new SafariEncounter('Wurmple', 5, [SafariEnvironments.Grass], true), + new SafariEncounter('Silcoon', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Beautifly', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Cascoon', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Dustox', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Masquerain', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Nincada', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Kricketot', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Kricketune', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Combee', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Vespiquen', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Yanmega', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Sewaddle', 5, [SafariEnvironments.Grass], true), + new SafariEncounter('Swadloon', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Leavanny', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Venipede', 5, [SafariEnvironments.Grass], true), + new SafariEncounter('Whirlipede', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Scolipede', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Dwebble', 5, [SafariEnvironments.Grass], true), + new SafariEncounter('Durant', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Scatterbug', 5, [SafariEnvironments.Grass], true), + new SafariEncounter('Spewpa', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Grubbin', 5, [SafariEnvironments.Grass], true), + new SafariEncounter('Charjabug', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Vikavolt', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Cutiefly', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Blipbug', 5, [SafariEnvironments.Grass], true), + new SafariEncounter('Dottler', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Orbeetle', 1, [SafariEnvironments.Grass], true), + new SafariEncounter('Sizzlipede', 2, [SafariEnvironments.Grass], true), + new SafariEncounter('Snom', 2, [SafariEnvironments.Grass], true), + // Water + new SafariEncounter('Yanma', 1, [SafariEnvironments.Water]), + new SafariEncounter('Surskit', 5, [SafariEnvironments.Water], true), + new SafariEncounter('Dewpider', 5, [SafariEnvironments.Water], true), + new SafariEncounter('Araquanid', 1, [SafariEnvironments.Water], true), + new SafariEncounter('Wimpod', 1, [SafariEnvironments.Water], true), + new SafariEncounter('Golisopod', 1, [SafariEnvironments.Water], true), + ]; + SafariPokemonList.list[GameConstants.Region.johto](pokemon); + } + static generateSinnohSafariList() { + // Lower weighted pokemon will appear less frequently, equally weighted are equally likely to appear + const pokemon = [ + // Grass + new SafariEncounter('Tangela', 20), + new SafariEncounter('Paras', 10), + new SafariEncounter('Exeggcute', 10), + new SafariEncounter('Kangaskhan', 10), + new SafariEncounter('Hoothoot', 15), + new SafariEncounter('Noctowl', 10), + new SafariEncounter('Yanma', 25), + new SafariEncounter('Shroomish', 10), + new SafariEncounter('Gulpin', 10), + new SafariEncounter('Kecleon', 10), + new SafariEncounter('Tropius', 15), + new SafariEncounter('Bibarel', 20), + new SafariEncounter('Skorupi', 10), + new SafariEncounter('Drapion', 5), + new SafariEncounter('Croagunk', 10), + new SafariEncounter('Toxicroak', 5), + new SafariEncounter('Carnivine', 10), + // Water + new SafariEncounter('Magikarp', 20, [SafariEnvironments.Water]), + new SafariEncounter('Gyarados', 10, [SafariEnvironments.Water]), + new SafariEncounter('Wooper', 20, [SafariEnvironments.Water]), + new SafariEncounter('Quagsire', 5, [SafariEnvironments.Water]), + new SafariEncounter('Barboach', 10, [SafariEnvironments.Water]), + new SafariEncounter('Whiscash', 5, [SafariEnvironments.Water]), + new SafariEncounter('Carvanha', 10, [SafariEnvironments.Water]), + ]; + SafariPokemonList.list[GameConstants.Region.sinnoh](pokemon); + } + static generateKalosSafariList() { + // Obtain the list of non-EVable pokemon and shuffle it + // There may not be an evenly divisible number of pokemon so repeat list 5 times + const friendSafariPokemon = pokemonList + .filter((p) => PokemonLocations.isObtainableAndNotEvable(p.name) + && PokemonHelper.calcNativeRegion(p.name) <= GameConstants.MAX_AVAILABLE_REGION) + .map((p) => p.name); + SeededRand.seed(+player.trainerId); + const shuffledPokemon = new Array(GameConstants.FRIEND_SAFARI_POKEMON) + .fill(SeededRand.shuffleArray(friendSafariPokemon)).flat(); + // Rotation is fixed, use the current date to determine where in the list to select the 5 pokemon + const batchCount = Math.ceil(shuffledPokemon.length / GameConstants.FRIEND_SAFARI_POKEMON); + const now = new Date(); + const startIndex = (Math.floor((now.getTime() - now.getTimezoneOffset() * 60 * 1000) / (24 * 60 * 60 * 1000)) % batchCount) * GameConstants.FRIEND_SAFARI_POKEMON; + const endIndex = startIndex + GameConstants.FRIEND_SAFARI_POKEMON; + const pokemon = shuffledPokemon.slice(startIndex, endIndex).map((p) => { + return new SafariEncounter(p, 10, SafariPokemonList.getEnvironmentByPokemonType(p), true, false); + }); + pokemon.push(new SafariEncounter('Shuckle', 2)); + pokemon.push(new SafariEncounter('Stunfisk', 2)); + pokemon.push(new SafariEncounter('Magmar', 2)); + pokemon.push(new SafariEncounter('Maractus', 2)); + pokemon.push(new SafariEncounter('Klefki', 2)); + pokemon.push(new SafariEncounter('Breloom', 2)); + pokemon.push(new SafariEncounter('Woobat', 2)); + pokemon.push(new SafariEncounter('Golurk', 2)); + pokemon.push(new SafariEncounter('Marowak', 2)); + // Water + pokemon.push(new SafariEncounter('Lapras', 2, [SafariEnvironments.Water])); + SafariPokemonList.list[GameConstants.Region.kalos](pokemon); + } + static generateAlolaSafariList() { + // Lower weighted pokemon will appear less frequently, equally weighted are equally likely to appear + // Filler + const pokemon = [ + // Grass + new SafariEncounter('Pidgeotto', 2.7), + // Water + new SafariEncounter('Magikarp', 0.7, [SafariEnvironments.Water]), + new SafariEncounter('Magikarp Skelly', 2, [SafariEnvironments.Water], new GymBadgeRequirement(BadgeEnums.Quick_League), false, 'self'), + new SafariEncounter('Magikarp Calico (White, Orange)', 2, [SafariEnvironments.Water], new TemporaryBattleRequirement('Magikarp Jump Karpen'), false, 'self'), + new SafariEncounter('Magikarp Pink Dapples', 2, [SafariEnvironments.Water], new GymBadgeRequirement(BadgeEnums.Fast_League), false, 'self'), + new SafariEncounter('Magikarp Grey Diamonds', 2, [SafariEnvironments.Water], new TemporaryBattleRequirement('Magikarp Jump Karpress 3'), false, 'self'), + new SafariEncounter('Magikarp Purple Bubbles', 2, [SafariEnvironments.Water], new GymBadgeRequirement(BadgeEnums.Heal_League), false, 'self'), + new SafariEncounter('Magikarp Purple Patches', 2, [SafariEnvironments.Water], new TemporaryBattleRequirement('Magikarp Jump Karpella 3'), false, 'self'), + new SafariEncounter('Magikarp Brown Tiger', 2, [SafariEnvironments.Water], new GymBadgeRequirement(BadgeEnums.Ultra_League), false, 'self'), + new SafariEncounter('Magikarp Orange Forehead', 2, [SafariEnvironments.Water], new GymBadgeRequirement(BadgeEnums.E4_League), false, 'self'), + new SafariEncounter('Magikarp Black Mask', 2, [SafariEnvironments.Water], new TemporaryBattleRequirement('Magikarp Jump Tykarp 2'), false, 'self'), + new SafariEncounter('Magikarp Saucy Blue', 2, [SafariEnvironments.Water], new QuestLineCompletedRequirement('Dr. Splash\'s Research Project'), false, 'self'), + // Both, meme encounter + new SafariEncounter('Ditto (Magikarp)', 0.3, [SafariEnvironments.Water, SafariEnvironments.Grass], new CaughtUniquePokemonByFilterRequirement((p) => Math.floor(p.id) === pokemonMap.Magikarp.id, 'Catch more Magikarp species.', 6), false, 'Magikarp'), + ]; + SafariPokemonList.list[GameConstants.Region.alola](pokemon); + } + // Get SafariEnvironment according to the Pokemon types + static getEnvironmentByPokemonType(p) { + const pokemon = PokemonHelper.getPokemonByName(p); + const safariEnvironments = []; + // If Pokemon is water-type, add the water environment + if (pokemon.type1 === PokemonType.Water || pokemon.type2 === PokemonType.Water) { + safariEnvironments.push(SafariEnvironments.Water); + } + const pureWater = pokemon.type1 === PokemonType.Water && pokemon.type2 === PokemonType.None; + const waterIce = pokemon.type1 === PokemonType.Water && pokemon.type2 === PokemonType.Ice; + const iceWater = pokemon.type1 === PokemonType.Ice && pokemon.type2 === PokemonType.Water; + // If Pokemon is not pure water, water/ice or ice/water, add the grass environment + if (!(pureWater || waterIce || iceWater)) { + safariEnvironments.push(SafariEnvironments.Grass); + } + return safariEnvironments; + } + static getDisplayList(region = player.region) { + const encounters = []; + if (!SafariPokemonList.list[region]) { + return encounters; + } + const list = SafariPokemonList.list[region](); + list.forEach(e => { + if (e.hide && !e.isAvailable()) { + return; + } + const pokemon = PokemonHelper.getPokemonByName(e.name); + const partyPokemon = App.game.party.getPokemonByName(e.name); + const eData = { + image: PokemonHelper.getImage(pokemon.id, undefined, undefined, GameConstants.ShadowStatus.None), + pkrsImage: (partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.pokerus) > GameConstants.Pokerus.Uninfected ? `assets/images/breeding/pokerus/${GameConstants.Pokerus[partyPokemon.pokerus]}.png` : '', + EVs: (partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.pokerus) >= GameConstants.Pokerus.Contagious ? `EVs: ${partyPokemon.evs().toLocaleString('en-US')}` : '', + shiny: (partyPokemon === null || partyPokemon === void 0 ? void 0 : partyPokemon.shiny) || false, + hide: false, + uncaught: !partyPokemon, + lock: !e.isAvailable(), + lockMessage: e.isAvailable() ? '' : e.requirement.hint(), + }; + encounters.push(eData); + }); + return encounters; + } +} +SafariPokemonList.list = { + [GameConstants.Region.kanto]: ko.observableArray(), + [GameConstants.Region.johto]: ko.observableArray(), + [GameConstants.Region.sinnoh]: ko.observableArray(), + [GameConstants.Region.kalos]: ko.observableArray(), + [GameConstants.Region.alola]: ko.observableArray(), +}; +class SafariTownContent extends TownContent { + constructor(buttonText) { + super(); + this.buttonText = buttonText; + } + cssClass() { + return 'btn btn-primary'; + } + text() { + var _a; + return (_a = this.buttonText) !== null && _a !== void 0 ? _a : 'Enter Safari Zone'; + } + onclick() { + Safari.openModal(); + } + areaStatus() { + if (!SafariPokemonList.list[player.region]) { + return areaStatus.completed; + } + const pokemonStatusArray = [areaStatus.completed]; + const pokerusUnlocked = Settings.getSetting(`--${areaStatus[areaStatus.missingResistant]}`).isUnlocked(); + SafariPokemonList.list[player.region]().forEach(p => { + if (!p.isAvailable()) { + return; + } + const caughtStatus = PartyController.getCaughtStatusByName(p.name); + if (caughtStatus == CaughtStatus.NotCaught) { + pokemonStatusArray.push(areaStatus.uncaughtPokemon); + } + else if (caughtStatus == CaughtStatus.Caught) { + pokemonStatusArray.push(areaStatus.uncaughtShinyPokemon); + } + else if (pokerusUnlocked && PartyController.getPokerusStatusByName(p.name) < GameConstants.Pokerus.Resistant) { + pokemonStatusArray.push(areaStatus.missingResistant); + } + }); + return Math.min(...pokemonStatusArray); + } +} +/// +class Shop extends TownContent { + cssClass() { + return 'btn btn-secondary'; + } + text() { + var _a; + return (_a = this.name) !== null && _a !== void 0 ? _a : 'Poké Mart'; + } + isVisible() { + if (!super.isVisible()) { + return false; + } + return !(this.hideBeforeUnlocked && !this.isUnlocked()); + } + onclick() { + ShopHandler.showShop(this); + $('#shopModal').modal('show'); + } + constructor(items, name = undefined, requirements = [], hideBeforeUnlocked = false) { + super(requirements); + this.items = items; + this.name = name; + this.hideBeforeUnlocked = hideBeforeUnlocked; + this.tooltip = 'Visit shops to buy items.'; + this.amountInput = () => $('#shopModal').find('input[name="amountOfItems"]'); + } + areaStatus() { + const itemStatusArray = [super.areaStatus()]; + const pokerusUnlocked = Settings.getSetting(`--${areaStatus[areaStatus.missingResistant]}`).isUnlocked(); + this.items.forEach(i => { + if (i instanceof PokemonItem) { + if (i.getCaughtStatus() == CaughtStatus.NotCaught) { + itemStatusArray.push(areaStatus.uncaughtPokemon); + } + else if (i.getCaughtStatus() == CaughtStatus.Caught) { + itemStatusArray.push(areaStatus.uncaughtShinyPokemon); + } + else if (pokerusUnlocked && i.getPokerusStatus() < GameConstants.Pokerus.Resistant) { + itemStatusArray.push(areaStatus.missingResistant); + } + } + }); + return Math.min(...itemStatusArray); + } + get displayName() { + if (this.name) { + return this.name; + } + if (!this.parent) { + return 'Poké Mart'; + } + return `Poké Mart ${this.parent.name}`; + } +} +/// +class BerryMasterShop extends Shop { + constructor(location, items, name = 'Berry Master', requirements) { + super(items, name, requirements); + this.location = location; + this.items = items; + this.name = name; + this.amountInput = () => $('#berryMasterModal').find('input[name="amountOfItems"]'); + } + onclick() { + ShopHandler.showShop(this); + $('#berryMasterModal').modal('show'); + } + areaStatus() { + const itemStatusArray = [super.areaStatus()]; + const berryListIndex = GameConstants.BerryTraderLocations[this.parent.name]; + if (berryListIndex > -1) { + const berryDeals = BerryDeal.list[berryListIndex](); + const berryTraderPokemon = berryDeals.filter(d => d.item.itemType instanceof PokemonItem).map(d => d.item.itemType.type); + if (!RouteHelper.listCompleted(berryTraderPokemon, false)) { + itemStatusArray.push(areaStatus.uncaughtPokemon); + } + if (!RouteHelper.listCompleted(berryTraderPokemon, true)) { + itemStatusArray.push(areaStatus.uncaughtShinyPokemon); + } + if (Settings.getSetting(`--${areaStatus[areaStatus.missingResistant]}`).isUnlocked() && RouteHelper.minPokerus(berryTraderPokemon) < GameConstants.Pokerus.Resistant) { + itemStatusArray.push(areaStatus.missingResistant); + } + } + return Math.min(...itemStatusArray); + } +} +/// +class GemMasterShop extends Shop { + constructor(shop, name = 'Gem Master', requirements = [], hideBeforeUnlocked = false) { + super([], name, requirements, hideBeforeUnlocked); + this.shop = shop; + this.name = name; + } + onclick() { + ShopHandler.showShop(this); + $('#gemMasterModal').modal('show'); + } + areaStatus() { + const itemStatusArray = [super.areaStatus()]; + const deals = GemDeals.getDeals(this.shop); + if (deals) { + const pokemonDeals = deals.filter(d => d.item.itemType instanceof PokemonItem && d.isVisible()).map(d => d.item.itemType.type); + if (!RouteHelper.listCompleted(pokemonDeals, false)) { + itemStatusArray.push(areaStatus.uncaughtPokemon); + } + if (!RouteHelper.listCompleted(pokemonDeals, true)) { + itemStatusArray.push(areaStatus.uncaughtShinyPokemon); + } + if (Settings.getSetting(`--${areaStatus[areaStatus.missingResistant]}`).isUnlocked() && RouteHelper.minPokerus(pokemonDeals) < GameConstants.Pokerus.Resistant) { + itemStatusArray.push(areaStatus.missingResistant); + } + } + return Math.min(...itemStatusArray); + } +} +/// +class ShardTraderShop extends Shop { + constructor(location, name = 'Shard Trader', hidePlayerInventory = false, currencyName = 'Shards') { + super([], name); + this.location = location; + this.name = name; + this.hidePlayerInventory = hidePlayerInventory; + this.currencyName = currencyName; + } + onclick() { + ShopHandler.showShop(this); + $('#shardTraderModal').modal('show'); + } + areaStatus() { + var _a; + const itemStatusArray = [super.areaStatus()]; + const deals = (_a = ShardDeal.getDeals(this.location)) === null || _a === void 0 ? void 0 : _a(); + if (deals) { + const pokemonDeals = deals.filter(d => d.item.itemType instanceof PokemonItem && d.item.itemType.isVisible()).map(d => d.item.itemType.type); + if (!RouteHelper.listCompleted(pokemonDeals, false)) { + itemStatusArray.push(areaStatus.uncaughtPokemon); + } + if (!RouteHelper.listCompleted(pokemonDeals, true)) { + itemStatusArray.push(areaStatus.uncaughtShinyPokemon); + } + if (Settings.getSetting(`--${areaStatus[areaStatus.missingResistant]}`).isUnlocked() && RouteHelper.minPokerus(pokemonDeals) < GameConstants.Pokerus.Resistant) { + itemStatusArray.push(areaStatus.missingResistant); + } + } + return Math.min(...itemStatusArray); + } + isVisible() { + var _a, _b; + if (super.isVisible()) { + const deals = (_a = ShardDeal.getDeals(this.location)) === null || _a === void 0 ? void 0 : _a(); + return (_b = deals === null || deals === void 0 ? void 0 : deals.some(d => d.item.itemType.isVisible())) !== null && _b !== void 0 ? _b : true; + } + return false; + } +} +/// +class ShopHandler { + static showShop(shop) { + this.setSelected(0); + this.resetAmount(); + this.shopObservable(shop); + shop.items.forEach(item => { + item.price(Math.round(item.basePrice * (player.itemMultipliers[item.saveName] || 1))); + }); + } + //#region Controls + static setSelected(i) { + this.selected(i); + } + static buyItem() { + const item = this.shopObservable().items[ShopHandler.selected()]; + item.buy(this.amount()); + if (Settings.getSetting('resetShopAmountOnPurchase').observableValue()) { + ShopHandler.resetAmount(); + } + } + static resetAmount() { + this.shopObservable().amountInput().val(1).change(); + } + static increaseAmount(n) { + const newVal = (parseInt(this.shopObservable().amountInput().val().toString(), 10) || 0) + n; + this.shopObservable().amountInput().val(newVal > 1 ? newVal : 1).change(); + } + static multiplyAmount(n) { + const newVal = (parseInt(this.shopObservable().amountInput().val().toString(), 10) || 0) * n; + this.shopObservable().amountInput().val(newVal > 1 ? newVal : 1).change(); + } + static maxAmount() { + const item = this.shopObservable().items[ShopHandler.selected()]; + if (!item || !item.isAvailable()) { + return this.shopObservable().amountInput().val(0).change(); + } + const tooMany = (amt) => amt > item.maxAmount || !App.game.wallet.hasAmount(new Amount(item.totalPrice(amt), item.currency)); + const amt = GameHelper.binarySearch(tooMany, 0, Number.MAX_SAFE_INTEGER); + this.shopObservable().amountInput().val(amt).change(); + } + //#endregion + //#region UI + static calculateCss(i) { + if (this.selected() == i) { + return 'shopItem clickable btn btn-secondary active'; + } + else { + return 'shopItem clickable btn btn-secondary'; + } + } + static calculateButtonCss() { + const item = this.shopObservable().items[ShopHandler.selected()]; + if (item && !(item.isAvailable() && App.game.wallet.hasAmount(new Amount(item.totalPrice(this.amount()), item.currency))) + || this.amount() < 1) { + return 'btn btn-danger smallButton smallFont'; + } + else { + return 'btn btn-success smallButton smallFont'; + } + } +} +ShopHandler.shopObservable = ko.observable(new Shop([])); +ShopHandler.selected = ko.observable(0); +ShopHandler.amount = ko.observable(1); +//#endregion +ShopHandler.shortcutVisible = ko.pureComputed(() => { + return App.game.statistics.gymsDefeated[GameConstants.getGymIndex('Champion Lance')]() > 0; +}); +/// +/// +/// +class SpecialEvents { + newEvent(title, description, startTime, startFunction, endTime, endFunction, hideFromEventCalendar = false) { + // Check if the event exist before adding it again + if (!this.events.find(event => event.title == title)) { + this.events.push(new SpecialEvent(title, description, startTime, startFunction, endTime, endFunction, hideFromEventCalendar)); + } + } + constructor() { + this.name = 'Events'; + this.saveKey = 'events'; + this.counter = 0; + this.events = []; + this.addEvents(); + } + initialize() { + this.events.forEach(event => event.initialize()); + } + fromJSON(json) { + var _a; + if (!json) { + return; + } + (_a = json.events) === null || _a === void 0 ? void 0 : _a.forEach(event => { + var _a; + (_a = this.getEvent(event.name)) === null || _a === void 0 ? void 0 : _a.fromJSON(event); + }); + } + toJSON() { + return { + events: this.events.map((event) => event.toJSON()), + }; + } + canAccess() { + return true; + } + update(delta) { } // This method intentionally left blank + getEvent(eventName) { + return this.events.find((e) => e.title == eventName); + } + tick() { + var _a; + (_a = this.events) === null || _a === void 0 ? void 0 : _a.forEach(event => { + event.tick(); + }); + this.counter = 0; + } + addEvents() { + /* Lunar New Year + RoamingPokemonList.ts: + Vivillon (Meadow) + Vivillon (Fancy) + Dungeon.ts: + Vivillon (High Plains) in Mt. Moon + Vivillon (Modern) in Cerulean Cave + Vivillon (Archipelago) in Sprout Tower + Vivillon (Monsoon) in Dark Cave + Vivillon (Sun) in Mt. Chimney Crater + Vivillon (Continental) in New Mauville + Vivillon (Polar) in Sky Pillar + Vivillon (River) in Eterna Forest + Vivillon (Marine) in Lake Valor, Verity, and Acuity + Vivillon (Garden) in Flower Paradise + Vivillon (Sandstorm) in Relic Castle + Vivillon (Savanna) in Dragonspiral Tower + Vivillon (Jungle) in Moor of Icirrus + Vivillon (Ocean) in Dreamyard + Vivillon (Tundra) in Poké Ball Factory + Vivillon (Elegant) in Lost Hotel + Vivillon (Icy Snow) in Frost Cavern + Vivillon (Poké Ball) in Thrifty Megamart + TownList.ts: + Vivillon Photobook in Santalune + */ + this.newEvent('Lunar New Year', 'Two kinds of Vivillon are roaming Kalos and later regions, and ones you\'ve previously caught have returned. Check the Photobook in Santalune City for hints!', + // Start + new Date(new Date().getFullYear(), 0, 24, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 1, 7, 23), () => { + }); + //Hoopa Day + /* + TownList.ts and TemporaryBattleList.ts: Youngster Joey in Cherrygrove + QuestLineHelper.ts: Pikablu (literally Marill) quest; 'How blu mouse?' + */ + this.newEvent('Hoopa Day', 'The Mischief Pokémon unleashes his tricks upon the world.', + // Start + new Date(new Date().getFullYear(), 3, 1, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 3, 2, 1), () => { + }); + // Easter + // QuestLineHelper.ts: Introduction questline; 'Egg Hunt' + // Dungeons.ts: Togepi (Flowering Crown), Torchic (Egg) and Pikachu (Easter) jumping from dungeon to dungeon + this.newEvent('Easter', 'Encounter 3 special egg-related forms for a limited time with a dedicated Quest Line.', + // Start + new Date(new Date().getFullYear(), 3, 8, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 3, 29, 23), () => { + }); + /* Golden Week + Dungeon.ts: + Bulbasaur (Rose) in Flower Paradise + */ + this.newEvent('Golden Week', 'Enjoy your time off in the "Golden Week"! Travel tip: Visit the Flower Paradise in Sinnoh on your well earned vacation and enjoy the bloom of roses.', + // Start + new Date(new Date().getFullYear(), 3, 29, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 4, 6, 23), () => { + }); + /* First Event + RoamingPokemonList.ts: + Flying Pikachu + Red Spearow + */ + this.newEvent('Flying Pikachu', 'Encounter Flying Pikachu and Red Spearow for a limited time roaming Kanto.', + // Start + new Date(new Date().getFullYear(), 6, 6, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 6, 12, 23), () => { + }); + /* Pokemon the first movie release date + RoamingPokemonList.ts: + Bulbausaur (Clone) + Charmander (Clone) + Squirtle (Clone) + Pikachu (Clone) + Dungeon.ts: + New Island as a dungeon + Armored Mewtwo in New Island + */ + this.newEvent('Mewtwo strikes back!', '"New Island" has appeared off the coast of Kanto. Go stop Mewtwo!', + // Start + new Date(new Date().getFullYear(), 6, 18, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 6, 24, 23), () => { + }); + // Halloween + this.newEvent('Halloween!', 'Encounter Spooky Pokémon for a limited time around Kanto, Johto and Hoenn.', + // Start + new Date(new Date().getFullYear(), 9, 30, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 10, 5, 23), () => { + }); + /* Let's Go P/E release date + RoamingPokemonList.ts: + Let's Go Pikachu + Let's Go Eevee + */ + this.newEvent('Let\'s GO!', 'Encounter special Eevee and Pikachu roaming in the Kanto region.', + // Start + new Date(new Date().getFullYear(), 10, 16, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 10, 23, 23), () => { + }); + /* Christmas + RoamingPokemonList.ts: + Santa Snorlax + Reindeer Stantler + Dungeon.ts: + Grinch Celebi in Ilex Forest + Snorlax (Snowman) in Seafoam Islands + RouteData.ts: + Santa Jynx + ShardDeal.ts: + Elf Munchlax + */ + this.newEvent('Merry Christmas!', 'Encounter Santa Snorlax roaming the regions and Reindeer Stantler in Johto, discover the mystical creatures of Ilex Forest, Seafoam Islands and Sandgem Town or party at Bill\'s House.', + // Start + new Date(new Date().getFullYear(), 11, 18, 1), () => { + }, + // End + new Date(new Date().getFullYear(), 11, 31, 23), () => { + }); + } +} +/// +class TemporaryBattle extends TownContent { + cssClass() { + return App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex(this.name)]() ? + 'btn btn-success' : + 'btn btn-secondary'; + } + text() { + return `Fight ${this.getDisplayName()}`; + } + isVisible() { + var _a; + return (this.isUnlocked() || ((_a = this.optionalArgs.visibleRequirement) === null || _a === void 0 ? void 0 : _a.isCompleted())) && !this.completeRequirements.every(r => r.isCompleted()); + } + onclick() { + TemporaryBattleRunner.startBattle(this); + } + areaStatus() { + if (!this.isUnlocked()) { + return areaStatus.locked; + } + else if (App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex(this.name)]() == 0 && this.isVisible()) { + return areaStatus.incomplete; + } + else { + return areaStatus.completed; + } + } + getDisplayName() { + var _a; + return (_a = this.optionalArgs.displayName) !== null && _a !== void 0 ? _a : this.name.replace(/( route)? \d+$/, ''); + } + getTown() { + var _a, _b; + return (_b = (_a = this.parent) !== null && _a !== void 0 ? _a : TownList[this.optionalArgs.returnTown]) !== null && _b !== void 0 ? _b : TownList[GameConstants.DockTowns[player.region]]; + } + getImage() { + var _a, _b, _c, _d; + const imageName = (_b = (_a = this.optionalArgs) === null || _a === void 0 ? void 0 : _a.imageName) !== null && _b !== void 0 ? _b : this.name; + const finalMonImageName = (_d = (_c = this.optionalArgs) === null || _c === void 0 ? void 0 : _c.finalPokemonImage) !== null && _d !== void 0 ? _d : imageName; + return TemporaryBattleRunner.finalPokemon() ? `assets/images/npcs/${finalMonImageName}.png` : `assets/images/npcs/${imageName}.png`; + } + constructor(name, pokemons, defeatMessage, requirements = [], completeRequirements = undefined, optionalArgs = {}) { + super(requirements); + this.name = name; + this.pokemons = pokemons; + this.defeatMessage = defeatMessage; + this.optionalArgs = optionalArgs; + if (!completeRequirements) { + completeRequirements = [new TemporaryBattleRequirement(name)]; + } + if (optionalArgs.isTrainerBattle == undefined) { + optionalArgs.isTrainerBattle = true; + } + this.completeRequirements = completeRequirements; + } + getPokemonList() { + return this.pokemons.filter((p) => p.requirements.every((r => r.isCompleted()))); + } +} +/// +class TemporaryBattleBattle extends Battle { + static pokemonAttack() { + if (TemporaryBattleRunner.running()) { + super.pokemonAttack(); + } + } + static clickAttack() { + if (TemporaryBattleRunner.running()) { + super.clickAttack(); + } + } + static defeatPokemon() { + const enemyPokemon = super.enemyPokemon(); + if (!TemporaryBattleBattle.battle.optionalArgs.isTrainerBattle || enemyPokemon.shadow == GameConstants.ShadowStatus.Shadow) { + // Attempting to catch Pokemon + const isShiny = enemyPokemon.shiny; + const isShadow = enemyPokemon.shadow == GameConstants.ShadowStatus.Shadow; + const pokeBall = App.game.pokeballs.calculatePokeballToUse(enemyPokemon.id, isShiny, isShadow, enemyPokemon.encounterType); + if (pokeBall !== GameConstants.Pokeball.None) { + this.prepareCatch(enemyPokemon, pokeBall); + setTimeout(() => { + this.attemptCatch(enemyPokemon, 1, player.region); + this.endFight(); + }, App.game.pokeballs.calculateCatchTime(pokeBall)); + } + else { + this.endFight(); + } + } + else { + this.endFight(); + } + } + static endFight() { + var _a; + if (TemporaryBattleBattle.index() >= TemporaryBattleBattle.battle.getPokemonList().length) { + TemporaryBattleRunner.battleWon(TemporaryBattleBattle.battle); + } + else { + TemporaryBattleBattle.generateNewEnemy(); + } + TemporaryBattleBattle.enemyPokemon().defeat((_a = this.battle.optionalArgs.isTrainerBattle) !== null && _a !== void 0 ? _a : true); + TemporaryBattleBattle.index(TemporaryBattleBattle.index() + 1); + if (TemporaryBattleBattle.index() >= TemporaryBattleBattle.battle.getPokemonList().length) { + TemporaryBattleRunner.battleWon(TemporaryBattleBattle.battle); + } + else { + TemporaryBattleBattle.generateNewEnemy(); + } + player.lowerItemMultipliers(MultiplierDecreaser.Battle); + } + /** + * Reset the counter. + */ + static generateNewEnemy() { + this.catching(false); + TemporaryBattleBattle.counter = 0; + TemporaryBattleBattle.enemyPokemon(PokemonFactory.generateTemporaryBattlePokemon(TemporaryBattleBattle.battle, TemporaryBattleBattle.index())); + } +} +TemporaryBattleBattle.index = ko.observable(0); +TemporaryBattleBattle.totalPokemons = ko.observable(0); +TemporaryBattleBattle.pokemonsDefeatedComputable = ko.pureComputed(() => { + return TemporaryBattleBattle.index(); +}); +TemporaryBattleBattle.pokemonsUndefeatedComputable = ko.pureComputed(() => { + return TemporaryBattleBattle.totalPokemons() - TemporaryBattleBattle.index(); +}); +/// +const TemporaryBattleList = {}; +//Kanto Temporary Battles +TemporaryBattleList['Blue 1'] = new TemporaryBattle('Blue 1', [ + new GymPokemon('Pidgey', 1040, 9), + new GymPokemon('Charmander', 1678, 9, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Squirtle', 1678, 9, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Bulbasaur', 1678, 9, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Bulbasaur', 1678, 9, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), +], 'I heard the Pokémon League is crawling with tough Trainers. I have to figure out how to get past them. You should quit dawdling and get a move on!', [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 22), + new GymBadgeRequirement(BadgeEnums.Boulder, GameConstants.AchievementOption.less), +], undefined, { + displayName: 'Rival Blue', + returnTown: 'Viridian City', + imageName: 'Blue1', + battleBackground: 'Default', +}); +TemporaryBattleList['Blue 2'] = new TemporaryBattle('Blue 2', [ + new GymPokemon('Pidgeotto', 3650, 17), + new GymPokemon('Abra', 3230, 16), + new GymPokemon('Rattata', 3370, 15), + new GymPokemon('Charmander', 3791, 18, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Squirtle', 3791, 18, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Bulbasaur', 3791, 18, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Bulbasaur', 3791, 18, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), +], 'Hey! Take it easy! You won already!', [new RouteKillRequirement(10, GameConstants.Region.kanto, 4)], undefined, { + displayName: 'Rival Blue', + returnTown: 'Cerulean City', + imageName: 'Blue1', +}); +TemporaryBattleList['Blue 3'] = new TemporaryBattle('Blue 3', [ + new GymPokemon('Pidgeotto', 12998, 19), + new GymPokemon('Raticate', 11902, 16), + new GymPokemon('Kadabra', 12094, 18), + new GymPokemon('Charmeleon', 13437, 20, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Wartortle', 13437, 20, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Ivysaur', 13437, 20, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Ivysaur', 13437, 20, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), +], 'Humph! At least you\'re raising your Pokémon!', [new RouteKillRequirement(10, GameConstants.Region.kanto, 6)], undefined, { + displayName: 'Rival Blue', + returnTown: 'Vermilion City', + imageName: 'Blue2', +}); +TemporaryBattleList['Blue 4'] = new TemporaryBattle('Blue 4', [ + new GymPokemon('Pidgeotto', 30398, 25), + new GymPokemon('Exeggcute', 28878, 23, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Growlithe', 28878, 23, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Gyarados', 28878, 23, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Gyarados', 28878, 23, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), + new GymPokemon('Gyarados', 28878, 22, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Exeggcute', 28878, 22, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Growlithe', 28878, 22, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Growlithe', 28878, 22, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), + new GymPokemon('Kadabra', 30398, 20), + new GymPokemon('Charmeleon', 33438, 25, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Wartortle', 33438, 25, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Ivysaur', 33438, 25, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Ivysaur', 33438, 25, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), +], 'What? You stinker! I took it easy on you, too!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Pokémon Tower'))], undefined, { + displayName: 'Rival Blue', + imageName: 'Blue2', +}); +TemporaryBattleList['Fighting Dojo'] = new TemporaryBattle('Fighting Dojo', [ + new GymPokemon('Hitmonlee', 108985, 37), + new GymPokemon('Hitmonchan', 108985, 37), +], 'That was a great battle. Here, have this Fighting Egg as a reward for conquering the Fighting Dojo!
    If you put it in the hatchery and you are lucky you can get a rare Pokémon that you might not be able to find anywhere else in Kanto, or unlucky and get a common Pokémon.
    But if you don\'t get what you need, don\'t worry, you can buy as many eggs as you need in Poké Marts.', [ + new OneFromManyRequirement([ + new GymBadgeRequirement(BadgeEnums.Rainbow), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Rocket Game Corner')), + ]), +], undefined, { + firstTimeRewardFunction: () => { + BagHandler.gainItem({ type: ItemType.item, id: 'Fighting_egg' }, 1); + Notifier.notify({ + message: 'You were awarded a Fighting Egg for defeating the Fighting Dojo!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + }, + imageName: 'Black Belt', +}); +TemporaryBattleList['Snorlax route 12'] = new TemporaryBattle('Snorlax route 12', [new GymPokemon('Snorlax', 189990, 30)], undefined, [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 12), + new TemporaryBattleRequirement('Blue 4'), +], [new TemporaryBattleRequirement('Snorlax route 12'), new ObtainedPokemonRequirement('Snorlax')], { + displayName: 'Snorlax', + returnTown: 'Lavender Town', + isTrainerBattle: false, + hideTrainer: true, + visibleRequirement: new OneFromManyRequirement([new RouteKillRequirement(10, GameConstants.Region.kanto, 11), new RouteKillRequirement(5, GameConstants.Region.kanto, 12)]), +}); +TemporaryBattleList['Snorlax route 16'] = new TemporaryBattle('Snorlax route 16', [new GymPokemon('Snorlax', 189990, 30)], undefined, [new TemporaryBattleRequirement('Blue 4')], [new TemporaryBattleRequirement('Snorlax route 16'), new ObtainedPokemonRequirement('Snorlax')], { + displayName: 'Snorlax', + returnTown: 'Celadon City', + isTrainerBattle: false, + hideTrainer: true, + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.kanto, 7), +}); +TemporaryBattleList['Blue 5'] = new TemporaryBattle('Blue 5', [ + new GymPokemon('Pidgeot', 41482, 37), + new GymPokemon('Exeggcute', 38447, 38, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Growlithe', 38447, 38, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Gyarados', 38447, 38, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Gyarados', 38447, 38, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), + new GymPokemon('Gyarados', 38447, 35, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Exeggcute', 38447, 35, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Growlithe', 38447, 35, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Growlithe', 38447, 35, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), + new GymPokemon('Alakazam', 41482, 35), + new GymPokemon('Charizard', 44113, 40, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Blastoise', 44113, 40, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Venusaur', 44113, 40, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Venusaur', 44113, 40, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), +], 'I\'m moving on up and ahead! I\'m going to the Pokémon League to boot out the Elite Four! I\'ll become the world\'s most powerful Trainer! Well, good luck to you! Don\'t sweat it! Smell ya!', [new QuestLineStepCompletedRequirement('Team Rocket', 1)], undefined, { + displayName: 'Rival Blue', + imageName: 'Blue2', +}); +TemporaryBattleList['Biker Goon 1'] = new TemporaryBattle('Biker Goon 1', [ + new GymPokemon('Koffing', 198477, 37), + new GymPokemon('Grimer', 198477, 37), +], 'Wha... What is this kid?!', [new QuestLineStepCompletedRequirement('Bill\'s Errand', 1)], undefined, { + displayName: 'Biker Goon', + imageName: 'Biker Goon', +}); +TemporaryBattleList['Biker Goon 2'] = new TemporaryBattle('Biker Goon 2', [new GymPokemon('Koffing', 396954, 38)], 'Stop fooling around!', [new QuestLineStepCompletedRequirement('Bill\'s Errand', 1)], undefined, { + displayName: 'Biker Goon', + imageName: 'Biker Goon', +}); +TemporaryBattleList['Biker Goon 3'] = new TemporaryBattle('Biker Goon 3', [new GymPokemon('Grimer', 396954, 38)], '... ... ... ... ... ...', [new QuestLineStepCompletedRequirement('Bill\'s Errand', 1)], undefined, { + displayName: 'Biker Goon', + imageName: 'Biker Goon', +}); +TemporaryBattleList['Cue Ball Paxton'] = new TemporaryBattle('Cue Ball Paxton', [ + new GymPokemon('Weezing', 221664, 39), + new GymPokemon('Muk', 221664, 39), +], 'All right, enough! We\'ll leave like you wanted! We\'ll be happy to see the last of this boring island!', [ + new TemporaryBattleRequirement('Biker Goon 1'), + new TemporaryBattleRequirement('Biker Goon 2'), + new TemporaryBattleRequirement('Biker Goon 3'), +]); +TemporaryBattleList['Ash Ketchum New Island'] = new TemporaryBattle('Ash Ketchum New Island', [ + new GymPokemon('Bulbasaur', 151664, 25), + new GymPokemon('Squirtle', 151664, 25), + new GymPokemon('Pikachu', 151664, 30), +], 'I found this Clone Mewtwo left behind. Can you take care of it?', [new ClearDungeonRequirement(10, GameConstants.getDungeonIndex('New Island'))], undefined, { + displayName: 'Ash Ketchum', + imageName: 'Ash Ketchum', + firstTimeRewardFunction: () => { + App.game.party.gainPokemonByName('Pikachu (Clone)'); + }, +}); +TemporaryBattleList['Bill\'s Grandpa'] = new TemporaryBattle('Bill\'s Grandpa', [ + new GymPokemon('Vaporeon', 170000, 48), + new GymPokemon('Jolteon', 175000, 49), + new GymPokemon('Flareon', 180000, 50), +], 'Hahaha, that was one of the best battles I\'ve ever had.', [new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 10)], undefined, { imageName: 'Bill\'s Grandpa with Eevee' }); +TemporaryBattleList['Blue 6'] = new TemporaryBattle('Blue 6', [ + new GymPokemon('Pidgeot', 84840, 47), + new GymPokemon('Rhyhorn', 82269, 45), + new GymPokemon('Exeggcute', 82269, 45, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Growlithe', 82269, 45, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Gyarados', 82269, 45, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Gyarados', 82269, 45, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), + new GymPokemon('Gyarados', 82269, 45, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Exeggcute', 82269, 45, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Growlithe', 82269, 45, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Growlithe', 82269, 45, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), + new GymPokemon('Alakazam', 84840, 47), + new GymPokemon('Charizard', 92553, 53, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Grass)), + new GymPokemon('Blastoise', 92553, 53, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Fire)), + new GymPokemon('Venusaur', 92553, 53, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Water)), + new GymPokemon('Venusaur', 92553, 53, new StarterRequirement(GameConstants.Region.kanto, GameConstants.Starter.Special)), +], 'That loosened me up. I\'m ready for the Pokémon League! You need more practice! But hey, you know that! I\'m out of here. Smell ya!', [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 22), + new GymBadgeRequirement(BadgeEnums.Earth), +], undefined, { + displayName: 'Rival Blue', + returnTown: 'Viridian City', + imageName: 'Blue2', +}); +// Kanto Christmas Temporary Battles, based on Blue 2 +TemporaryBattleList['Santa Jynx 1'] = new TemporaryBattle('Santa Jynx 1', [ + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), +], 'Huh? They ran off and are trying to blend in with the local Pokémon population. Find those Santa Jynx and collect more Christmas presents!', [ + new SpecialEventRequirement('Merry Christmas!'), + new ItemOwnedRequirement('Christmas_present', 11, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 2', 1, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 3', 1, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 4', 1, GameConstants.AchievementOption.less), +], undefined, { + displayName: 'Santa Jynx Band', + firstTimeRewardFunction: () => { + ItemList.Christmas_present.gain(); + }, + resetDaily: true, + hideTrainer: true, + imageName: 'Bill\'s Grandpa without Eevee', +}); +TemporaryBattleList['Santa Jynx 2'] = new TemporaryBattle('Santa Jynx 2', [ + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), +], 'Huh? They ran off and are trying to blend in with the local Pokémon population. Find those Santa Jynx and collect more Christmas presents!', [ + new SpecialEventRequirement('Merry Christmas!'), + new ItemOwnedRequirement('Christmas_present', 27, GameConstants.AchievementOption.less), + new ItemOwnedRequirement('Christmas_present', 11), + new TemporaryBattleRequirement('Santa Jynx 1', 1, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 3', 1, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 4', 1, GameConstants.AchievementOption.less), +], undefined, { + displayName: 'Santa Jynx Band', + firstTimeRewardFunction: () => { + new ChristmasPresent(3).gain(); + }, + resetDaily: true, + hideTrainer: true, + imageName: 'Bill\'s Grandpa without Eevee', +}); +TemporaryBattleList['Santa Jynx 3'] = new TemporaryBattle('Santa Jynx 3', [ + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), + new GymPokemon('Santa Jynx', 2512, 20), +], 'Huh? They ran off and are trying to blend in with the local Pokémon population. Find those Santa Jynx and collect more Christmas presents!', [ + new SpecialEventRequirement('Merry Christmas!'), + new ItemOwnedRequirement('Christmas_present', 49, GameConstants.AchievementOption.less), + new ItemOwnedRequirement('Christmas_present', 27), + new TemporaryBattleRequirement('Santa Jynx 1', 1, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 2', 1, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 4', 1, GameConstants.AchievementOption.less), +], undefined, { + displayName: 'Santa Jynx Band', + firstTimeRewardFunction: () => { + new ChristmasPresent(6).gain(); + }, + resetDaily: true, + hideTrainer: true, + imageName: 'Bill\'s Grandpa without Eevee', +}); +TemporaryBattleList['Santa Jynx 4'] = new TemporaryBattle('Santa Jynx 4', [ + new GymPokemon('Santa Jynx', 3768, 20), + new GymPokemon('Santa Jynx', 3768, 20), + new GymPokemon('Santa Jynx', 3768, 20), + new GymPokemon('Santa Jynx', 3768, 20), + new GymPokemon('Santa Jynx', 3768, 20), +], 'Huh? They ran off and are trying to blend in with the local Pokémon population. Find those Santa Jynx and collect more Christmas presents!', [ + new SpecialEventRequirement('Merry Christmas!'), + new ItemOwnedRequirement('Christmas_present', 49), + new TemporaryBattleRequirement('Santa Jynx 1', 1, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 2', 1, GameConstants.AchievementOption.less), + new TemporaryBattleRequirement('Santa Jynx 3', 1, GameConstants.AchievementOption.less), +], undefined, { + displayName: 'Santa Jynx Band', + firstTimeRewardFunction: () => { + new ChristmasPresent(10).gain(); + }, + rewardFunction: () => { + if (player.itemList.Christmas_present() >= 150) { + player.itemList.Christmas_present(50); + } + }, + resetDaily: true, + hideTrainer: true, + imageName: 'Bill\'s Grandpa without Eevee', +}); +//Johto Temporary Battles +TemporaryBattleList['Silver 1'] = new TemporaryBattle('Silver 1', [ + new GymPokemon('Cyndaquil', 176000, 5, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Grass)), + new GymPokemon('Totodile', 176000, 5, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Fire)), + new GymPokemon('Chikorita', 176000, 5, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Water)), +], '...Humph! Are you happy you won?', [new RouteKillRequirement(10, GameConstants.Region.johto, 30)], undefined, { + displayName: 'Rival Silver', + returnTown: 'Cherrygrove City', + imageName: 'Silver', +}); +TemporaryBattleList['Silver 2'] = new TemporaryBattle('Silver 2', [ + new GymPokemon('Gastly', 220788, 14), + new GymPokemon('Zubat', 220788, 16), + new GymPokemon('Quilava', 237772, 18, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Grass)), + new GymPokemon('Croconaw', 237772, 18, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Fire)), + new GymPokemon('Bayleef', 237772, 18, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Water)), +], '...Humph! Useless Pokémon! Listen, you. You only won because my Pokémon were weak.', [new RouteKillRequirement(10, GameConstants.Region.johto, 33)], undefined, { + displayName: 'Rival Silver', + returnTown: 'Azalea Town', + imageName: 'Silver', +}); +TemporaryBattleList.Sudowoodo = new TemporaryBattle('Sudowoodo', [new GymPokemon('Sudowoodo', 540000, 20)], undefined, [new GymBadgeRequirement(BadgeEnums.Plain)], [new TemporaryBattleRequirement('Sudowoodo'), new ObtainedPokemonRequirement('Sudowoodo')], { + isTrainerBattle: false, + returnTown: 'Goldenrod City', + hideTrainer: true, + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.johto, 31), +}); +TemporaryBattleList['Silver 3'] = new TemporaryBattle('Silver 3', [ + new GymPokemon('Gastly', 227997, 20), + new GymPokemon('Zubat', 227997, 20), + new GymPokemon('Magnemite', 223344, 18), + new GymPokemon('Quilava', 251262, 22, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Grass)), + new GymPokemon('Croconaw', 251262, 22, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Fire)), + new GymPokemon('Bayleef', 251262, 22, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Water)), +], '...Humph! I\'m not fighting with another weakling ever again. It\'s just too much playing around.', [new QuestLineStepCompletedRequirement('The Legendary Beasts', 1)], undefined, { + displayName: 'Rival Silver', + imageName: 'Silver', +}); +TemporaryBattleList['Silver 4'] = new TemporaryBattle('Silver 4', [ + new GymPokemon('Golbat', 274520, 32), + new GymPokemon('Magnemite', 260794, 30), + new GymPokemon('Haunter', 260794, 30), + new GymPokemon('Sneasel', 281383, 34), + new GymPokemon('Quilava', 295109, 34, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Grass)), + new GymPokemon('Feraligatr', 295109, 32, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Fire)), + new GymPokemon('Meganium', 295109, 34, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Water)), +], '...Why... Why do I lose? I\'ve assembled the toughest Pokémon. I haven\'t eased up on the gas. So why do I lose?', [ + new GymBadgeRequirement(BadgeEnums.Mineral), + new GymBadgeRequirement(BadgeEnums.Glacier), +], undefined, { + displayName: 'Rival Silver', + imageName: 'Silver', +}); +TemporaryBattleList['Silver 5'] = new TemporaryBattle('Silver 5', [ + new GymPokemon('Sneasel', 363709, 36), + new GymPokemon('Golbat', 375075, 38), + new GymPokemon('Magneton', 375075, 37), + new GymPokemon('Kadabra', 363709, 37), + new GymPokemon('Haunter', 363709, 37), + new GymPokemon('Typhlosion', 397807, 40, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Grass)), + new GymPokemon('Feraligatr', 397807, 40, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Fire)), + new GymPokemon('Meganium', 397807, 40, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Water)), +], '.................. I haven\'t given up on becoming the greatest Trainer... I\'m going to find out why I can\'t win and become stronger... When I do, I will challenge you. I\'ll beat you down with all my power. ...Humph! You keep at it until then.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Victory Road Johto'))], undefined, { + displayName: 'Rival Silver', + returnTown: 'Victory Road Johto', + imageName: 'Silver', +}); +TemporaryBattleList['Suicune 1'] = new TemporaryBattle('Suicune 1', [new GymPokemon('Suicune', 1044000, 40)], 'Suicune fled.', [ + new QuestLineStartedRequirement('Eusine\'s Chase'), + new RouteKillRequirement(10, GameConstants.Region.johto, 41), +], undefined, { + displayName: 'Suicune', + returnTown: 'Cianwood City', + imageName: '../pokemon/245', + hideTrainer: true, +}); +TemporaryBattleList.Eusine = new TemporaryBattle('Eusine', [ + new GymPokemon('Drowzee', 348000, 25), + new GymPokemon('Haunter', 348000, 25), + new GymPokemon('Electrode', 359000, 27), +], 'I hate to admit it, but you win. You\'re amazing! I\'m starting to understand why Suicune was keeping an eye on you. I\'m going to keep searching for Suicune. I have a feeling we\'ll see each other again. See you around!', [new QuestLineStepCompletedRequirement('Eusine\'s Chase', 1)], undefined, { + displayName: 'Eusine', + returnTown: 'Cianwood City', +}); +TemporaryBattleList['Suicune 2'] = new TemporaryBattle('Suicune 2', [new GymPokemon('Suicune', 1115500, 40)], 'Suicune fled.', [ + new QuestLineStepCompletedRequirement('Eusine\'s Chase', 2), + new RouteKillRequirement(10, GameConstants.Region.johto, 42), +], undefined, { + displayName: 'Suicune', + returnTown: 'Mahogany Town', + imageName: '../pokemon/245', + hideTrainer: true, +}); +TemporaryBattleList['Red Gyarados'] = new TemporaryBattle('Red Gyarados', [new GymPokemon('Gyarados', 1100000, 30, undefined, true)], undefined, [ + new QuestLineStartedRequirement('Team Rocket Again'), + new RouteKillRequirement(10, GameConstants.Region.johto, 43), +], undefined, { + displayName: 'Red Gyarados', + returnTown: 'Mahogany Town', + isTrainerBattle: false, + hideTrainer: true, + visibleRequirement: new QuestLineStartedRequirement('Team Rocket Again'), +}); +TemporaryBattleList['Suicune 3'] = new TemporaryBattle('Suicune 3', [new GymPokemon('Suicune', 3269100, 40)], 'Suicune fled.', [new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion), new QuestLineStepCompletedRequirement('Eusine\'s Chase', 4)], undefined, { + displayName: 'Suicune', + returnTown: 'Vermilion City', + imageName: '../pokemon/245', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('Eusine\'s Chase', 4), +}); +TemporaryBattleList['Suicune 4'] = new TemporaryBattle('Suicune 4', [new GymPokemon('Suicune', 3359100, 40)], 'Suicune fled.', [ + new QuestLineStepCompletedRequirement('Eusine\'s Chase', 6), + new RouteKillRequirement(10, GameConstants.Region.kanto, 14), +], undefined, { + displayName: 'Suicune', + returnTown: 'Fuchsia City', + imageName: '../pokemon/245', + hideTrainer: true, +}); +TemporaryBattleList['Suicune 5'] = new TemporaryBattle('Suicune 5', [new GymPokemon('Suicune', 3449100, 40)], 'Suicune didn\'t flee.', [new QuestLineStepCompletedRequirement('Eusine\'s Chase', 8)], undefined, { + displayName: 'Suicune', + returnTown: 'Bill\'s House', + imageName: '../pokemon/245', + hideTrainer: true, +}); +TemporaryBattleList['Suicune 6'] = new TemporaryBattle('Suicune 6', [new GymPokemon('Suicune', 3449100, 40)], '', [new QuestLineStepCompletedRequirement('Eusine\'s Chase', 10)], [new QuestLineStepCompletedRequirement('Eusine\'s Chase', 11)], { + displayName: 'Suicune', + returnTown: 'Bill\'s House', + imageName: '../pokemon/245', + hideTrainer: true, + isTrainerBattle: false, +}); +TemporaryBattleList['Kimono Girls'] = new TemporaryBattle('Kimono Girls', [ + new GymPokemon('Umbreon', 660000, 42), + new GymPokemon('Espeon', 660000, 43), + new GymPokemon('Flareon', 660000, 46), + new GymPokemon('Jolteon', 660000, 40), + new GymPokemon('Vaporeon', 660000, 40), +], 'You have beautifully proven that the bond between people can be extended to the bond between people and Pokémon. We all appreciate that you have lived up to our expectations. This Clear Bell will signal to Ho-Oh that you are worthy of its attentions.', [new QuestLineStepCompletedRequirement('Rainbow Guardian', 0)], undefined, { + imageName: 'Kimono Girl', +}); +TemporaryBattleList['Spiky-eared Pichu'] = new TemporaryBattle('Spiky-eared Pichu', [new GymPokemon('Spiky-eared Pichu', 3178500, 20)], 'The Spiky-eared Pichu ran into the forest!', [new QuestLineStepCompletedRequirement('Unfinished Business', 6)], undefined, { + displayName: 'Strange Pichu', + hideTrainer: true, + imageName: '../pokemon/172.01', +}); +TemporaryBattleList['Rocket Boss Giovanni'] = new TemporaryBattle('Rocket Boss Giovanni', [ + new GymPokemon('Nidoking', 861275, 42), + new GymPokemon('Murkrow', 861275, 43), + new GymPokemon('Nidoqueen', 861275, 46), + new GymPokemon('Kangaskhan', 875275, 40), +], 'What in the world are you? How this is possible...? How can a kid like you manage to destroy my dream once again? The precious dream of Team Rocket has become little more than an illusion...', [new QuestLineStepCompletedRequirement('Unfinished Business', 9)]); +TemporaryBattleList['Silver 6'] = new TemporaryBattle('Silver 6', [ + new GymPokemon('Sneasel', 540775, 46), + new GymPokemon('Golbat', 540775, 47), + new GymPokemon('Magneton', 554465, 46), + new GymPokemon('Alakazam', 554465, 48), + new GymPokemon('Gengar', 554465, 48), + new GymPokemon('Typhlosion', 581846, 50, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Grass)), + new GymPokemon('Feraligatr', 581846, 50, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Fire)), + new GymPokemon('Meganium', 581846, 50, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Water)), +], 'My training\'s still not good enough...? My Pokémon are so weak, it makes me frustrated... But I can feel that they are getting better after each battle.................. Tch! They\'re still too weak! I need to give them more training...', [new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion)], undefined, { + displayName: 'Rival Silver', + imageName: 'Silver', +}); +TemporaryBattleList['Silver 7'] = new TemporaryBattle('Silver 7', [ + new GymPokemon('Sneasel', 633820, 55), + new GymPokemon('Magneton', 653626, 55), + new GymPokemon('Gengar', 669472, 56), + new GymPokemon('Alakazam', 669472, 56), + new GymPokemon('Crobat', 693240, 58), + new GymPokemon('Typhlosion', 705124, 60, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Grass)), + new GymPokemon('Feraligatr', 705124, 60, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Fire)), + new GymPokemon('Meganium', 705124, 60, new StarterRequirement(GameConstants.Region.johto, GameConstants.Starter.Water)), +], '...Oh, no... I still can\'t win after all that training... I...I have to believe more in my Pokémon... ...No big deal. Sorry to have got in the way. Don\'t forget to rest your Pokémon before you challenge the Champion again!', [new TemporaryBattleRequirement('Silver 6')], [new NullRequirement], { + displayName: 'Rival Silver', + imageName: 'Silver', + rewardFunction: () => Notifier.notify({ message: 'Congratulations on beating Silver at his best! Come back to fight him again at any time.' }), +}); +TemporaryBattleList.Red = new TemporaryBattle('Red', [ + new GymPokemon('Pikachu', 643820, 81), + new GymPokemon('Espeon', 663626, 73), + new GymPokemon('Snorlax', 679472, 75), + new GymPokemon('Venusaur', 679472, 77), + new GymPokemon('Charizard', 679472, 77), + new GymPokemon('Blastoise', 803240, 77), +], '...', [new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion), new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Mt. Silver'))], undefined, { + rewardFunction: () => { + BagHandler.gainItem({ type: ItemType.item, id: 'Light_Ball' }, 1); + Notifier.notify({ + message: 'You were awarded a Light Ball for defeating Red.', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Items.dropped_item, + }); + }, + resetDaily: true, + returnTown: 'Mt. Silver', +}); +TemporaryBattleList['Youngster Joey'] = new TemporaryBattle('Youngster Joey', [new GymPokemon('Rattata', 548919101828, 100)], 'How?!? My Rattata is in the top percentage of all Rattata!', [new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Elite_KantoChampion), new SpecialEventRequirement('Hoopa Day')])], undefined, { + displayName: 'Youngster Joey', + returnTown: 'Cherrygrove City', + imageName: 'Youngster', + rewardFunction: () => { + const reward = 64; + App.game.wallet.gainMoney(reward, true); + Notifier.notify({ + message: TextMerger.mergeText(`Youngster Joey was defeated! +$playername$ got ${reward.toLocaleString('en-US')} for winning!`), + type: NotificationConstants.NotificationOption.danger, + timeout: 3.6e7, + title: 'You defeated Youngster Joey!', + }); + }, +}); +//Hoenn Temporary Battles +TemporaryBattleList['May 1'] = new TemporaryBattle('May 1', [ + new GymPokemon('Torchic', 823400, 5, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Mudkip', 823400, 5, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Treecko', 823400, 5, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), +], 'Wow! That\'s great! You\'re pretty good!', [new RouteKillRequirement(10, GameConstants.Region.hoenn, 103)], undefined, { + displayName: 'Pokémon Trainer May', + returnTown: 'Oldale Town', + imageName: 'May', +}); +TemporaryBattleList['May 2'] = new TemporaryBattle('May 2', [ + new GymPokemon('Lotad', 1124608, 13, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Torkoal', 1124608, 13, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Wingull', 1124608, 13, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), + new GymPokemon('Torchic', 1197952, 15, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Mudkip', 1197952, 15, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Treecko', 1197952, 15, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), +], 'Yikes! You\'re better than I expected!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Rusturf Tunnel'))], undefined, { + displayName: 'Pokémon Trainer May', + returnTown: 'Rustboro City', + imageName: 'May', +}); +TemporaryBattleList['May 3'] = new TemporaryBattle('May 3', [ + new GymPokemon('Wingull', 1119525, 18, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Lombre', 1119525, 18, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Wingull', 1119525, 18, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), + new GymPokemon('Lombre', 1119525, 18, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Slugma', 1119525, 18, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Slugma', 1119525, 18, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), + new GymPokemon('Combusken', 1153450, 20, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Marshtomp', 1153450, 20, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Grovyle', 1153450, 20, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), +], 'Yikes! You\'re better than I expected!', [new RouteKillRequirement(10, GameConstants.Region.hoenn, 110)], undefined, { + displayName: 'Pokémon Trainer May', + returnTown: 'Slateport City', + imageName: 'May', +}); +TemporaryBattleList['Wally 1'] = new TemporaryBattle('Wally 1', [new GymPokemon('Ralts', 1234567, 16)], '... ... ... ... ... ... ... ... ... ... ... ... ... ... ... I lost...', [new TemporaryBattleRequirement('May 3')], undefined, { + displayName: 'Pokémon Trainer Wally', + returnTown: 'Mauville City', + imageName: 'Wally', +}); +TemporaryBattleList['May 4'] = new TemporaryBattle('May 4', [ + new GymPokemon('Pelipper', 1832160, 29, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Lombre', 1832160, 29, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Slugma', 1832160, 29, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), + new GymPokemon('Lombre', 1832160, 29, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Slugma', 1832160, 29, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Lombre', 1832160, 29, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), + new GymPokemon('Combusken', 1887680, 31, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Marshtomp', 1887680, 31, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Grovyle', 1887680, 31, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), +], 'Achah! You\'re strong! I was worried that you might be struggling with your training.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Weather Institute'))], undefined, { + displayName: 'Pokémon Trainer May', + returnTown: 'Weather Institute', + imageName: 'May', +}); +TemporaryBattleList['Kecleon 1'] = new TemporaryBattle('Kecleon 1', [new GymPokemon('Kecleon', 6000000, 20)], undefined, [new TemporaryBattleRequirement('May 4')], [new TemporaryBattleRequirement('Kecleon 1'), new ObtainedPokemonRequirement('Kecleon')], { + isTrainerBattle: false, + returnTown: 'Fortree City', + hideTrainer: true, + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.hoenn, 119), +}); +TemporaryBattleList['Kecleon 2'] = new TemporaryBattle('Kecleon 2', [new GymPokemon('Kecleon', 7000000, 20)], undefined, [new TemporaryBattleRequirement('Kecleon 1')], [new TemporaryBattleRequirement('Kecleon 2')], { + isTrainerBattle: false, + returnTown: 'Fortree City', + hideTrainer: true, +}); +TemporaryBattleList['Kecleon 3'] = new TemporaryBattle('Kecleon 3', [new GymPokemon('Kecleon', 7000000, 20)], undefined, [new TemporaryBattleRequirement('Kecleon 2')], [new TemporaryBattleRequirement('Kecleon 3')], { + isTrainerBattle: false, + returnTown: 'Fortree City', + hideTrainer: true, +}); +TemporaryBattleList['May 5'] = new TemporaryBattle('May 5', [ + new GymPokemon('Tropius', 1932600, 31), + new GymPokemon('Pelipper', 2013125, 32, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Ludicolo', 2013125, 32, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Slugma', 2013125, 32, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), + new GymPokemon('Ludicolo', 2013125, 32, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Slugma', 2013125, 32, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Pelipper', 2013125, 32, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), + new GymPokemon('Combusken', 2133912, 34, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Grass)), + new GymPokemon('Marshtomp', 2133912, 34, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Fire)), + new GymPokemon('Grovyle', 2133912, 34, new StarterRequirement(GameConstants.Region.hoenn, GameConstants.Starter.Water)), +], 'I remember the battle I had with you on Route 103. That battle helped you become this strong, didn\'t it?', [new RouteKillRequirement(10, GameConstants.Region.hoenn, 121)], undefined, { + displayName: 'Pokémon Trainer May', + returnTown: 'Lilycove City', + imageName: 'May', +}); +TemporaryBattleList['Wally 2'] = new TemporaryBattle('Wally 2', [ + new GymPokemon('Altaria', 2048719, 44), + new GymPokemon('Delcatty', 2048719, 43), + new GymPokemon('Roselia', 2048719, 44), + new GymPokemon('Magneton', 2048719, 41), + new GymPokemon('Gardevoir', 2206313, 45), +], 'Wow! You are strong, after all! I couldn\'t beat you today, but one of these days, I\'ll catch up to you!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Victory Road Hoenn'))], [new NullRequirement], { + displayName: 'Pokémon Trainer Wally', + imageName: 'Wally', + rewardFunction: () => Notifier.notify({ message: 'Congratulations on beating Wally at his best! Come back to fight him again at any time.' }), +}); +TemporaryBattleList['Clown Jessie & James'] = new TemporaryBattle('Clown Jessie & James', [ + new GymPokemon('Victreebel', 3006000, 40), + new GymPokemon('Weezing', 3006000, 50), + new GymPokemon('Seviper', 3006000, 50), + new GymPokemon('Dustox', 3006000, 50), + new GymPokemon('Meowth', 2000, 5), +], 'We\'re blasting off again!!!!', [new QuestLineStepCompletedRequirement('Wish Maker', 0)], undefined, { + displayName: 'Jessie & James', +}); +TemporaryBattleList['Butler 1'] = new TemporaryBattle('Butler 1', [ + new GymPokemon('Kirlia', 3066000, 50), + new GymPokemon('Mightyena', 3066000, 50), + new GymPokemon('Dusclops', 3066000, 50), +], 'Butler managed to load Jirachi into a cage and escaped in his van. He is headed for the Jagged Pass!', [new QuestLineStepCompletedRequirement('Wish Maker', 5)], undefined, { + displayName: 'Butler', + imageName: 'Butler', +}); +TemporaryBattleList['Butler 2'] = new TemporaryBattle('Butler 2', [ + new GymPokemon('Kirlia', 3066000, 50), + new GymPokemon('Mightyena', 3066000, 50), + new GymPokemon('Dusclops', 3066000, 50), + new GymPokemon('Salamence', 4166000, 80), +], 'Butler throws the switch on a machine, causing the earth to quake. A huge, ominous shape begins to rise from the ground!', [new QuestLineStepCompletedRequirement('Wish Maker', 6)], undefined, { + displayName: 'Butler', + imageName: 'Butler', +}); +TemporaryBattleList['Meta Groudon'] = new TemporaryBattle('Meta Groudon', [new GymPokemon('Meta Groudon', 13800000, 100)], 'Meta Groudon lets out a guttural roar and melts back into the earth!', [new QuestLineStepCompletedRequirement('Wish Maker', 7)], undefined, { + displayName: 'Meta Groudon', + returnTown: 'Lavaridge Town', + imageName: '../pokemon/383.02', + hideTrainer: true, +}); +TemporaryBattleList.Latias = new TemporaryBattle('Latias', [new GymPokemon('Latias', 13800000, 100)], 'Latias joins your party, and Latios flies away back to the mainland.', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Eon Duo', 3), new CustomRequirement(ko.pureComputed(() => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Latios')]()), 1, undefined, GameConstants.AchievementOption.less)])], undefined, { + displayName: 'Latias', + firstTimeRewardFunction: () => { + App.game.party.gainPokemonByName('Latias'); + }, + returnTown: 'Southern Island', + imageName: '../pokemon/380', + hideTrainer: true, +}); +TemporaryBattleList.Latios = new TemporaryBattle('Latios', [new GymPokemon('Latios', 13800000, 100)], 'Latios joins your party, and Latias flies away back to the mainland.', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Eon Duo', 3), new CustomRequirement(ko.pureComputed(() => App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Latias')]()), 1, undefined, GameConstants.AchievementOption.less)])], undefined, { + displayName: 'Latios', + firstTimeRewardFunction: () => { + App.game.party.gainPokemonByName('Latios'); + }, + returnTown: 'Southern Island', + imageName: '../pokemon/381', + hideTrainer: true, +}); +TemporaryBattleList.Willie = new TemporaryBattle('Willie', [ + new GymPokemon('Zigzagoon', 6900000, 24), + new GymPokemon('Zigzagoon', 6900000, 24), +], 'Whew! With skills like that, y\'all should head to Phenac City.', [new QuestLineStepCompletedRequirement('Shadows in the Desert', 0)], undefined, { + displayName: 'Willie', + imageName: 'Willie', +}); +TemporaryBattleList.Folly = new TemporaryBattle('Folly', [ + new GymPokemon('Whismur', 6950000, 25), + new GymPokemon('Whismur', 6950000, 25), +], 'The shady guy flees, dropping a mysterious sack. The sack.... cries out in pain?', [new QuestLineStepCompletedRequirement('Shadows in the Desert', 1)], undefined, { + displayName: 'Shady Guy', + imageName: 'Miror B. Peon (folly)', +}); +TemporaryBattleList['Cipher Peon Doven'] = new TemporaryBattle('Cipher Peon Doven', [ + new GymPokemon('Spheal', 7300000, 33), + new GymPokemon('Carvanha', 7300000, 34), +], 'Rats! Foiled by some nobody!', [new QuestLineStepCompletedRequirement('Shadows in the Desert', 14)], undefined, { + displayName: 'Cipher Peon Doven', + imageName: 'Cipher Peon (female)', +}); +TemporaryBattleList['Cipher Peon Silton'] = new TemporaryBattle('Cipher Peon Silton', [ + new GymPokemon('Shroomish', 7300000, 34), + new GymPokemon('Cacnea', 7300000, 34), +], 'Man! I was really having fun doing these crimes.', [new QuestLineStepCompletedRequirement('Shadows in the Desert', 14)], undefined, { + displayName: 'Cipher Peon Silton', + imageName: 'Cipher Peon (male)', +}); +TemporaryBattleList['Cipher Peon Kass'] = new TemporaryBattle('Cipher Peon Kass', [ + new GymPokemon('Baltoy', 4900000, 35), + new GymPokemon('Ralts', 4900000, 35), + new GymPokemon('Kirlia', 4900000, 35), +], 'Run away!', [new QuestLineStepCompletedRequirement('Shadows in the Desert', 14)], undefined, { + displayName: 'Cipher Peon Kass', + imageName: 'Cipher Peon (female)', +}); +TemporaryBattleList['Cipher Peon Naps'] = new TemporaryBattle('Cipher Peon Naps', [new GymPokemon('Teddiursa', 110813753, 11, undefined, undefined, GameConstants.ShadowStatus.Shadow)], // Slightly weaker than Calem 1 +'What was that? My Shadow Pokémon! It doesn\'t matter though, my teammates escaped with Professor Krane!', [new QuestLineStepCompletedRequirement('Gale of Darkness', 0)], undefined, { + displayName: 'Cipher Peon Naps', + imageName: 'Cipher Peon (yellow)', +}); +TemporaryBattleList['Chobin 1'] = new TemporaryBattle('Chobin 1', [ + new GymPokemon('Sunkern', 57406876, 6), + new GymPokemon('Magikarp', 57406876, 6), +], 'Huh? Closer observation reveals that the subject is a trainer. Ergo, the subject is not a burglar! Ahaha! Chobin wishes you spoke up right away. You\'re $playername$? Chobin apologizes for jumping to the wrong conclusion.', [new QuestLineStepCompletedRequirement('Gale of Darkness', 2)], undefined, { + displayName: 'Chobin', + imageName: 'Chobin', +}); +TemporaryBattleList['Miror B. 1'] = new TemporaryBattle('Miror B. 1', [ + new GymPokemon('Lombre', 34444125, 17), + new GymPokemon('Lombre', 34444125, 17), + new GymPokemon('Lombre', 34444125, 17), + new GymPokemon('Voltorb', 34444125, 19, undefined, undefined, GameConstants.ShadowStatus.Shadow), +], 'You messed up my rhythm! I just can\'t, no, I just can\'t do it! Shouldn\'t you be paying more attention to what\'s happening in the Pyrite Buiding than to me?', [new QuestLineStepCompletedRequirement('Gale of Darkness', 9)], undefined, { + displayName: 'Miror B.', + imageName: 'Cipher Admin Miror B', + returnTown: 'Pyrite Town', + firstTimeRewardFunction: () => { + BagHandler.gainItem({ type: ItemType.item, id: 'Magnet' }, 1); + Notifier.notify({ + message: 'You snagged a Magnet from Miror B\'s Voltorb!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + }, +}); +TemporaryBattleList['Chobin 2'] = new TemporaryBattle('Chobin 2', [ + new GymPokemon('Sunflora', 48221775, 26), + new GymPokemon('Gyarados', 48221775, 26), + new GymPokemon('Hoppip', 48221775, 26), + new GymPokemon('Tropius', 48221775, 26), +], 'Huh? Oh, you\'re that trainer from before?! Chobin wishes you spoke up right away.', [new QuestLineStepCompletedRequirement('Gale of Darkness', 17)], undefined, { + displayName: 'Chobin', + imageName: 'Robo Groudon', +}); +TemporaryBattleList['Cipher Peon Smarton'] = new TemporaryBattle('Cipher Peon Smarton', [ + new GymPokemon('Huntail', 49221775, 27), + new GymPokemon('Cacnea', 49221775, 27), + new GymPokemon('Teddiursa', 49221775, 27), + new GymPokemon('Koffing', 49221775, 27), +], 'You\'re too late! We already took everything we needed!', [new QuestLineStepCompletedRequirement('Gale of Darkness', 19)], undefined, { + displayName: 'Cipher Peon Smarton', + imageName: 'Cipher Peon (yellow)', +}); +TemporaryBattleList.Zook = new TemporaryBattle('Zook', [ + new GymPokemon('Zangoose', 35797654, 28, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Doduo', 35797654, 26), + new GymPokemon('Carvanha', 35797654, 26), + new GymPokemon('Seviper', 35797654, 26), + new GymPokemon('Relicanth', 35797654, 26), +], 'Yeah, whatever! I was leaving anyways.', [new QuestLineStepCompletedRequirement('Gale of Darkness', 21)], undefined, { + displayName: 'Zook', + imageName: 'Thug', + returnTown: 'Pyrite Town', +}); +TemporaryBattleList['Miror B. 2'] = new TemporaryBattle('Miror B. 2', [ + new GymPokemon('Lombre', 38797654, 26), + new GymPokemon('Lombre', 38797654, 26), + new GymPokemon('Lombre', 38797654, 26), + new GymPokemon('Nosepass', 38797654, 25, undefined, undefined, GameConstants.ShadowStatus.Shadow), + new GymPokemon('Ludicolo', 38797654, 26), +], 'I shouldn\'t have done something this strenuous right after eating… I\'ll need to get some new Shadow Pokémon from Team Snagem.', [new QuestLineStepCompletedRequirement('Gale of Darkness', 22)], undefined, { + displayName: 'Miror B.', + imageName: 'Cipher Admin Miror B', +}); +TemporaryBattleList['Sevii Rocket Grunt 1'] = new TemporaryBattle('Sevii Rocket Grunt 1', [ + new GymPokemon('Cubone', 3861120, 37), + new GymPokemon('Marowak', 4182880, 37), +], 'Huh, what? Why\'d you have to win?', [new QuestLineStepCompletedRequirement('Celio\'s Errand', 1)], undefined, { + displayName: 'Team Rocket Grunt', + imageName: 'Team Rocket Grunt (female)', +}); +TemporaryBattleList['Sevii Rocket Grunt 2'] = new TemporaryBattle('Sevii Rocket Grunt 2', [ + new GymPokemon('Rattata', 1850120, 35), + new GymPokemon('Raticate', 2011000, 35), + new GymPokemon('Sandshrew', 1930560, 35), + new GymPokemon('Sandslash', 2091440, 35), +], 'Develop amnesia conveniently and forget everything you heard!', [new QuestLineStepCompletedRequirement('Celio\'s Errand', 1)], undefined, { + displayName: 'Team Rocket Grunt', + imageName: 'Team Rocket Grunt (male)', +}); +TemporaryBattleList['Sevii Rocket Grunt 3'] = new TemporaryBattle('Sevii Rocket Grunt 3', [ + new GymPokemon('Houndour', 4309500, 49), + new GymPokemon('Houndour', 4309500, 49), +], 'Oh, but... Too much!', [new QuestLineStepCompletedRequirement('Celio\'s Errand', 8)], undefined, { + displayName: 'Team Rocket Grunt', + imageName: 'Team Rocket Grunt (female)', +}); +TemporaryBattleList['Sevii Rocket Grunt 4'] = new TemporaryBattle('Sevii Rocket Grunt 4', [ + new GymPokemon('Machop', 2844270, 48), + new GymPokemon('Machop', 2844270, 48), + new GymPokemon('Machoke', 2930460, 48), +], 'What do you think you\'re doing?!', [new QuestLineStepCompletedRequirement('Celio\'s Errand', 8)], undefined, { + displayName: 'Team Rocket Grunt', + imageName: 'Team Rocket Grunt (male)', +}); +TemporaryBattleList['Sevii Rocket Grunt 5'] = new TemporaryBattle('Sevii Rocket Grunt 5', [ + new GymPokemon('Hypno', 4309500, 49), + new GymPokemon('Hypno', 4309500, 49), +], 'Don\'t...you...dare...laugh...', [new QuestLineStepCompletedRequirement('Celio\'s Errand', 8)], undefined, { + displayName: 'Team Rocket Grunt', + imageName: 'Team Rocket Grunt (male)', +}); +TemporaryBattleList['Sevii Rocket Ariana'] = new TemporaryBattle('Sevii Rocket Ariana', [ + new GymPokemon('Muk', 2910600, 52), + new GymPokemon('Arbok', 2910600, 53), + new GymPokemon('Vileplume', 2998800, 54), +], 'You\'re doing things according to your beliefs and morals. I understand now...', [new QuestLineStepCompletedRequirement('Celio\'s Errand', 9)], undefined, { + displayName: 'Team Rocket Executive Ariana', + imageName: 'Rocket Executive (ariana)', +}); +TemporaryBattleList['Sevii Rocket Archer'] = new TemporaryBattle('Sevii Rocket Archer', [ + new GymPokemon('Golbat', 3045900, 53), + new GymPokemon('Weezing', 3045900, 54), + new GymPokemon('Houndoom', 3138200, 55), +], 'Urgh... You were too strong... ... Th-that\'s Giovanni\'s Badge! So it\'s true? Team Rocket really has disbanded? ...We will abandon this warehouse. But don\'t think this is over. I won\'t let this be the end. I will find Giovanni. And I will resurrect Team Rocket! I will... Until then, farewell!', [new QuestLineStepCompletedRequirement('Celio\'s Errand', 10)], undefined, { + displayName: 'Team Rocket Executive Archer', + imageName: 'Rocket Executive (archer)', +}); +TemporaryBattleList['Scientist Gideon'] = new TemporaryBattle('Scientist Gideon', [ + new GymPokemon('Voltorb', 1623360, 46), + new GymPokemon('Electrode', 1724820, 46), + new GymPokemon('Magnemite', 1623360, 46), + new GymPokemon('Magneton', 1724820, 46), + new GymPokemon('Porygon', 1877010, 46), +], 'If I can\'t sell the Sapphire, it\'s worthless! Go ahead, take it!', [new QuestLineStepCompletedRequirement('Celio\'s Errand', 11)]); +TemporaryBattleList['Pinkan Jessie & James'] = new TemporaryBattle('Pinkan Jessie & James', [ + new GymPokemon('Lickitung', 2000000, 40), + new GymPokemon('Pinkan Weezing', 3000000, 50), + new GymPokemon('Pinkan Arbok', 3000000, 50), + new GymPokemon('Meowth', 2000, 5), +], 'We\'re blasting off again!!!!', [new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 4)], undefined, { + displayName: 'Jessie & James', +}); +TemporaryBattleList['Pinkan Officer Jenny'] = new TemporaryBattle('Pinkan Officer Jenny', [ + new GymPokemon('Growlithe', 2000000, 40), + new GymPokemon('Arcanine', 3500000, 55), + new GymPokemon('Pinkan Nidoking', 4000000, 70), +], 'So you\'re not with them? Okay... Just don\'t help those criminals in the future, got it? Looks like some new Pinkan Pokémon have made their way to the island, if you bring us some Pinkan Berries we\'ll trade you for them.', [new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 5)], undefined, { + displayName: 'Officer Jenny', +}); +//Sinnoh Temporary Battles +TemporaryBattleList['Barry 1'] = new TemporaryBattle('Barry 1', [ + new GymPokemon('Chimchar', 1689240, 5, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Piplup', 1689240, 5, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Turtwig', 1689240, 5, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), +], 'What are you saying?! We ended up losing?!', [new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion)], undefined, { + displayName: 'Pokémon Trainer Barry', + returnTown: 'Twinleaf Town', + imageName: 'Barry', +}); +TemporaryBattleList['Barry 2'] = new TemporaryBattle('Barry 2', [ + new GymPokemon('Starly', 2886187, 7), + new GymPokemon('Chimchar', 3074416, 9, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Piplup', 3074416, 9, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Turtwig', 3074416, 9, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), +], 'What just happened? I lost?!', [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 202)], undefined, { + displayName: 'Pokémon Trainer Barry', + returnTown: 'Jubilife City', + imageName: 'Barry', +}); +TemporaryBattleList['Barry 3'] = new TemporaryBattle('Barry 3', [ + new GymPokemon('Staravia', 2239850, 25), + new GymPokemon('Buizel', 2195053, 23, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Ponyta', 2195053, 23, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Buizel', 2195053, 23, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Roselia', 2195053, 23, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Roselia', 2195053, 23, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Ponyta', 2195053, 23, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Monferno', 2329444, 27, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Prinplup', 2329444, 27, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Grotle', 2329444, 27, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), +], 'Waaah! It goes to show my surefire winning strategy doesn\'t work', [new GymBadgeRequirement(BadgeEnums.Relic)], undefined, { + displayName: 'Pokémon Trainer Barry', + returnTown: 'Hearthome City', + imageName: 'Barry', +}); +TemporaryBattleList['Barry 4'] = new TemporaryBattle('Barry 4', [ + new GymPokemon('Staravia', 2490700, 34), + new GymPokemon('Buizel', 2440886, 32, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Ponyta', 2440886, 32, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Buizel', 2440886, 32, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Roselia', 2440886, 32, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Roselia', 2440886, 32, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Ponyta', 2440886, 32, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Monferno', 2590328, 36, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Prinplup', 2590328, 36, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Grotle', 2590328, 36, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), +], 'Heh, yeah, maybe you did get a bit tougher since last time.', [ + new GymBadgeRequirement(BadgeEnums.Cobble), + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 213), +], undefined, { + displayName: 'Pokémon Trainer Barry', + returnTown: 'Pastoria City', + imageName: 'Barry', +}); +TemporaryBattleList['Galactic Boss Cyrus'] = new TemporaryBattle('Galactic Boss Cyrus', [ + new GymPokemon('Sneasel', 3255000, 34), + new GymPokemon('Golbat', 3460000, 34), + new GymPokemon('Murkrow', 3665000, 36), +], 'Impressive. Your prowess is notable.', [new QuestLineStepCompletedRequirement('A New World', 2)], undefined, { imageName: 'Galactic Boss (cyrus)' }); +TemporaryBattleList['Barry 5'] = new TemporaryBattle('Barry 5', [ + new GymPokemon('Staraptor', 2104080, 36), + new GymPokemon('Heracross', 2104080, 37), + new GymPokemon('Floatzel', 2051478, 35, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Rapidash', 2051478, 35, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Floatzel', 2051478, 35, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Roserade', 2051478, 35, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Roserade', 2051478, 35, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Rapidash', 2051478, 35, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Infernape', 2209284, 38, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Empoleon', 2209284, 38, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Torterra', 2209284, 38, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), +], 'Yeah, yeah, you\'re just a bit better than me, as usual.', [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 218)], undefined, { + displayName: 'Pokémon Trainer Barry', + returnTown: 'Canalave City', + imageName: 'Barry', +}); +TemporaryBattleList['Barry 6'] = new TemporaryBattle('Barry 6', [ + new GymPokemon('Staraptor', 3974738, 48), + new GymPokemon('Floatzel', 3740930, 47, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Rapidash', 3740930, 47, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Rapidash', 3740930, 47, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Snorlax', 3857834, 49, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Snorlax', 3857834, 49, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Floatzel', 3740930, 47, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Heracross', 3857834, 48), + new GymPokemon('Roserade', 3740930, 47, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Roserade', 3740930, 47, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Snorlax', 3857834, 49, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Infernape', 4161784, 51, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Empoleon', 4161784, 51, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Torterra', 4161784, 51, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), +], 'I guess I\'m not ready for the Pokémon League if I\'m losing to you! Darn it! You watch, though! I\'ll get tougher and win my way through the Pokémon League! Because I\'m going to become the Champion, the toughest Trainer! You\'d better not lose to anyone before me!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Victory Road Sinnoh'))], undefined, { + displayName: 'Pokémon Trainer Barry', + returnTown: 'Victory Road Sinnoh', + imageName: 'Barry', +}); +TemporaryBattleList['Barry 7'] = new TemporaryBattle('Barry 7', [ + new GymPokemon('Staraptor', 9727091, 81), + new GymPokemon('Floatzel', 9212128, 79, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Roserade', 9212128, 79, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Rapidash', 9212128, 79, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Roserade', 9212128, 79, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Rapidash', 9212128, 79, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Floatzel', 9212128, 79, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), + new GymPokemon('Heracross', 9498219, 81), + new GymPokemon('Snorlax', 9498219, 83), + new GymPokemon('Infernape', 10184837, 85, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Grass)), + new GymPokemon('Empoleon', 10184837, 85, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Fire)), + new GymPokemon('Torterra', 10184837, 85, new StarterRequirement(GameConstants.Region.sinnoh, GameConstants.Starter.Water)), +], '...! It\'s all right, though. Keep getting tougher. The more you do, the tougher my Pokémon and I get, too. There\'s no end to Pokémon. That\'s what I\'m saying!', [ + new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion), + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 225), +], [new NullRequirement], { + displayName: 'Pokémon Trainer Barry', + imageName: 'Barry', + rewardFunction: () => Notifier.notify({ message: 'Congratulations on beating Barry at his best! Come back to fight him again at any time.' }), +}); +TemporaryBattleList['Manaphy Go-Rock MGrunt 1'] = new TemporaryBattle('Manaphy Go-Rock MGrunt 1', [ + new GymPokemon('Graveler', 2920000, 22), + new GymPokemon('Graveler', 2920000, 22), + new GymPokemon('Graveler', 2920000, 22), +], 'Your teamwork is too good!', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 2)], undefined, { + displayName: 'Go-Rock Squad Grunt', + imageName: 'Go-Rock Squad Grunt (male)', +}); +TemporaryBattleList['Manaphy Go-Rock FGrunt 1'] = new TemporaryBattle('Manaphy Go-Rock FGrunt 1', [ + new GymPokemon('Rattata', 2200000, 22), + new GymPokemon('Rattata', 2200000, 22), + new GymPokemon('Rattata', 2200000, 22), + new GymPokemon('Rattata', 2200000, 22), +], 'Your battling skills are solid...', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 4)], undefined, { + displayName: 'Go-Rock Squad Grunt', + imageName: 'Go-Rock Squad Grunt (female)', +}); +TemporaryBattleList['Manaphy Go-Rock MGrunt 2'] = new TemporaryBattle('Manaphy Go-Rock MGrunt 2', [ + new GymPokemon('Zubat', 2200000, 22), + new GymPokemon('Zubat', 2200000, 22), + new GymPokemon('Zubat', 2200000, 22), + new GymPokemon('Zubat', 2200000, 22), +], 'Darn it! You better remember this!', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 5)], undefined, { + displayName: 'Go-Rock Squad Grunt', + imageName: 'Go-Rock Squad Grunt (male)', +}); +TemporaryBattleList['Manaphy Go-Rock MGrunt 3'] = new TemporaryBattle('Manaphy Go-Rock MGrunt 3', [ + new GymPokemon('Rattata', 2200000, 22), + new GymPokemon('Rattata', 2200000, 22), + new GymPokemon('Meowth', 4400000, 22), +], 'The Go-Rock Squad\'s future looks bleak...', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 5)], undefined, { + displayName: 'Go-Rock Squad Grunt', + imageName: 'Go-Rock Squad Grunt (male)', +}); +TemporaryBattleList['Manaphy Go-Rock FGrunt 2'] = new TemporaryBattle('Manaphy Go-Rock FGrunt 2', [new GymPokemon('Scyther', 8800000, 22)], 'Bleh to you!', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 5)], undefined, { + displayName: 'Go-Rock Squad Grunt', + imageName: 'Go-Rock Squad Grunt (female)', +}); +TemporaryBattleList['Manaphy Go-Rock MGrunt 4'] = new TemporaryBattle('Manaphy Go-Rock MGrunt 4', [ + new GymPokemon('Zubat', 2200000, 22), + new GymPokemon('Zubat', 2200000, 22), + new GymPokemon('Zubat', 2200000, 22), + new GymPokemon('Politoed', 2800000, 22), +], 'Darn it! You better remember this! ...Wait, didn\'t I already say that...?', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 8)], undefined, { + displayName: 'Go-Rock Squad Grunt', + imageName: 'Go-Rock Squad Grunt (male)', +}); +TemporaryBattleList['Manaphy Go-Rock Commander'] = new TemporaryBattle('Manaphy Go-Rock Commander', [ + new GymPokemon('Scyther', 3200000, 25), + new GymPokemon('Scyther', 3200000, 25), + new GymPokemon('Venusaur', 3500000, 30), +], 'Owowow! Okay, okay, I got it! You can have your stupid egg!', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 9)], undefined, { + displayName: 'Go-Rock Squad Commander', + imageName: 'Go-Rock Squad Commander', +}); +TemporaryBattleList['Manaphy Go-Rock Pincher'] = new TemporaryBattle('Manaphy Go-Rock Pincher', [ + new GymPokemon('Poochyena', 5500000, 40), + new GymPokemon('Carvanha', 5500000, 40), +], 'Argh! With that Manaphy Egg, I thought even an ex-Go-Rock like me could live out the rest of my life in ease! That Happiny took the egg to the south-east, across the water. I wanted to pursue it, but Carvanha are not... comfortable to ride on.', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 21)], undefined, { + displayName: 'Go-Rock Pokémon Pincher', + imageName: 'Go-Rock Squad Grunt (male)', +}); +TemporaryBattleList['Manaphy Egg Protectors'] = new TemporaryBattle('Manaphy Egg Protectors', [ + new GymPokemon('Glameow', 3500000, 40), + new GymPokemon('Pichu', 3600000, 40), + new GymPokemon('Happiny', 5000000, 45), +], 'As you step over the defeated Pokémon, the Manaphy egg glows... and hatches!', [new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 24)], undefined, { + displayName: 'Manaphy Egg Protectors', + imageName: 'specialNPCs/Manaphy Egg', + firstTimeRewardFunction: () => { + App.game.party.gainPokemonByName('Manaphy'); + }, +}); +TemporaryBattleList.Zero = new TemporaryBattle('Zero', [ + new GymPokemon('Magnemite', 10120000, 70), + new GymPokemon('Magneton', 10870000, 72), + new GymPokemon('Magnezone', 11420000, 75), +], 'Argh! I can\'t believe I lost to someone like you! You can keep the key for now, but I\'ll get my revenge one day.', [new QuestLineStepCompletedRequirement('Zero\'s Ambition', 12)]); +//Unova Temporary Battles +TemporaryBattleList['Hugh 1'] = new TemporaryBattle('Hugh 1', [ + new GymPokemon('Tepig', 7269010, 5, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Oshawott', 7269010, 5, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Snivy', 7269010, 5, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), +], 'I couldn\'t achieve victory for my partner... I won\'t let myself forget this frustration!', [new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion)], undefined, { + displayName: 'Pokémon Trainer Hugh', + returnTown: 'Aspertia City', + imageName: 'Hugh', +}); +TemporaryBattleList['Hugh 2'] = new TemporaryBattle('Hugh 2', [ + new GymPokemon('Tepig', 11630416, 8, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Oshawott', 11630416, 8, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Snivy', 11630416, 8, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), +], 'It can\'t be! How could I have lost? I need to apologize to my partner...', [ + new RouteKillRequirement(10, GameConstants.Region.unova, 20), + new TemporaryBattleRequirement('Hugh 1'), +], undefined, { + displayName: 'Pokémon Trainer Hugh', + returnTown: 'Floccesy Town', + imageName: 'Hugh', +}); +TemporaryBattleList['Team Plasma Grunt 1'] = new TemporaryBattle('Team Plasma Grunt 1', [new GymPokemon('Patrat', 5492150, 14)], 'Plasmaaaa! I lost! This is awful!', [new GymBadgeRequirement(BadgeEnums.Toxic)], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (male)', +}); +TemporaryBattleList['Colress 1'] = new TemporaryBattle('Colress 1', [ + new GymPokemon('Magnemite', 15852768, 21), + new GymPokemon('Klink', 16843566, 23), +], 'Splendid! You are quite the Trainer!', [ + new RouteKillRequirement(10, GameConstants.Region.unova, 4), + new GymBadgeRequirement(BadgeEnums.Insect), +], undefined, { + displayName: 'Pokémon Trainer Colress', + returnTown: 'Castelia City', + imageName: 'Team Plasma (colress)', +}); +TemporaryBattleList['Team Plasma Grunt 2'] = new TemporaryBattle('Team Plasma Grunt 2', [new GymPokemon('Trubbish', 35896600, 27)], 'Don\'t let it go to your head... But you put up a good fight, kid!', [ + new GymBadgeRequirement(BadgeEnums.Bolt), + new TemporaryBattleRequirement('Team Plasma Grunt 1'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 3), +], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (male)', +}); +TemporaryBattleList['Team Plasma Grunt 3'] = new TemporaryBattle('Team Plasma Grunt 3', [new GymPokemon('Watchog', 35896600, 27)], 'What\'s the big idea? This Pokémon I stole is useless!', [ + new GymBadgeRequirement(BadgeEnums.Bolt), + new TemporaryBattleRequirement('Team Plasma Grunt 1'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 3), +], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (female)', +}); +TemporaryBattleList['Hugh 3'] = new TemporaryBattle('Hugh 3', [ + new GymPokemon('Pignite', 13864044, 25, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Dewott', 13864044, 25, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Servine', 13864044, 25, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), + new GymPokemon('Simipour', 13456278, 25, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Simisage', 13456278, 25, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Tranquill', 13456278, 25), + new GymPokemon('Simisear', 13456278, 25, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), +], 'Man! I lost... You\'ve become way too tough! But, I\'m gonna get stronger, too!', [new GymBadgeRequirement(BadgeEnums.Quake)], undefined, { + displayName: 'Pokémon Trainer Hugh', + returnTown: 'Driftveil City', + imageName: 'Hugh', +}); +TemporaryBattleList.Cheren = new TemporaryBattle('Cheren', [ + new GymPokemon('Stoutland', 14251644, 25), + new GymPokemon('Cinccino', 13832478, 25), + new GymPokemon('Watchog', 13832478, 25), +], 'Fantastic! You and your Pokémon have grown much stronger!', [new TemporaryBattleRequirement('Hugh 3')], undefined, { + displayName: 'Pokémon Trainer Cheren', + returnTown: 'Driftveil City', + imageName: 'Cheren', +}); +TemporaryBattleList['Colress 2'] = new TemporaryBattle('Colress 2', [ + new GymPokemon('Magneton', 14768444, 25), + new GymPokemon('Elgyem', 14334078, 25), + new GymPokemon('Klink', 14334078, 25), +], 'Well done! I learned much from this battle!', [new TemporaryBattleRequirement('Cheren')], undefined, { + displayName: 'Pokémon Trainer Colress', + returnTown: 'Driftveil City', + imageName: 'Team Plasma (colress)', +}); +TemporaryBattleList['Team Plasma Grunt 4'] = new TemporaryBattle('Team Plasma Grunt 4', [new GymPokemon('Koffing', 39496600, 30)], 'You! So you\'re a Trainer who fights while believing in your Pokémon, are you?', [new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 5)], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (male)', +}); +TemporaryBattleList['Team Plasma Grunt 5'] = new TemporaryBattle('Team Plasma Grunt 5', [new GymPokemon('Trubbish', 39496600, 30)], 'Plasmaaaa! Plasmaaaa!!', [new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 5)], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (male)', +}); +TemporaryBattleList['Team Plasma Grunts 1'] = new TemporaryBattle('Team Plasma Grunts 1', [ + new GymPokemon('Golbat', 9774150, 29), + new GymPokemon('Liepard', 9974150, 29), + new GymPokemon('Grimer', 9774150, 29), + new GymPokemon('Krokorok', 9974150, 29), +], 'The Gym Leader is tough, but you... Are you even human?! I tried to use the same combination as you, and yet...', [new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 5)], undefined, { + displayName: 'Team Plasma Grunts', + imageName: 'Team Plasma Grunts (male)', +}); +TemporaryBattleList['Team Plasma Grunts 2'] = new TemporaryBattle('Team Plasma Grunts 2', [ + new GymPokemon('Koffing', 9774150, 29), + new GymPokemon('Watchog', 9974150, 29), + new GymPokemon('Grimer', 9774150, 29), + new GymPokemon('Raticate', 9974150, 29), +], 'No! At this rate, I... I won\'t be able to protect the Plasma Frigate! P-P-P-Plasmaaaa!', [new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 5)], undefined, { + displayName: 'Team Plasma Grunts', + imageName: 'Team Plasma Grunts (male)', +}); +TemporaryBattleList['Hugh 4'] = new TemporaryBattle('Hugh 4', [ + new GymPokemon('Unfezant', 16756278, 39), + new GymPokemon('Simipour', 16756278, 39, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Simisage', 16756278, 39, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Simisear', 16756278, 39, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), + new GymPokemon('Emboar', 17264044, 41, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Samurott', 17264044, 41, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Serperior', 17264044, 41, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), +], 'I couldn\'t even draw out my team\'s real strength... How pathetic!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Reversal Mountain'))], undefined, { + displayName: 'Pokémon Trainer Hugh', + returnTown: 'Undella Town', + imageName: 'Hugh', +}); +TemporaryBattleList['Team Plasma Grunt 6'] = new TemporaryBattle('Team Plasma Grunt 6', [ + new GymPokemon('Golbat', 22848300, 39), + new GymPokemon('Garbodor', 24848300, 39), +], 'What a blunder to have made in front of Zinzolin...', [ + new TemporaryBattleRequirement('Team Plasma Grunt 4'), + new TemporaryBattleRequirement('Team Plasma Grunt 5'), + new TemporaryBattleRequirement('Team Plasma Grunts 1'), + new TemporaryBattleRequirement('Team Plasma Grunts 2'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 8), +], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (male)', +}); +TemporaryBattleList['Zinzolin 1'] = new TemporaryBattle('Zinzolin 1', [ + new GymPokemon('Cryogonal', 23848300, 42), + new GymPokemon('Sneasel', 25848300, 44), +], 'You can\'t stop us! We will use the DNA Splicers to awaken the true power of the legendary Dragon-type Pokémon! We will steal the Splicers from the Opelucid City gym leader!', [new TemporaryBattleRequirement('Team Plasma Grunt 6')], undefined, { + displayName: 'Zinzolin', + imageName: 'Team Plasma (zinzolin)', +}); +TemporaryBattleList['Team Plasma Grunt 7'] = new TemporaryBattle('Team Plasma Grunt 7', [ + new GymPokemon('Watchog', 26298300, 44), + new GymPokemon('Muk', 28298300, 44), +], 'You little... You knocked out my stupid pawns!', [new TemporaryBattleRequirement('Zinzolin 1')], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (male)', +}); +TemporaryBattleList['Team Plasma Grunt 8'] = new TemporaryBattle('Team Plasma Grunt 8', [ + new GymPokemon('Golbat', 26298300, 44), + new GymPokemon('Garbodor', 28298300, 44), +], 'Argh! Lame! Stupid! Fool! Plasmaaaa!', [new TemporaryBattleRequirement('Zinzolin 1')], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (female)', +}); +TemporaryBattleList['Team Plasma Grunt 9'] = new TemporaryBattle('Team Plasma Grunt 9', [ + new GymPokemon('Seviper', 26298300, 44), + new GymPokemon('Weezing', 28298300, 44), +], 'Even if I lose, I will not give up on justice for Team Plasma! That\'s all!', [new TemporaryBattleRequirement('Zinzolin 1')], undefined, { + displayName: 'Team Plasma Grunt', + imageName: 'Team Plasma Grunt (male)', +}); +TemporaryBattleList['Zinzolin 2'] = new TemporaryBattle('Zinzolin 2', [ + new GymPokemon('Cryogonal', 17632200, 46), + new GymPokemon('Cryogonal', 17632200, 46), + new GymPokemon('Weavile', 20632200, 48), +], 'Have you gotten even stronger than you were in Lacunosa Town? How, in such a brief amount of time...', [ + new TemporaryBattleRequirement('Team Plasma Grunt 7'), + new TemporaryBattleRequirement('Team Plasma Grunt 8'), + new TemporaryBattleRequirement('Team Plasma Grunt 9'), +], undefined, { + displayName: 'Zinzolin', + imageName: 'Team Plasma (zinzolin)', +}); +TemporaryBattleList['Plasma Shadow 1'] = new TemporaryBattle('Plasma Shadow 1', [ + new GymPokemon('Pawniard', 18065533, 46), + new GymPokemon('Pawniard', 18065533, 46), + new GymPokemon('Absol', 21065533, 48), +], 'I hate to admit it, but... You\'re a good trainer. Awww. How unlucky. I don\'t happen to be the one holding the DNA Splicers. I was just buying time for the others to escape. Cheerio, bye-bye, whatever.', [new TemporaryBattleRequirement('Zinzolin 2')], undefined, { + displayName: 'Plasma Shadow', + imageName: 'Plasma Shadow', +}); +TemporaryBattleList['Colress 3'] = new TemporaryBattle('Colress 3', [ + new GymPokemon('Magneton', 13557307, 50), + new GymPokemon('Metang', 13557307, 50), + new GymPokemon('Beheeyem', 13557307, 50), + new GymPokemon('Magnezone', 13657307, 50), + new GymPokemon('Klinklang', 13957307, 52), +], 'So this is what it means to draw forth the power hidden in your Pokémon! To me, whether Team Plasma wins or whether you win will decide how the relationship between people and Pokémon should be! You\'d better hurry, they have already captured the legendary Dragon-type Pokémon! Good luck in your battle!', [ + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Giant Chasm')), + new TemporaryBattleRequirement('Plasma Shadow 1'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 17), +], undefined, { + displayName: 'Colress', + imageName: 'Team Plasma (colress)', +}); +TemporaryBattleList['Plasma Shadow 2'] = new TemporaryBattle('Plasma Shadow 2', [ + new GymPokemon('Pawniard', 25025488, 49), + new GymPokemon('Pawniard', 25025488, 49), + new GymPokemon('Absol', 28025488, 51), +], 'It doesn\'t bother us a bit if the stolen Pokémon cry or beg.', [new TemporaryBattleRequirement('Colress 3')], undefined, { + displayName: 'Plasma Shadow', + imageName: 'Plasma Shadow', +}); +TemporaryBattleList['Plasma Shadow 3'] = new TemporaryBattle('Plasma Shadow 3', [ + new GymPokemon('Pawniard', 25025488, 49), + new GymPokemon('Pawniard', 25025488, 49), + new GymPokemon('Banette', 28025488, 51), +], 'It doesn\'t bother us a bit if we have to use another Pokémon after one is defeated.', [new TemporaryBattleRequirement('Colress 3')], undefined, { + displayName: 'Plasma Shadow', + imageName: 'Plasma Shadow', +}); +TemporaryBattleList['Plasma Shadow 4'] = new TemporaryBattle('Plasma Shadow 4', [ + new GymPokemon('Pawniard', 25025488, 49), + new GymPokemon('Pawniard', 25025488, 49), + new GymPokemon('Accelgor', 28025488, 51), +], 'It doesn\'t bother us a bit if Pokémon win or lose.', [new TemporaryBattleRequirement('Colress 3')], undefined, { + displayName: 'Plasma Shadow', + imageName: 'Plasma Shadow', +}); +TemporaryBattleList['Ghetsis 1'] = new TemporaryBattle('Ghetsis 1', [ + new GymPokemon('Kyurem (Black)', 43933198, 50), + new GymPokemon('Kyurem (White)', 43933198, 50), +], 'I can\'t believe it! The Black and White Kyurem I went to all the trouble of preparing! How irritating! Now I have to go recapture Kyurem, don\'t I? But first, I\'ll take down this disgusting Trainer with my own hand! This time I WILL succeed! No matter what they try, no one will be able to stop me!', [ + new TemporaryBattleRequirement('Plasma Shadow 2'), + new TemporaryBattleRequirement('Plasma Shadow 3'), + new TemporaryBattleRequirement('Plasma Shadow 4'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 20), +], undefined, { + displayName: 'Ghetsis', + imageName: 'Ghetsis', +}); +TemporaryBattleList['Ghetsis 2'] = new TemporaryBattle('Ghetsis 2', [ + new GymPokemon('Cofagrigus', 16176055, 50), + new GymPokemon('Seismitoad', 16176055, 50), + new GymPokemon('Eelektross', 16176055, 50), + new GymPokemon('Drapion', 16176055, 50), + new GymPokemon('Toxicroak', 16276055, 50), + new GymPokemon('Hydreigon', 16676055, 52), +], 'My plans for complete and total world domination foiled yet again? No! It mustn\'t be! I couldn\'t have been defeated by some random Trainer from who knows where!', [new TemporaryBattleRequirement('Ghetsis 1')], undefined, { + displayName: 'Ghetsis', + imageName: 'Ghetsis', +}); +TemporaryBattleList['Hugh 5'] = new TemporaryBattle('Hugh 5', [ + new GymPokemon('Unfezant', 23557462, 55), + new GymPokemon('Simipour', 23086313, 55, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Simisage', 23086313, 55, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Simisear', 23086313, 55, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), + new GymPokemon('Bouffalant', 23557462, 55), + new GymPokemon('Emboar', 24217071, 57, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Samurott', 24217071, 57, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Serperior', 24217071, 57, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), +], '...Phew! You\'re really something! Thanks to you, I accomplished what I set out to do during my journey! I think you\'re really amazing! So become the Champion! Get the proof that you\'re a Trainer your Pokémon can be proud of! See you!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Victory Road Unova'))], undefined, { + displayName: 'Pokémon Trainer Hugh', + returnTown: 'Victory Road Unova', + imageName: 'Hugh', +}); +TemporaryBattleList['Hugh 6'] = new TemporaryBattle('Hugh 6', [ + new GymPokemon('Unfezant', 31270484, 62), + new GymPokemon('Simipour', 30507789, 62, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Simisage', 30507789, 62, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Simisear', 30507789, 62, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), + new GymPokemon('Bouffalant', 31270484, 62), + new GymPokemon('Flygon', 30507789, 62), + new GymPokemon('Eelektross', 30507789, 62), + new GymPokemon('Emboar', 32605200, 64, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Samurott', 32605200, 64, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Serperior', 32605200, 64, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), +], 'This bitter...yet refreshing feeling.', [new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion)], undefined, { + displayName: 'Pokémon Trainer Hugh', + returnTown: 'Undella Town', + imageName: 'Hugh', +}); +TemporaryBattleList['Hugh 7'] = new TemporaryBattle('Hugh 7', [ + new GymPokemon('Unfezant', 35809748, 65), + new GymPokemon('Simipour', 34936339, 65, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Simisage', 34936339, 65, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Simisear', 34936339, 65, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), + new GymPokemon('Bouffalant', 35809748, 65), + new GymPokemon('Flygon', 34936339, 65), + new GymPokemon('Eelektross', 34936339, 65), + new GymPokemon('Emboar', 37338212, 67, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Grass)), + new GymPokemon('Samurott', 37338212, 67, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Fire)), + new GymPokemon('Serperior', 37338212, 67, new StarterRequirement(GameConstants.Region.unova, GameConstants.Starter.Water)), +], 'Just as I\'d expected! You are really drawing forth your Pokémon\'s power!... I suppose that\'s it. If winning in battles is strength, then believing that your Pokémon will come back and waiting for its return is also strength. Doing what you think is right no matter what anyone else says, like these guys do, is strength, too.', [new TemporaryBattleRequirement('Hugh 6')], [new NullRequirement], { + displayName: 'Pokémon Trainer Hugh', + imageName: 'Hugh', + rewardFunction: () => Notifier.notify({ message: 'Congratulations on beating Hugh at his best! Come back to fight him again at any time.' }), +}); +TemporaryBattleList['Terrakion 1'] = new TemporaryBattle('Terrakion 1', [new GymPokemon('Terrakion', 175698480, 50, undefined, false)], 'You\'re actually very strong. It\'s very possible that Cobalion trusted you to find us. Well then, where are we supposed to meet? The Moor of Icirrus? Very well, I shall make my way there, then. You should come, too. Cobalion should know where you might find our companion, Virizion.', [new QuestLineStepCompletedRequirement('Swords of Justice', 4)], undefined, { + displayName: 'Terrakion', + imageName: '../pokemon/639', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('Swords of Justice', 5), +}); +TemporaryBattleList['Swords of Justice 1'] = new TemporaryBattle('Swords of Justice 1', [ + new GymPokemon('Cobalion', 60042160, 55, undefined, false), + new GymPokemon('Terrakion', 60042160, 55, undefined, false), + new GymPokemon('Virizion', 60042160, 55, undefined, false), +], 'It seems you\'re pretty strong, $playername$. We\'ll let you help us since you were able to defeat us in a battle. Now, onto the plan. We\'ll start by searching for clues on where Kyurem might attack, so you\'ll start by looking around the Giant Chasm. Good luck in your endeavour, report back with your findings.', [new QuestLineStepCompletedRequirement('Swords of Justice', 11)], undefined, { + displayName: 'Swords of Justice', + imageName: 'specialNPCs/Swords', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('Swords of Justice', 11), +}); +TemporaryBattleList['Kyurem 1'] = new TemporaryBattle('Kyurem 1', [new GymPokemon('Kyurem', 183060808, 60, undefined, false)], undefined, [new QuestLineStepCompletedRequirement('Swords of Justice', 14)], undefined, { + displayName: 'Kyurem', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('Swords of Justice', 14), +}); +TemporaryBattleList['Kyurem 2'] = new TemporaryBattle('Kyurem 2', [ + new GymPokemon('Kyurem', 62098860, 60, undefined, false), + new GymPokemon('Kyurem (Black)', 62098860, 60, undefined, false), + new GymPokemon('Kyurem (White)', 62098860, 60, undefined, false), +], undefined, [new QuestLineStepCompletedRequirement('Swords of Justice', 17)], undefined, { + displayName: 'Kyurem', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('Swords of Justice', 17), +}); +TemporaryBattleList['Kyurem 3'] = new TemporaryBattle('Kyurem 3', [ + new GymPokemon('Kyurem', 66667405, 60, undefined, false), + new GymPokemon('Kyurem (Black)', 66667405, 60, undefined, false), + new GymPokemon('Kyurem (White)', 66667405, 60, undefined, false), +], undefined, [new QuestLineStepCompletedRequirement('Swords of Justice', 19)], undefined, { + displayName: 'Kyurem', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('Swords of Justice', 19), +}); +TemporaryBattleList['Red Genesect 1'] = new TemporaryBattle('Red Genesect 1', [new GymPokemon('Genesect', 174858488, 80, undefined, true)], undefined, [new QuestLineStepCompletedRequirement('The Legend Awakened', 0)], undefined, { + displayName: 'Red Genesect', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('The Legend Awakened', 0), +}); +TemporaryBattleList['Genesect Burn'] = new TemporaryBattle('Genesect Burn', [new GymPokemon('Genesect (Burn)', 180858488, 80, undefined, false)], undefined, [new QuestLineStepCompletedRequirement('The Legend Awakened', 3)], undefined, { + displayName: 'Burn Drive Genesect', + returnTown: 'Castelia Sewers', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('The Legend Awakened', 3), +}); +TemporaryBattleList['Genesect Chill'] = new TemporaryBattle('Genesect Chill', [new GymPokemon('Genesect (Chill)', 180858488, 80, undefined, false)], undefined, [new QuestLineStepCompletedRequirement('The Legend Awakened', 3)], undefined, { + displayName: 'Chill Drive Genesect', + returnTown: 'Castelia Sewers', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('The Legend Awakened', 3), +}); +TemporaryBattleList['Genesect Douse'] = new TemporaryBattle('Genesect Douse', [new GymPokemon('Genesect (Douse)', 180858488, 80, undefined, false)], undefined, [new QuestLineStepCompletedRequirement('The Legend Awakened', 3)], undefined, { + displayName: 'Douse Drive Genesect', + returnTown: 'Castelia Sewers', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('The Legend Awakened', 3), +}); +TemporaryBattleList['Genesect Shock'] = new TemporaryBattle('Genesect Shock', [new GymPokemon('Genesect (Shock)', 180858488, 80, undefined, false)], undefined, [new QuestLineStepCompletedRequirement('The Legend Awakened', 3)], undefined, { + displayName: 'Shock Drive Genesect', + returnTown: 'Castelia Sewers', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('The Legend Awakened', 3), +}); +TemporaryBattleList['Red Genesect 2'] = new TemporaryBattle('Red Genesect 2', [new GymPokemon('Genesect (High-Speed)', 182858488, 80, undefined, true)], undefined, [new QuestLineStepCompletedRequirement('The Legend Awakened', 4)], undefined, { + displayName: 'Red Genesect', + hideTrainer: true, + visibleRequirement: new QuestLineStepCompletedRequirement('The Legend Awakened', 4), +}); +TemporaryBattleList['Dream Researcher'] = new TemporaryBattle('Dream Researcher', [new GymPokemon('Mega Audino', 125000000, 32)], 'Wow! You have proven that you have total power over the realm of dreams! The location of this Audinite was revealed to me in a dream, you deserve to have it!
    ', [new ObtainedPokemonRequirement('Landorus (Therian)'), new ObtainedPokemonRequirement('Audino'), new MaxRegionRequirement(GameConstants.Region.kalos)], undefined, { + imageName: 'Scientist (female)', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Audinite), +}); +//Kalos Temporary Battles +TemporaryBattleList['Shauna 1'] = new TemporaryBattle('Shauna 1', [ + new GymPokemon('Froakie', 24906504, 5, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Chespin', 24906504, 5, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Fennekin', 24906504, 5, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), +], 'Hey! I wasn\'t done watching my cute Li\'l Pokémon yet!', [new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion)], undefined, { + displayName: 'Pokémon Trainer Shauna', + returnTown: 'Aquacorde Town', + imageName: 'Shauna', +}); +TemporaryBattleList['Sycamore 1'] = new TemporaryBattle('Sycamore 1', [ + new GymPokemon('Bulbasaur', 17568392, 10), + new GymPokemon('Charmander', 17568392, 10), + new GymPokemon('Squirtle', 17568392, 10), +], 'Ha ha! You\'re too much for me! You\'re really something, aren\'t you?', [new RouteKillRequirement(10, GameConstants.Region.kalos, 4)], undefined, { + firstTimeRewardFunction: () => { + App.game.quests.getQuestLine('A Beautiful World').beginQuest(0, undefined, true); + }, + displayName: 'Pokémon Professor Sycamore', + imageName: 'Sycamore', +}); +TemporaryBattleList['Tierno 1'] = new TemporaryBattle('Tierno 1', [new GymPokemon('Corphish', 40132328, 12)], 'That was some nice footwork!', [new RouteKillRequirement(10, GameConstants.Region.kalos, 5)], undefined, { + displayName: 'Pokémon Trainer Tierno', + returnTown: 'Camphrier Town', + imageName: 'Tierno', +}); +TemporaryBattleList['Trevor & Tierno'] = new TemporaryBattle('Trevor & Tierno', [ + new GymPokemon('Pikachu', 23154377, 14), + new GymPokemon('Corphish', 23856025, 16), + new GymPokemon('Flabébé (Orange)', 23154377, 14), +], 'So you can\'t learn everything just from the Pokédex... I see!', [new RouteKillRequirement(10, GameConstants.Region.kalos, 7)], undefined, { + displayName: 'Pokémon Trainer Trevor & Pokémon Trainer Tierno', + returnTown: 'Camphrier Town', +}); +TemporaryBattleList['Team Flare Grunt 1'] = new TemporaryBattle('Team Flare Grunt 1', [ + new GymPokemon('Houndour', 35486579, 18), + new GymPokemon('Zubat', 36513421, 18), +], 'You may have beaten me, but when I lose, I go out in style!', [new QuestLineStepCompletedRequirement('A Beautiful World', 3)], undefined, { + displayName: 'Team Flare Grunt', + imageName: 'Team Flare Grunt (male)', +}); +TemporaryBattleList['Team Flare Grunt 2'] = new TemporaryBattle('Team Flare Grunt 2', [ + new GymPokemon('Houndour', 37260908, 21), + new GymPokemon('Golbat', 39069360, 23), +], 'You may have beaten me... again, but when I lose, I go out in style! But first hear this, pip-squeak! Team Flare is gonna use the stones on Route 10 and a fantastic treasure to make everyone on our team happy! In this world the ones who have power are the ones who win with flair!', [new QuestLineStepCompletedRequirement('A Beautiful World', 7)], undefined, { + displayName: 'Team Flare Grunt', + imageName: 'Team Flare Grunt (male)', +}); +TemporaryBattleList['Calem 1'] = new TemporaryBattle('Calem 1', [ + new GymPokemon('Meowstic', 40271251, 28), + new GymPokemon('Absol', 40271251, 28), + new GymPokemon('Braixen', 41888812, 30, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Frogadier', 41888812, 30, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Quilladin', 41888812, 30, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), +], 'Your bonds with your Pokémon are really strong. Although, I don\'t like losing much...', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Reflection Cave'))], undefined, { + displayName: 'Pokémon Trainer Calem', + returnTown: 'Shalour City', + imageName: 'Calem', +}); +TemporaryBattleList.Korrina = new TemporaryBattle('Korrina', [new GymPokemon('Mega Lucario', 135000000, 32)], 'What an incredible bond you have! What amazing power! You and Lucario are worthy of this Lucarionite!
    ', [new GymBadgeRequirement(BadgeEnums.Rumble), new ObtainedPokemonRequirement('Lucario')], undefined, { + imageName: 'Korrina', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Lucarionite), +}); +TemporaryBattleList['Courtney 1'] = new TemporaryBattle('Courtney 1', [new GymPokemon('Camerupt', 135000000, 53)], 'Tedious...bothersome...child...You should...just be quiet...and give me...the Key Stone! Bah! I need a vacation somewhere warm.', [new QuestLineStepCompletedRequirement('The Delta Episode', 4)], undefined, { + displayName: 'Magma Admin Courtney', + imageName: 'Magma Admin (courtney)', +}); +TemporaryBattleList['Matt 1'] = new TemporaryBattle('Matt 1', [new GymPokemon('Sharpedo', 135000000, 53)], 'Hooaahhh! You clown! Always gettin\' all up in my business! If it\'s gonna be like that, I\'m outta here! The Southern Island\'s gotta be more fun than this.', [new QuestLineStepCompletedRequirement('The Delta Episode', 4)], undefined, { + displayName: 'Aqua Admin Matt', + imageName: 'Aqua Admin (matt)', +}); +TemporaryBattleList['Zinnia 1'] = new TemporaryBattle('Zinnia 1', [ + new GymPokemon('Tyrantrum', 35437500, 53), + new GymPokemon('Altaria', 35437500, 53), + new GymPokemon('Salamence', 35437500, 53), + new GymPokemon('Whismur', 35437500, 53), +], 'Niiice! Real nice! Ohhh, I really felt that one! Full points to you! That settles it! You get this Meteorite Shard as a reward!', [new QuestLineStepCompletedRequirement('The Delta Episode', 8)], undefined, { + displayName: 'Zinnia', + imageName: 'Zinnia', +}); +TemporaryBattleList['Draconid Elder'] = new TemporaryBattle('Draconid Elder', [ + new GymPokemon('Dragonite', 37209375, 53), + new GymPokemon('Flygon', 37209375, 53), + new GymPokemon('Haxorus', 37209375, 53), + new GymPokemon('Garchomp', 37209375, 53), +], 'You are indeed powerful. I think you can help Zinnia.', [new QuestLineStepCompletedRequirement('The Delta Episode', 15)], undefined, { + displayName: 'Draconid Elder', + imageName: 'Draconid Elder', +}); +TemporaryBattleList['Aqua Grunt'] = new TemporaryBattle('Aqua Grunt', [ + new GymPokemon('Zubat', 35437500, 33), + new GymPokemon('Grimer', 35437500, 33), + new GymPokemon('Corphish', 35437500, 33), + new GymPokemon('Carvanha', 35437500, 33), +], 'Baaah! I gotta get out of here!', [new QuestLineStepCompletedRequirement('The Delta Episode', 17)], undefined, { + displayName: 'Aqua Grunt', + imageName: 'Team Aqua Grunt (female)', +}); +TemporaryBattleList['Magma Grunt'] = new TemporaryBattle('Magma Grunt', [ + new GymPokemon('Zubat', 35437500, 33), + new GymPokemon('Koffing', 35437500, 33), + new GymPokemon('Poochyena', 35437500, 33), + new GymPokemon('Numel', 35437500, 33), +], 'The boss is gonna be so mad!', [new QuestLineStepCompletedRequirement('The Delta Episode', 17)], undefined, { + displayName: 'Magma Grunt', + imageName: 'Team Magma Grunt (male)', +}); +TemporaryBattleList['Courtney 2'] = new TemporaryBattle('Courtney 2', [new GymPokemon('Mega Camerupt', 198102712, 55)], 'Why? Why must...you always...Always, always, always, always...Get in my way!', [new QuestLineStepCompletedRequirement('The Delta Episode', 18)], undefined, { + displayName: 'Magma Admin Courtney', + imageName: 'Magma Admin (courtney)', +}); +TemporaryBattleList['Matt 2'] = new TemporaryBattle('Matt 2', [new GymPokemon('Mega Sharpedo', 198102712, 55)], 'Dang it! Am I not good enough, bro?!', [new QuestLineStepCompletedRequirement('The Delta Episode', 18)], undefined, { + displayName: 'Aqua Admin Matt', + imageName: 'Aqua Admin (matt)', +}); +TemporaryBattleList['Delta Wallace'] = new TemporaryBattle('Delta Wallace', [ + new GymPokemon('Wailord', 36318830, 56), + new GymPokemon('Tentacruel', 36318830, 56), + new GymPokemon('Ludicolo', 36318830, 56), + new GymPokemon('Whiscash', 36318830, 56), + new GymPokemon('Gyarados', 36318830, 56), + new GymPokemon('Milotic', 36318830, 56), +], 'Zinnia has gone to the top of the Sky Pillar to try to summon Rayquaza. Please, try to help her. This Key Stone may help you.', [new QuestLineStepCompletedRequirement('The Delta Episode', 25)], undefined, { + displayName: 'Wallace', + imageName: 'Wallace', + firstTimeRewardFunction: () => { + BagHandler.gainItem({ type: ItemType.item, id: 'Key_stone' }, 1); + Notifier.notify({ + message: 'You were awarded a Key Stone from Wallace!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + }, +}); +TemporaryBattleList['Zinnia 2'] = new TemporaryBattle('Zinnia 2', [ + new GymPokemon('Goodra', 47940856, 60), + new GymPokemon('Tyrantrum', 47940856, 60), + new GymPokemon('Altaria', 47940856, 53), + new GymPokemon('Noivern', 47940856, 53), + new GymPokemon('Mega Salamence', 47940856, 53), +], 'I thought... But I\'m supposed to be the one who saves the world...', [new QuestLineStepCompletedRequirement('The Delta Episode', 26)], undefined, { + displayName: 'Zinnia', + imageName: 'Zinnia', +}); +TemporaryBattleList.Deoxys = new TemporaryBattle('Deoxys', [new GymPokemon('Deoxys', 293674710, 100)], 'The Meteor disintegrates into thousands of pieces.', [new QuestLineStepCompletedRequirement('The Delta Episode', 31)], undefined, { + hideTrainer: true, + imageName: '../pokemon/386', +}); +TemporaryBattleList['Delta Giovanni'] = new TemporaryBattle('Delta Giovanni', [ + new GymPokemon('Golem', 39620542, 60), + new GymPokemon('Nidoqueen', 39620542, 60), + new GymPokemon('Nidoking', 39620542, 63), + new GymPokemon('Cloyster', 39620542, 63), + new GymPokemon('Mega Beedrill', 42620542, 63), +], 'Even here? Is there no getting rid of you? Take this and leave me alone.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 17), new ObtainedPokemonRequirement('Beedrill')])], undefined, { + displayName: 'Giovanni', + imageName: 'Team Rocket Boss Giovanni', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Beedrillite), +}); +TemporaryBattleList['Mr. Stone'] = new TemporaryBattle('Mr. Stone', [ + new GymPokemon('Castform', 67500000, 60), + new GymPokemon('Mega Pidgeot', 67500000, 63), +], 'You\'re really strong! You should take this, it might come in handy with all this meteor business.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 6), new ObtainedPokemonRequirement('Pidgeot')])], undefined, { + displayName: 'Mr. Stone', + imageName: 'Mr Stone', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Pidgeotite), +}); +TemporaryBattleList['Shoal Fisherman'] = new TemporaryBattle('Shoal Fisherman', [new GymPokemon('Mega Slowbro', 148837500, 63)], 'I found this neat rock while hunting for shells! You want it?
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 6), new ObtainedPokemonRequirement('Slowbro')])], undefined, { + displayName: 'Shoal Fisherman', + imageName: 'Fisherman', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Slowbronite), +}); +TemporaryBattleList['Delta Brock'] = new TemporaryBattle('Delta Brock', [ + new GymPokemon('Sudowoodo', 47250000, 63), + new GymPokemon('Crobat', 47250000, 63), + new GymPokemon('Mega Steelix', 47250000, 63), +], 'Seems like you\'ve gotten really strong since Kanto! I found this neat rock in the cave, you should keep it.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 9), new ObtainedPokemonRequirement('Steelix')])], undefined, { + displayName: 'Brock', + imageName: 'Brock', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Steelixite), +}); +TemporaryBattleList['Delta Tabitha'] = new TemporaryBattle('Delta Tabitha', [new GymPokemon('Mega Camerupt', 217912983, 63)], 'I guess you\'ve earned this Cameruptite. Make sure your Camerupt holds on to it tightly.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 26), new ObtainedPokemonRequirement('Camerupt')])], undefined, { + displayName: 'Magma Admin Tabitha', + imageName: 'Magma Admin', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Cameruptite), +}); +TemporaryBattleList['Delta Shelly'] = new TemporaryBattle('Delta Shelly', [new GymPokemon('Mega Sharpedo', 217912983, 63)], 'Fine you win. Take this Sharpedonite. Make sure your Sharpedo holds on to it tightly.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 26), new ObtainedPokemonRequirement('Sharpedo')])], undefined, { + displayName: 'Aqua Admin Shelly', + imageName: 'Aqua Admin (shelly)', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Sharpedonite), +}); +TemporaryBattleList['Icy Boulder'] = new TemporaryBattle('Icy Boulder', [new GymPokemon('Mega Glalie', 141750000, 66)], 'The Glalie flees, dropping a stone.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 4), new ObtainedPokemonRequirement('Glalie')])], undefined, { + displayName: 'Icy Boulder', + imageName: '../pokemon/362.01', + hideTrainer: true, + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Glalitite), +}); +TemporaryBattleList['Mega Draconid Elder'] = new TemporaryBattle('Mega Draconid Elder', [ + new GymPokemon('Dragonite', 37209375, 53), + new GymPokemon('Flygon', 37209375, 53), + new GymPokemon('Haxorus', 37209375, 53), + new GymPokemon('Garchomp', 37209375, 53), + new GymPokemon('Mega Salamence', 114837210, 70), +], 'You truly are a master of dragons. Please, take this stone.
    ', [new MultiRequirement([new QuestLineCompletedRequirement('The Delta Episode'), new ObtainedPokemonRequirement('Salamence')])], undefined, { + displayName: 'Draconid Elder', + imageName: 'Draconid Elder', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Salamencite), +}); +TemporaryBattleList['Delta Steven'] = new TemporaryBattle('Delta Steven', [ + new GymPokemon('Skarmory', 33017118, 57), + new GymPokemon('Aggron', 33017118, 57), + new GymPokemon('Claydol', 33017118, 57), + new GymPokemon('Cradily', 33017118, 57), + new GymPokemon('Armaldo', 33017118, 57), + new GymPokemon('Mega Metagross', 36017118, 63), +], 'I have to admit, you keep surprising me! You deserve to have this.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 23), new ObtainedPokemonRequirement('Metagross')])], undefined, { + displayName: 'Steven', + imageName: 'Steven', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Metagrossite), +}); +TemporaryBattleList['Dr Cozmo'] = new TemporaryBattle('Dr Cozmo', [ + new GymPokemon('Lunatone', 79901427, 57), + new GymPokemon('Solrock', 79901427, 57), + new GymPokemon('Mega Gallade', 79901427, 63), +], 'That was invigorating! Please take this!
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 27), new ObtainedPokemonRequirement('Gallade')])], undefined, { + displayName: 'Dr. Cozmo', + imageName: 'Dr Cozmo', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Galladite), +}); +TemporaryBattleList['Matt 3'] = new TemporaryBattle('Matt 3', [ + new GymPokemon('Grimer', 70875000, 57), + new GymPokemon('Sharpedo', 70875000, 63), +], 'The Latias that Matt was harassing flies away, leaving a stone behind.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 5), new ObtainedPokemonRequirement('Latias')])], undefined, { + displayName: 'Aqua Admin Matt', + imageName: 'Aqua Admin (matt)', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Latiasite), +}); +TemporaryBattleList['Courtney 3'] = new TemporaryBattle('Courtney 3', [ + new GymPokemon('Koffing', 70875000, 57), + new GymPokemon('Camerupt', 70875000, 63), +], 'The Latios that Courtney was harassing flies away, leaving a stone behind.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 5), new ObtainedPokemonRequirement('Latios')])], undefined, { + displayName: 'Magma Admin Courtney', + imageName: 'Magma Admin (courtney)', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Latiosite), +}); +TemporaryBattleList['Hoenn Stone Salesman'] = new TemporaryBattle('Hoenn Stone Salesman', [ + new GymPokemon('Mega Sceptile', 72637661, 63), + new GymPokemon('Mega Blaziken', 72637661, 63), + new GymPokemon('Mega Swampert', 72637661, 63), +], 'Wow! I\'ll let you buy some of my super fancy stones, now that I know you\'re a serious trainer!', [new QuestLineStepCompletedRequirement('The Delta Episode', 5)], undefined, { + imageName: 'Ruin Maniac gen3', + firstTimeRewardFunction: () => { + if ((App.game.party.alreadyCaughtPokemonByName('Sceptile') == true) && (player.regionStarters[GameConstants.Region.hoenn]() == GameConstants.Starter.Grass)) { + player.gainMegaStone(GameConstants.MegaStoneType.Sceptilite); + Notifier.notify({ + message: 'You were awarded Sceptilite!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + } + else if ((App.game.party.alreadyCaughtPokemonByName('Blaziken') == true) && (player.regionStarters[GameConstants.Region.hoenn]() == GameConstants.Starter.Fire)) { + player.gainMegaStone(GameConstants.MegaStoneType.Blazikenite); + Notifier.notify({ + message: 'You were awarded Blazikenite!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + } + else if ((App.game.party.alreadyCaughtPokemonByName('Swampert') == true) && (player.regionStarters[GameConstants.Region.hoenn]() == GameConstants.Starter.Water)) { + player.gainMegaStone(GameConstants.MegaStoneType.Swampertite); + Notifier.notify({ + message: 'You were awarded Swampertite!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + } + else { + BagHandler.gainItem({ type: ItemType.item, id: 'Key_stone' }, 1); + Notifier.notify({ + message: 'You were awarded a Key Stone!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + } + }, +}); +TemporaryBattleList['Kalos Stone Salesman'] = new TemporaryBattle('Kalos Stone Salesman', [ + new GymPokemon('Mega Venusaur', 54478245, 63), + new GymPokemon('Mega Charizard X', 54478245, 63), + new GymPokemon('Mega Charizard Y', 54478245, 63), + new GymPokemon('Mega Blastoise', 54478245, 63), +], 'Wow! I\'ll let you buy some of my super fancy stones, now that I know you\'re a serious trainer!', [new QuestLineStepCompletedRequirement('A Beautiful World', 12)], undefined, { + imageName: 'Owner', + firstTimeRewardFunction: () => { + if ((App.game.party.alreadyCaughtPokemonByName('Venusaur')) && (player.regionStarters[GameConstants.Region.kanto]() == GameConstants.Starter.Grass)) { + player.gainMegaStone(GameConstants.MegaStoneType.Venusaurite); + Notifier.notify({ + message: 'You were awarded Venusaurite!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + } + else if ((App.game.party.alreadyCaughtPokemonByName('Charizard')) && (player.regionStarters[GameConstants.Region.kanto]() == GameConstants.Starter.Fire)) { + player.gainMegaStone(GameConstants.MegaStoneType.Charizardite_Y); + Notifier.notify({ + message: 'You were awarded Charizardite Y!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + } + else if ((App.game.party.alreadyCaughtPokemonByName('Blastoise')) && (player.regionStarters[GameConstants.Region.kanto]() == GameConstants.Starter.Water)) { + player.gainMegaStone(GameConstants.MegaStoneType.Blastoisinite); + Notifier.notify({ + message: 'You were awarded Blastoisinite!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + } + else { + BagHandler.gainItem({ type: ItemType.item, id: 'Key_stone' }, 1); + Notifier.notify({ + message: 'You were awarded a Key Stone!', + type: NotificationConstants.NotificationOption.success, + setting: NotificationConstants.NotificationSetting.Dungeons.rare_dungeon_item_found, + }); + } + }, +}); +TemporaryBattleList['Captain Stern'] = new TemporaryBattle('Captain Stern', [new GymPokemon('Sealeo', 217912983, 59)], 'Well I\'ll be! You\'re quite the trainer!', [new QuestLineStepCompletedRequirement('Primal Reversion', 4)], undefined, { + displayName: 'Captain Stern', + imageName: '../npcs/Sailor', +}); +TemporaryBattleList['Archie Primal'] = new TemporaryBattle('Archie Primal', [ + new GymPokemon('Mightyena', 59926070, 60), + new GymPokemon('Crobat', 59926070, 60), + new GymPokemon('Muk', 59926070, 60), + new GymPokemon('Sharpedo', 59926070, 60), +], 'You\'re too late, $playername$! I have uncovered the secrets of the Blue Orb, despite Maxie\'s meddling!', [new QuestLineStepCompletedRequirement('Primal Reversion', 9)], undefined, { + displayName: 'Archie', + imageName: '../npcs/Aqua Leader', +}); +TemporaryBattleList['Maxie Primal'] = new TemporaryBattle('Maxie Primal', [ + new GymPokemon('Mightyena', 59926070, 60), + new GymPokemon('Crobat', 59926070, 60), + new GymPokemon('Weezing', 59926070, 60), + new GymPokemon('Camerupt', 59926070, 60), +], 'You\'re too late, $playername$! I have uncovered the secrets of the Red Orb, despite Archie\'s meddling!', [new QuestLineStepCompletedRequirement('Primal Reversion', 9)], undefined, { + displayName: 'Maxie', + imageName: '../npcs/Magma Leader', +}); +TemporaryBattleList['Primal Groudon'] = new TemporaryBattle('Primal Groudon', [new GymPokemon('Primal Groudon', 293674710, 100)], 'Primal Groudon lets out a terrifying roar, then drops the Red Orb and returns to its normal form.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 14), new WeatherRequirement([WeatherType.Harsh_Sunlight])])], undefined, { + hideTrainer: true, + returnTown: 'Mt. Pyre', + imageName: '../pokemon/383.01', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Red_Orb), +}); +TemporaryBattleList['Primal Kyogre'] = new TemporaryBattle('Primal Kyogre', [new GymPokemon('Primal Kyogre', 293674710, 100)], 'Primal Kyogre lets out a terrifying roar, then drops the Blue Orb and returns to its normal form.
    ', [new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 14), new WeatherRequirement([WeatherType.Rain])])], undefined, { + hideTrainer: true, + returnTown: 'Mt. Pyre', + imageName: '../pokemon/382.01', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Blue_Orb), +}); +TemporaryBattleList['Aipom Alley'] = new TemporaryBattle('Aipom Alley', [ + new GymPokemon('Aipom', 31200000, 66), + new GymPokemon('Aipom', 31200000, 66), + new GymPokemon('Aipom', 31200000, 66), + new GymPokemon('Aipom', 31200000, 66), + new GymPokemon('Aipom', 31200000, 66), +], 'The Aipoms run off, dropping a small glass vial.', [new QuestLineStepCompletedRequirement('Detective Pikachu', 0)], undefined, { + hideTrainer: true, + imageName: 'specialNPCs/Aipom Alley', +}); +TemporaryBattleList['Mime Interview'] = new TemporaryBattle('Mime Interview', [new GymPokemon('Mr. Mime', 160225334, 100)], 'Mr. Mime relents and agrees to tell you what he knows.', [new QuestLineStepCompletedRequirement('Detective Pikachu', 3)], undefined, { + hideTrainer: true, + imageName: 'specialNPCs/Mime Interview', +}); +TemporaryBattleList['Underground Fighting Ring'] = new TemporaryBattle('Underground Fighting Ring', [ + new GymPokemon('Charizard', 83224411, 70), + new GymPokemon('Magikarp', 10, 70), + new GymPokemon('Gyarados', 85658821, 70), +], 'OK, OK! I get my R from a guy at Clifford Industries, in Goldenrod City.', [new QuestLineStepCompletedRequirement('Detective Pikachu', 5)], undefined, { imageName: 'Veteran (male)' }); +TemporaryBattleList['Lab Ambush'] = new TemporaryBattle('Lab Ambush', [ + new GymPokemon('Greninja', 58333333, 70), + new GymPokemon('Greninja', 58333333, 70), + new GymPokemon('Greninja', 58333333, 70), +], 'As the dust clears from the battle, you see that Detective Pikachu has been wounded!', [new QuestLineStepCompletedRequirement('Detective Pikachu', 9)], undefined, { + hideTrainer: true, + imageName: 'specialNPCs/Lab Ambush', +}); +TemporaryBattleList.Imposter = new TemporaryBattle('Imposter', [new GymPokemon('Ditto', 186753099, 100)], 'The Ditto loses its human form and collapses to the floor.', [new QuestLineStepCompletedRequirement('Detective Pikachu', 12)], undefined, { + hideTrainer: true, + imageName: 'Office Worker (male)', +}); +TemporaryBattleList['Possessed Mewtwo'] = new TemporaryBattle('Possessed Mewtwo', [new GymPokemon('Mewtwo', 214456599, 100)], 'Howard\'s headset sparks and breaks. Mewtwo calms down, apparently free from Howard\'s influence. Mewtwo gives you a brief nod and flies off.', [new QuestLineStepCompletedRequirement('Detective Pikachu', 14)], undefined, { + hideTrainer: true, + imageName: 'specialNPCs/Possessed Mewtwo', +}); +TemporaryBattleList.Riot = new TemporaryBattle('Riot', [ + new GymPokemon('Ninjask', 136471274, 70), + new GymPokemon('Ninjask', 136471274, 70), + new GymPokemon('Greninja', 140718837, 70), +], 'Curse you! Diancie has escaped!', [new QuestLineStepCompletedRequirement('Princess Diancie', 0)]); +TemporaryBattleList.Merilyn = new TemporaryBattle('Merilyn', [ + new GymPokemon('Yanma', 207131881, 80), + new GymPokemon('Delphox', 212229898, 80), +], 'You ruined my shopping spree!', [new QuestLineStepCompletedRequirement('Princess Diancie', 1)]); +TemporaryBattleList['Millis and Argus Steel'] = new TemporaryBattle('Millis and Argus Steel', [ + new GymPokemon('Honedge', 107376526, 70), + new GymPokemon('Doublade', 110485698, 70), + new GymPokemon('Aegislash (Blade)', 110510597, 70), + new GymPokemon('Chesnaught', 111743528, 70), +], 'Our plans are ruined! Retreat!', [new QuestLineStepCompletedRequirement('Princess Diancie', 3)]); +TemporaryBattleList['Rampaging Yveltal'] = new TemporaryBattle('Rampaging Yveltal', [new GymPokemon('Yveltal', 446974112, 80)], 'Diancie fights alongside you, Mega Evolving to land the final blow! She hands you her Mega Stone after the fight.

    ', [new QuestLineStepCompletedRequirement('Princess Diancie', 8)], undefined, { + displayName: 'Rampaging Yveltal', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Diancite), + imageName: '../pokemon/717', + hideTrainer: true, + returnTown: 'Shalour City', +}); +TemporaryBattleList['Hoopa 1'] = new TemporaryBattle('Hoopa 1', [new GymPokemon('Lugia', 446974112, 80)], 'The Unbound Hoopa casts you through a ring to a faraway land, escaping for now.', [new QuestLineStepCompletedRequirement('Clash of Ages', 7)], undefined, { + displayName: 'Unbound Hoopa', + imageName: '../pokemon/720.01', + hideTrainer: true, + returnTown: 'Shalour City', +}); +TemporaryBattleList['Hoopa 2'] = new TemporaryBattle('Hoopa 2', [ + new GymPokemon('Rayquaza', 163890507, 80), + new GymPokemon('Latias', 163890507, 80), + new GymPokemon('Latios', 163890507, 80), +], 'The Unbound Hoopa casts you through a ring to a faraway land, escaping for now.', [new QuestLineStepCompletedRequirement('Clash of Ages', 8)], undefined, { + displayName: 'Unbound Hoopa', + imageName: '../pokemon/720.01', + hideTrainer: true, + returnTown: 'Lumiose City', +}); +TemporaryBattleList['Hoopa 3'] = new TemporaryBattle('Hoopa 3', [ + new GymPokemon('Primal Groudon', 107273786, 80), + new GymPokemon('Primal Kyogre', 107273786, 80), + new GymPokemon('Kyurem', 107273786, 80), + new GymPokemon('Dialga', 107273786, 80), + new GymPokemon('Palkia', 107273786, 80), +], 'The Unbound Hoopa casts you through a ring to a faraway land, escaping for now.', [new QuestLineStepCompletedRequirement('Clash of Ages', 9)], undefined, { + displayName: 'Unbound Hoopa', + imageName: '../pokemon/720.01', + hideTrainer: true, + returnTown: 'Anistar City', +}); +TemporaryBattleList['Hoopa 4'] = new TemporaryBattle('Hoopa 4', [ + new GymPokemon('Mega Rayquaza', 193688781, 80), + new GymPokemon('Mega Latias', 193688781, 80), + new GymPokemon('Mega Latios', 193688781, 80), +], 'The Unbound Hoopa casts you through a ring to a faraway land, escaping for now.', [new QuestLineStepCompletedRequirement('Clash of Ages', 10)], undefined, { + displayName: 'Unbound Hoopa', + imageName: '../pokemon/720.01', + hideTrainer: true, + returnTown: 'Laverre City', +}); +TemporaryBattleList['Hoopa 5'] = new TemporaryBattle('Hoopa 5', [ + new GymPokemon('Kyurem (Black)', 312881878, 80), + new GymPokemon('Kyurem (White)', 312881878, 80), +], 'The Unbound Hoopa casts you through a ring to a faraway land, escaping for now.', [new QuestLineStepCompletedRequirement('Clash of Ages', 11)], undefined, { + displayName: 'Unbound Hoopa', + imageName: '../pokemon/720.01', + hideTrainer: true, + returnTown: 'Vaniville Town', +}); +TemporaryBattleList['Hoopa 6'] = new TemporaryBattle('Hoopa 6', [new GymPokemon('Hoopa (Unbound)', 670461168, 80)], 'The Unbound Hoopa is sucked into the Prison Bottle, and you gain control of it.', [new QuestLineStepCompletedRequirement('Clash of Ages', 12)], undefined, { + displayName: 'Unbound Hoopa', + imageName: '../pokemon/720.01', + hideTrainer: true, + returnTown: 'Kiloude City', + firstTimeRewardFunction: () => { + App.game.party.gainPokemonByName('Hoopa (Unbound)'); + }, +}); +TemporaryBattleList['Calem 2'] = new TemporaryBattle('Calem 2', [ + new GymPokemon('Meowstic', 52417332, 31), + new GymPokemon('Absol', 52417332, 31), + new GymPokemon('Braixen', 54231360, 33, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Frogadier', 54231360, 33, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Quilladin', 54231360, 33, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), +], 'Oof. I\'d kind of forgotten how strong you are.', [new RouteKillRequirement(10, GameConstants.Region.kalos, 12)], undefined, { + displayName: 'Pokémon Trainer Calem', + returnTown: 'Coumarine City', + imageName: 'Calem', +}); +TemporaryBattleList['Calem 3'] = new TemporaryBattle('Calem 3', [ + new GymPokemon('Meowstic', 65491998, 35), + new GymPokemon('Absol', 65491998, 35), + new GymPokemon('Delphox', 67476604, 37, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Greninja', 67476604, 37, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Chesnaught', 67476604, 37, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), +], 'Battling with you is fun, but losing all the time doesn\'t really make me look all that good.', [new QuestLineStepCompletedRequirement('A Beautiful World', 13)], undefined, { + displayName: 'Pokémon Trainer Calem', + returnTown: 'Lumiose City', + imageName: 'Calem', +}); +TemporaryBattleList['Calem 4'] = new TemporaryBattle('Calem 4', [ + new GymPokemon('Meowstic', 60349527, 44), + new GymPokemon('Absol', 60349527, 44), + new GymPokemon('Jolteon', 61391150, 44, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Flareon', 61391150, 44, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Vaporeon', 61391150, 44, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), + new GymPokemon('Delphox', 63846796, 46, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Greninja', 63846796, 46, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Chesnaught', 63846796, 46, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), +], 'Why am I still playing catch-up to you?!', [new RouteKillRequirement(10, GameConstants.Region.kalos, 17)], undefined, { + displayName: 'Pokémon Trainer Calem', + returnTown: 'Anistar City', + imageName: 'Calem', +}); +TemporaryBattleList['Team Flare Lysandre 1'] = new TemporaryBattle('Team Flare Lysandre 1', [ + new GymPokemon('Mienfoo', 66360070, 45), + new GymPokemon('Murkrow', 66360070, 45), + new GymPokemon('Pyroar', 67714357, 47), + new GymPokemon('Gyarados', 69068644, 49), +], 'Excellent! I can feel the fire of your convictions burning deep within your heart! I tried to save people--and the world--with the profit from this lab. But my efforts had no effect... This world will eventually reach the point of no return... Saving the lives of all is impossible. Only the chosen ones will obtain a ticket to tomorrow. Do you want to have a ticket? Or, do you want to stop me? Show me in battle!', [new QuestLineStepCompletedRequirement('A Beautiful World', 20)], undefined, { + displayName: 'Team Flare Lysandre', + imageName: 'Team Flare Lysandre', +}); +TemporaryBattleList['Team Flare Xerosic'] = new TemporaryBattle('Team Flare Xerosic', [ + new GymPokemon('Crobat', 128657279, 46), + new GymPokemon('Malamar', 131365853, 48), +], 'Oh ho ho! You\'re wonderful! Your Pokémon are amazing.', [new QuestLineStepCompletedRequirement('A Beautiful World', 22)], undefined, { + displayName: 'Team Flare Xerosic', + imageName: 'Team Flare Xerosic', +}); +TemporaryBattleList.Xerneas = new TemporaryBattle('Xerneas', [new GymPokemon('Xerneas', 281500000, 50)], 'You calmed down Xerneas and it ran away to the back of the lab.', [new QuestLineStepCompletedRequirement('A Beautiful World', 30)], undefined, { + displayName: 'Xerneas', + imageName: '../pokemon/716', + hideTrainer: true, +}); +TemporaryBattleList.Yveltal = new TemporaryBattle('Yveltal', [new GymPokemon('Yveltal', 281500000, 50)], 'You calmed down Yveltal and it ran away to the back of the lab.', [new QuestLineStepCompletedRequirement('A Beautiful World', 30)], undefined, { + displayName: 'Yveltal', + imageName: '../pokemon/717', + hideTrainer: true, +}); +TemporaryBattleList['Team Flare Boss Lysandre 1'] = new TemporaryBattle('Team Flare Boss Lysandre 1', [ + new GymPokemon('Mienshao', 68927443, 49), + new GymPokemon('Honchkrow', 68927443, 49), + new GymPokemon('Pyroar', 70334126, 51), + new GymPokemon('Mega Gyarados', 71740808, 53), +], 'It\'s over... Fools with no vision will continue to befoul this beautiful world. They will go on until the only thing left to do is squabble over the remaining scraps of hope...', [new QuestLineStepCompletedRequirement('A Beautiful World', 32)], undefined, { + displayName: 'Team Flare Boss Lysandre', + imageName: 'Team Flare Boss Lysandre', +}); +TemporaryBattleList['Sycamore 2'] = new TemporaryBattle('Sycamore 2', [ + new GymPokemon('Venusaur', 88799088, 50), + new GymPokemon('Charizard', 88799088, 50), + new GymPokemon('Blastoise', 88799088, 50), +], 'You are really something! You and your Pokémon have developed strong bonds by spending time together and by caring about one another. That\'s why you and your Pokémon are so strong.', [new RouteKillRequirement(10, GameConstants.Region.kalos, 18)], undefined, { + displayName: 'Pokémon Professor Sycamore', + imageName: 'Sycamore', +}); +TemporaryBattleList['Shauna 2'] = new TemporaryBattle('Shauna 2', [ + new GymPokemon('Delcatty', 91718405, 49), + new GymPokemon('Goodra', 91718405, 49), + new GymPokemon('Greninja', 94497751, 51, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Chesnaught', 94497751, 51, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Delphox', 94497751, 51, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), +], 'Battles with friends are really, really exciting!', [new RouteKillRequirement(10, GameConstants.Region.kalos, 19)], undefined, { + displayName: 'Pokémon Trainer Shauna', + returnTown: 'Couriway Town', + imageName: 'Shauna', +}); +TemporaryBattleList['Tierno 2'] = new TemporaryBattle('Tierno 2', [ + new GymPokemon('Talonflame', 91601632, 48), + new GymPokemon('Roserade', 91718405, 49), + new GymPokemon('Crawdaunt', 94618062, 52), +], 'It\'s weird, but… I don\'t get that down when I lose to you.', [new TemporaryBattleRequirement('Shauna 2')], undefined, { + displayName: 'Pokémon Trainer Tierno', + returnTown: 'Couriway Town', + imageName: 'Tierno', +}); +TemporaryBattleList.Trevor = new TemporaryBattle('Trevor', [ + new GymPokemon('Raichu', 91718405, 49), + new GymPokemon('Aerodactyl', 91718405, 49), + new GymPokemon('Florges (Orange)', 94858684, 51), +], 'There is still so much I don\'t know. Do I just not have what it takes?', [new TemporaryBattleRequirement('Tierno 2')], undefined, { + displayName: 'Pokémon Trainer Trevor', + returnTown: 'Couriway Town', +}); +TemporaryBattleList['Calem 5'] = new TemporaryBattle('Calem 5', [ + new GymPokemon('Meowstic', 67294391, 57), + new GymPokemon('Jolteon', 67294391, 57, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Flareon', 67294391, 57, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Vaporeon', 67294391, 57, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), + new GymPokemon('Altaria', 67294391, 58), + new GymPokemon('Absol', 71149798, 59), + new GymPokemon('Delphox', 76407173, 61, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Greninja', 76407173, 61, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Chesnaught', 76407173, 61, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), +], 'I\'m still no match for you... You know, it\'s because I met you that I was able to get this far... But our journey\'s just getting started. Who knows what heights we\'ll reach!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Victory Road Kalos'))], undefined, { + displayName: 'Pokémon Trainer Calem', + returnTown: 'Victory Road Kalos', + imageName: 'Calem', +}); +TemporaryBattleList['Storyline AZ'] = new TemporaryBattle('Storyline AZ', [ + new GymPokemon('Torkoal', 153757520, 60), + new GymPokemon('Golurk', 153757520, 60), + new GymPokemon('Sigilyph', 153757520, 60), +], 'Thank you very much for battling with me. Now I finally feel free…', [new QuestLineStepCompletedRequirement('A Beautiful World', 34)], undefined, { + displayName: 'Pokémon Trainer AZ', + imageName: 'AZ', +}); +TemporaryBattleList.AZ = new TemporaryBattle('AZ', [ + new GymPokemon('Torkoal', 161445396, 80), + new GymPokemon('Golurk', 161445396, 80), + new GymPokemon('Sigilyph', 161445396, 80), +], 'Floette... It\'s been 3,000 years...', [new QuestLineCompletedRequirement('A Beautiful World')], undefined, { + displayName: 'Pokémon Trainer AZ', + firstTimeRewardFunction: () => { + App.game.party.gainPokemonByName('Floette (Eternal)'); + }, +}); +TemporaryBattleList['Ash Ketchum Kanto'] = new TemporaryBattle('Ash Ketchum Kanto', [ + new GymPokemon('Pikachu (Partner Cap)', 123551, 58), + new GymPokemon('Pidgeot', 122352, 56), + new GymPokemon('Muk', 122352, 56), + new GymPokemon('Bulbasaur', 122352, 60), + new GymPokemon('Squirtle', 122352, 60), + new GymPokemon('Charizard', 124751, 62), +], 'That was a fun battle!', [new GymBadgeRequirement(BadgeEnums.Elite_KantoChampion)], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Pallet Town', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Ash Ketchum Johto'] = new TemporaryBattle('Ash Ketchum Johto', [ + new GymPokemon('Pikachu (Partner Cap)', 544557, 58), + new GymPokemon('Heracross', 540067, 56), + new GymPokemon('Noctowl', 540067, 56, undefined, true), + new GymPokemon('Bayleef', 540067, 60), + new GymPokemon('Cyndaquil', 540067, 62), + new GymPokemon('Totodile', 540067, 62), +], 'Don\'t I know you from somewhere?', [new TemporaryBattleRequirement('Ash Ketchum Kanto'), new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion), new RouteKillRequirement(10, GameConstants.Region.johto, 48)], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Cianwood City', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Ash Ketchum Hoenn'] = new TemporaryBattle('Ash Ketchum Hoenn', [ + new GymPokemon('Pikachu (Partner Cap)', 2426336, 58), + new GymPokemon('Swellow', 2402780, 56), + new GymPokemon('Torkoal', 2402780, 56), + new GymPokemon('Glalie', 2402780, 60), + new GymPokemon('Corphish', 2402780, 62), + new GymPokemon('Grovyle', 2449893, 62), +], 'That was a nice rematch. You sure are a strong Pokémon trainer! I\'ll beat you next time!', [new TemporaryBattleRequirement('Ash Ketchum Johto'), new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion)], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Lilycove City', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Ash Ketchum Sinnoh'] = new TemporaryBattle('Ash Ketchum Sinnoh', [ + new GymPokemon('Pikachu (Partner Cap)', 7170362, 58), + new GymPokemon('Staraptor', 7100747, 56), + new GymPokemon('Gible', 7100747, 60), + new GymPokemon('Torterra', 7100747, 56), + new GymPokemon('Buizel', 7100747, 62), + new GymPokemon('Infernape', 7239977, 62), +], 'Wow, these battles are intense. It\'s getting hard to keep up with you... I think I need a break.', [new TemporaryBattleRequirement('Ash Ketchum Hoenn'), new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion), new RouteKillRequirement(10, GameConstants.Region.sinnoh, 226)], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Survival Area', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Ash Ketchum Unova'] = new TemporaryBattle('Ash Ketchum Unova', [ + new GymPokemon('Pikachu (Partner Cap)', 26397028, 58), + new GymPokemon('Unfezant', 26140747, 56), + new GymPokemon('Snivy', 26140747, 62), + new GymPokemon('Pignite', 26140747, 60), + new GymPokemon('Oshawott', 26140747, 56), + new GymPokemon('Krookodile', 26653310, 62), +], 'Hey, what gives? I was just trying to relax here!', [new TemporaryBattleRequirement('Ash Ketchum Sinnoh'), new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion)], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Mistralton City', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Ash Ketchum Kalos'] = new TemporaryBattle('Ash Ketchum Kalos', [ + new GymPokemon('Pikachu (Partner Cap)', 85803654, 58), + new GymPokemon('Talonflame', 84970609, 56), + new GymPokemon('Hawlucha', 84970609, 56), + new GymPokemon('Goodra', 84970609, 60), + new GymPokemon('Noivern', 84970609, 62), + new GymPokemon('Ash-Greninja', 86636699, 62), +], 'I forgive you for chasing me around. I\'m going to take some time off with a long vacation on a tropical island! Before I go, though, I\'m gonna release Greninja. I think it\'s best for him to have experiences with other trainers. If you want to see if that could be you, he\'ll be roaming the region.', [new TemporaryBattleRequirement('Ash Ketchum Unova'), new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion)], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Kiloude City', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Ash Ketchum Pinkan'] = new TemporaryBattle('Ash Ketchum Pinkan', [ + new GymPokemon('Pinkan Pikachu', 1930220, 58), + new GymPokemon('Snorlax', 1911480, 56), + new GymPokemon('Lapras', 1911480, 56), + new GymPokemon('Kingler', 1911480, 60), + new GymPokemon('Tauros', 1911480, 62), + new GymPokemon('Charizard', 1948960, 62), +], 'Hey, you found me on my vacation! Did you see my Pikachu? Looks like it ate some of the berries here. Maybe you can find some other Pikachu like it hiding around here?', [new TemporaryBattleRequirement('Ash Ketchum Hoenn'), new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Pinkan Mountain'))], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Pinkan Mountain', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Calem 6'] = new TemporaryBattle('Calem 6', [ + new GymPokemon('Meowstic', 94468205, 66), + new GymPokemon('Clefable', 94468205, 68), + new GymPokemon('Jolteon', 99137044, 66, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Flareon', 99137044, 66, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Vaporeon', 99137044, 66, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), + new GymPokemon('Altaria', 94468205, 67), + new GymPokemon('Delphox', 105685546, 70, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Grass)), + new GymPokemon('Greninja', 105685546, 70, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Fire)), + new GymPokemon('Chesnaught', 105685546, 70, new StarterRequirement(GameConstants.Region.kalos, GameConstants.Starter.Water)), + new GymPokemon('Mega Absol', 118054939, 68), +], 'Here, this is for you!

    That\'s right. It\'s Absolite. I found two of them. After everything we said to Lysandre, it just wouldn\'t be right if I didn\'t share one with you.', [new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion), new ObtainedPokemonRequirement('Absol')], [new NullRequirement], { + displayName: 'Pokémon Trainer Calem', + imageName: 'Calem', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Absolite), + rewardFunction: () => Notifier.notify({ message: 'Congratulations on beating Calem at his best! Come back to fight him again at any time.' }), +}); +TemporaryBattleList.Twerps = new TemporaryBattle('Twerps', [ + new GymPokemon('Meowth', 40271251, 49), + new GymPokemon('Pumpkaboo (Super Size)', 40271251, 49), + new GymPokemon('Inkay (Pikachu)', 40271251, 51), +], 'What do you mean "how is Pikachu floating?", all Pikachu can float! Because, uh... electromagnetism!', [new RouteKillRequirement(10, GameConstants.Region.kalos, 10)], undefined, { + displayName: 'Twerps?', +}); +TemporaryBattleList['Marquis Grant'] = new TemporaryBattle('Marquis Grant', [ + new GymPokemon('Aurorus', 110668215, 80), + new GymPokemon('Tyrantrum', 110668215, 80), + new GymPokemon('Mega Tyranitar', 125000000, 80), + new GymPokemon('Mega Aggron', 125000000, 80), +], 'To commemorate such an impressive show of teamwork, please accept these gifts!



    ', [new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion), new ClearGymRequirement(2000, GameConstants.getGymIndex('Cyllage City')), new ObtainedPokemonRequirement('Tyranitar'), new ObtainedPokemonRequirement('Aggron')], undefined, { + displayName: 'Marquis Grant', + imageName: 'Grant', + firstTimeRewardFunction: () => [player.gainMegaStone(GameConstants.MegaStoneType.Tyranitarite), player.gainMegaStone(GameConstants.MegaStoneType.Aggronite)], +}); +TemporaryBattleList['Grand Duchess Diantha'] = new TemporaryBattle('Grand Duchess Diantha', [ + new GymPokemon('Hawlucha', 110668215, 80), + new GymPokemon('Gourgeist (Average)', 115668215, 80), + new GymPokemon('Goodra', 120770015, 80), + new GymPokemon('Mega Gardevoir', 125000000, 80), +], 'Witnessing the noble spirits of you and your Pokémon in battle has really touched my heart... Please, take this Gardevoirite.

    I just... I just don\'t know what to say... I can hardly express this feeling...', [new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion), new ObtainedPokemonRequirement('Gardevoir')], undefined, { + displayName: 'Grand Duchess Diantha', + imageName: 'Diantha', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Gardevoirite), +}); +TemporaryBattleList['Team Flare Boss Lysandre 2'] = new TemporaryBattle('Team Flare Boss Lysandre 2', [ + new GymPokemon('Mienshao', 127138249, 79), + new GymPokemon('Honchkrow', 127138249, 79), + new GymPokemon('Pyroar', 124595484, 81), + new GymPokemon('Mega Gyarados', 129681014, 83), +], 'I see the strength to protect within you... Hopefully you can do a better job than me and protect a tomorrow that will be better than today. Take this Gyaradosite.

    ', [new QuestLineStepCompletedRequirement('A Beautiful World', 35), new ObtainedPokemonRequirement('Gyarados'), new DayCyclePartRequirement([DayCyclePart.Dusk])], undefined, { + displayName: 'Team Flare Boss Lysandre', + imageName: 'Team Flare Boss Lysandre', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Gyaradosite), +}); +TemporaryBattleList['Hex Maniac Aster'] = new TemporaryBattle('Hex Maniac Aster', [ + new GymPokemon('Gastly', 40250000, 25), + new GymPokemon('Haunter', 60770015, 30), + new GymPokemon('Haunter', 60770015, 30), + new GymPokemon('Medicham', 60770015, 30), +], 'What’s this?! I see... Perhaps a Trainer as accomplished as you can get the most out of this.

    ', [ + new StatisticRequirement(['pokemonEncountered', PokemonHelper.getPokemonByName('Gastly').id], 666, 'Encounter at least 666 wild Gastly.'), + new StatisticRequirement(['pokemonEncountered', PokemonHelper.getPokemonByName('Haunter').id], 444, 'Encounter at least 444 wild Haunter.'), + new StatisticRequirement(['pokemonEncountered', PokemonHelper.getPokemonByName('Gengar').id], 13, 'Encounter at least 13 wild Gengar.'), + new ObtainedPokemonRequirement('Gengar'), +], undefined, { + displayName: 'Hex Maniac Aster', + imageName: 'Hex Maniac', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Gengarite), +}); +TemporaryBattleList['Wild Houndour Horde'] = new TemporaryBattle('Wild Houndour Horde', [ + new GymPokemon('Houndour', 60000000, 40), + new GymPokemon('Houndour', 60000000, 40), + new GymPokemon('Houndour', 60000000, 40), + new GymPokemon('Houndour', 60000000, 40), + new GymPokemon('Houndour', 60000000, 40), + new GymPokemon('Mega Houndoom', 120000000, 60), +], 'With the leader of the pack defeated, the Houndour horde scatters, their fiery fury reduced to ashes. In the gleaming sunlight, you catch sight of a small gem left behind by their leader...

    You obtained the Houndoominite!', [ + new ObtainedPokemonRequirement('Houndoom'), + new WeatherRequirement([WeatherType.Harsh_Sunlight]), + new StatisticRequirement(['pokemonCaptured', PokemonHelper.getPokemonByName('Houndour').id], 500, 'Capture a total of 500 or more Houndour.'), + new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion), +], undefined, { + displayName: 'Wild Houndour Horde', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Houndoominite), + imageName: '../pokemon/229.01', + hideTrainer: true, + returnTown: 'Dendemille Town', +}); +TemporaryBattleList['Wild Electrike Horde'] = new TemporaryBattle('Wild Electrike Horde', [ + new GymPokemon('Electrike', 60000000, 40), + new GymPokemon('Electrike', 60000000, 40), + new GymPokemon('Electrike', 60000000, 40), + new GymPokemon('Electrike', 60000000, 40), + new GymPokemon('Electrike', 60000000, 40), + new GymPokemon('Mega Manectric', 120000000, 60), +], 'With the leader of the pack defeated, the Electrike horde scatters, their thunderous rage utterly depleted. In a thunderbolt\'s flash, you catch sight of a small gem left behind by their leader...

    You obtained the Manectite!', [ + new ObtainedPokemonRequirement('Manectric'), + new WeatherRequirement([WeatherType.Thunderstorm]), + new StatisticRequirement(['pokemonCaptured', PokemonHelper.getPokemonByName('Electrike').id], 500, 'Capture a total of 500 or more Electrike.'), + new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion), +], undefined, { + displayName: 'Wild Electrike Horde', + firstTimeRewardFunction: () => player.gainMegaStone(GameConstants.MegaStoneType.Manectite), + imageName: '../pokemon/310.01', + hideTrainer: true, + returnTown: 'Dendemille Town', +}); +TemporaryBattleList['Unrivaled Red'] = new TemporaryBattle('Unrivaled Red', [ + new GymPokemon('Pikachu', 82741389, 85), + new GymPokemon('Machamp', 82239926, 85), + new GymPokemon('Arcanine', 82239926, 85), + new GymPokemon('Lapras', 82239926, 85), + new GymPokemon('Snorlax', 82239926, 85), + new GymPokemon('Mega Venusaur', 90263333, 85), +], '... ... ...!', [new QuestLineStartedRequirement('An Unrivaled Power')], undefined, { + displayName: 'Pokémon Trainer Red', + imageName: 'Red', +}); +TemporaryBattleList['Unrivaled Blue'] = new TemporaryBattle('Unrivaled Blue', [ + new GymPokemon('Tauros', 82390364, 66), + new GymPokemon('Alakazam', 82390364, 66), + new GymPokemon('Gyarados', 82390364, 66), + new GymPokemon('Exeggutor', 82390364, 66), + new GymPokemon('Aerodactyl', 82390364, 66), + new GymPokemon('Mega Charizard Y', 90363626, 68), +], 'Aw man, what was I doing?', [new QuestLineStepCompletedRequirement('An Unrivaled Power', 1)], undefined, { + displayName: 'Gym Leader Blue', + imageName: 'Blue-lgpe', +}); +TemporaryBattleList['Unrivaled Green'] = new TemporaryBattle('Unrivaled Green', [ + new GymPokemon('Clefable', 82490657, 66), + new GymPokemon('Gengar', 82490657, 66), + new GymPokemon('Victreebel', 82490657, 66), + new GymPokemon('Ninetales', 82490657, 66), + new GymPokemon('Kangaskhan', 82490657, 66), + new GymPokemon('Mega Blastoise', 90514065, 68), +], 'Come on! What\'s with that...?', [new QuestLineStepCompletedRequirement('An Unrivaled Power', 5)], undefined, { + displayName: 'Pokémon Trainer Green', + imageName: 'Green', +}); +TemporaryBattleList['Anomaly Mewtwo 1'] = new TemporaryBattle('Anomaly Mewtwo 1', [new GymPokemon('Mega Mewtwo X', 500000000, 70)], 'I see. You are indeed strong. But I do not wish to talk to you. As I already told you, do not continue to follow me.', [new QuestLineStepCompletedRequirement('An Unrivaled Power', 8)], undefined, { + displayName: 'Anomaly Mewtwo', + imageName: '../pokemon/150.01', + hideTrainer: true, +}); +TemporaryBattleList['Anomaly Mewtwo 2'] = new TemporaryBattle('Anomaly Mewtwo 2', [new GymPokemon('Mega Mewtwo X', 510000000, 70)], 'Do you not comprehend human speech?! Fine then, if you will not leave me alone, then I will not let you catch up to me!', [new QuestLineStepCompletedRequirement('An Unrivaled Power', 9)], undefined, { + displayName: 'Anomaly Mewtwo', + imageName: '../pokemon/150.01', + hideTrainer: true, +}); +TemporaryBattleList['Anomaly Mewtwo 3'] = new TemporaryBattle('Anomaly Mewtwo 3', [new GymPokemon('Mega Mewtwo Y', 520000000, 70)], 'Damn it! How could you possibly pursue me so quickly!', [new QuestLineStepCompletedRequirement('An Unrivaled Power', 10)], undefined, { + displayName: 'Anomaly Mewtwo', + imageName: '../pokemon/150.02', + hideTrainer: true, +}); +TemporaryBattleList['Anomaly Mewtwo 4'] = new TemporaryBattle('Anomaly Mewtwo 4', [new GymPokemon('Mega Mewtwo Y', 530000000, 70)], 'WHAT DO YOU WANT WITH ME, HUMAN?!', [new QuestLineStepCompletedRequirement('An Unrivaled Power', 11)], undefined, { + displayName: 'Anomaly Mewtwo', + imageName: '../pokemon/150.02', + hideTrainer: true, +}); +TemporaryBattleList['Anomaly Mewtwo 5'] = new TemporaryBattle('Anomaly Mewtwo 5', [new GymPokemon('Mega Mewtwo Y', 540000000, 70)], 'GAARGH!!! ......... What? ......... You say you truly just want to help me? You are irritatingly persistant. Fine then. You say you know of a place where I can live undisturbed? Take me there.', [new QuestLineStepCompletedRequirement('An Unrivaled Power', 12)], undefined, { + displayName: 'Anomaly Mewtwo', + imageName: '../pokemon/150.02', + hideTrainer: true, +}); +//Alola Temporary Battles +TemporaryBattleList['Hau 1'] = new TemporaryBattle('Hau 1', [ + new GymPokemon('Popplio', 71131094, 5, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Rowlet', 71131094, 5, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Litten', 71131094, 5, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), +], 'Whoa! That was awesome! You and your Pokémon were both so cool!
    Oh yeah! I\'m Hau! You should totally check out Iki Town! We\'re holding a festival soon!', [new RouteKillRequirement(10, GameConstants.Region.alola, 1)], undefined, { + firstTimeRewardFunction: () => { + App.game.quests.getQuestLine('Welcome to Paradise, Cousin!').beginQuest(0, undefined, true); + }, + displayName: 'Pokémon Trainer Hau', + returnTown: 'Iki Town Outskirts', + imageName: 'Rival Hau', +}); +TemporaryBattleList['Melemele Spearow'] = new TemporaryBattle('Melemele Spearow', [new GymPokemon('Spearow', 117328860, 4)], undefined, [new QuestLineStartedRequirement('Welcome to Paradise, Cousin!')], undefined, { + displayName: 'Agitated Spearow', + imageName: '../pokemon/789', +}); +TemporaryBattleList['Hau 2'] = new TemporaryBattle('Hau 2', [ + new GymPokemon('Pichu', 75473838, 6), + new GymPokemon('Popplio', 81763320, 7, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Rowlet', 81763320, 7, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Litten', 81763320, 7, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), +], 'Phew... That was awesome! That was a really great battle! I had a blast fighting you!', [new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 1)], undefined, { + displayName: 'Pokémon Trainer Hau', + returnTown: 'Iki Town', + imageName: 'Rival Hau', + /* Uncomment once Z-Moves are ready + firstTimeRewardFunction: () => { + App.game.keyItems.gainKeyItem(KeyItemType['Z-Power_Ring'], true); + },*/ +}); +TemporaryBattleList['Skull 1'] = new TemporaryBattle('Skull 1', [new GymPokemon('Zubat', 193227888, 9)], undefined, // custom quest message +[new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 2)], undefined, { + displayName: 'Team Skull Grunts A and B', + returnTown: 'Hau\'oli City', + imageName: 'Team Skull Grunts (male)', +}); +TemporaryBattleList.Ilima = new TemporaryBattle('Ilima', [ + new GymPokemon('Yungoos', 99760695, 10), + new GymPokemon('Smeargle', 184903445, 11), +], 'You- or should I say you and your Pokémon- make quite the interesting team! I do hope you\'ll come to Verdant Cavern and attempt my trial!', [new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 3)], undefined, { + displayName: 'Captain Ilima', + returnTown: 'Hau\'oli City', +}); +TemporaryBattleList['Skull 2'] = new TemporaryBattle('Skull 2', [new GymPokemon('Drowzee', 325654668, 10)], 'Seriously, home slice?! You\'re too strong for a kid, yo! I\'ve gotta go make someone else miserable to feel better! We\'re gonna go mess with Verdant Cavern!', [new MultiRequirement([new TemporaryBattleRequirement('Ilima'), new RouteKillRequirement(10, GameConstants.Region.alola, 2)])], undefined, { + displayName: 'Team Skull Grunts A and B', + returnTown: 'Hau\'oli City', + imageName: 'Team Skull Grunts (male)', +}); +TemporaryBattleList['Recon Squad 1'] = new TemporaryBattle('Recon Squad 1', [new GymPokemon('Furfrou', 334332002, 13)], undefined, // custom quest message +[new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 7)], undefined, { + displayName: 'Ultra Recon Squad', + imageName: 'specialNPCs/Ultra Recon Squad (ultra moon)', +}); +TemporaryBattleList['Hau 3'] = new TemporaryBattle('Hau 3', [ + new GymPokemon('Popplio', 111444000, 13, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Rowlet', 111444000, 13, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Litten', 111444000, 13, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), + new GymPokemon('Noibat', 104983480, 11), + new GymPokemon('Pikachu', 104983480, 12), +], 'Aww, man! I wanted to show off my Pokémon\'s best side more!', [new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 9)], undefined, { + displayName: 'Pokémon Trainer Hau', + returnTown: 'Melemele Meadow', + imageName: 'Rival Hau', +}); +TemporaryBattleList.Dexio = new TemporaryBattle('Dexio', [ + new GymPokemon('Mime Jr.', 184013368, 15), + new GymPokemon('Espeon', 195395639, 15), +], 'That\'s what I would expect from a Trainer doing the island challenge. I felt the bond between you and your Pokémon!', [new GymBadgeRequirement(BadgeEnums.Melemele_Stamp)], undefined, { + // Starts Akala story quest if both Sina and Dexio are defeated. + firstTimeRewardFunction: () => { + if (App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Sina')]() >= 1) { + App.game.quests.getQuestLine('Symbiotic Relations').beginQuest(0, undefined, true); + // TODO: zygarde quest thing + } + }, + displayName: 'Pokémon Trainer Dexio', +}); +TemporaryBattleList.Sina = new TemporaryBattle('Sina', [ + new GymPokemon('Smoochum', 184013368, 15), + new GymPokemon('Glaceon', 195395639, 15), +], 'I get it... Facing trials helps you grow close to your team. I think that\'s absolutely wonderful!', [new GymBadgeRequirement(BadgeEnums.Melemele_Stamp)], undefined, { + // Starts Akala story quest if both Sina and Dexio are defeated. + firstTimeRewardFunction: () => { + if (App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex('Dexio')]() >= 1) { + App.game.quests.getQuestLine('Symbiotic Relations').beginQuest(0, undefined, true); + // TODO: zygarde quest thing + } + }, + displayName: 'Pokémon Trainer Sina', +}); +TemporaryBattleList['Hau 4'] = new TemporaryBattle('Hau 4', [ + new GymPokemon('Brionne', 99628133, 16, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Dartrix', 99628133, 16, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Torracat', 99628133, 16, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), + new GymPokemon('Pikachu', 95796282, 15), + new GymPokemon('Noibat', 93880356, 14), + new GymPokemon('Eevee', 93880356, 14), +], 'Nice! How\'d you come up with that kind of battle plan? You gotta tell me!', [new RouteKillRequirement(10, GameConstants.Region.alola, 4)], undefined, { + displayName: 'Pokémon Trainer Hau', + returnTown: 'Paniola Town', + imageName: 'Rival Hau', +}); +TemporaryBattleList['Gladion 1'] = new TemporaryBattle('Gladion 1', [ + new GymPokemon('Zorua', 127447988, 17), + new GymPokemon('Zubat', 127447988, 17), + new GymPokemon('Type: Null', 135172109, 18), +], 'Hmph... It\'s not like me to slip up like that. I\'ve got to keep fighting stronger opponents. Looks like I\'m still not ready...', [new RouteKillRequirement(10, GameConstants.Region.alola, 5)], undefined, { + displayName: 'Team Skull Gladion', + returnTown: 'Paniola Town', + imageName: 'Gladion', +}); +TemporaryBattleList['Recon Squad 2'] = new TemporaryBattle('Recon Squad 2', [new GymPokemon('Sudowoodo', 412520122, 20)], undefined, // custom quest message +[new QuestLineStepCompletedRequirement('Symbiotic Relations', 1)], undefined, { + isTrainerBattle: false, + displayName: 'Ultra Recon Squad', + returnTown: 'Paniola Town', + imageName: 'specialNPCs/Ultra Recon Squad (ultra sun)', + visibleRequirement: new TemporaryBattleRequirement('Gladion 1'), +}); +TemporaryBattleList['Skull 3'] = new TemporaryBattle('Skull 3', [new GymPokemon('Drowzee', 421944535, 17)], undefined, // custom quest message +[ + new RouteKillRequirement(10, GameConstants.Region.alola, 6), + new QuestLineStepCompletedRequirement('Symbiotic Relations', 2), +], undefined, { + displayName: 'Team Skull Grunts', + returnTown: 'Heahea City', + imageName: 'Team Skull Grunts (male)', +}); +TemporaryBattleList['Battle Royal'] = new TemporaryBattle('Battle Royal', [ + new GymPokemon('Type: Null', 143802105, 20), + new GymPokemon('Rockruff', 143802105, 20), + new GymPokemon('Brionne', 143802105, 20, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Dartrix', 143802105, 20, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Torracat', 143802105, 20, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), +], 'The battle is over!', [new RouteKillRequirement(10, GameConstants.Region.alola, 6)], undefined, { imageName: 'specialNPCs/Battle Royal' }); +TemporaryBattleList['Plumeria 1'] = new TemporaryBattle('Plumeria 1', [ + new GymPokemon('Golbat', 213829395, 26), + new GymPokemon('Salandit', 227055956, 27), +], 'Hmmph! You\'re pretty strong. I\'ll give you that. But mess with anyone in Team Skull again, and I\'ll show you how serious I can get.', [new RouteKillRequirement(10, GameConstants.Region.alola, 21)], undefined, { + displayName: 'Team Skull Admin Plumeria', + returnTown: 'Memorial Hill', + imageName: 'Plumeria', +}); +TemporaryBattleList['Ultra Wormhole'] = new TemporaryBattle('Ultra Wormhole', [new GymPokemon('???', 508485861, 27)], undefined, // custom quest message +[new QuestLineStepCompletedRequirement('Symbiotic Relations', 8)], [new QuestLineCompletedRequirement('Symbiotic Relations')], // to work better with 10.20 story quests if already beaten +{ imageName: 'specialNPCs/Wormhole' }); +TemporaryBattleList['Hau 5'] = new TemporaryBattle('Hau 5', [ + new GymPokemon('Brionne', 101997102, 30, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Dartrix', 101997102, 30, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Torracat', 101997102, 30, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), + new GymPokemon('Flareon', 92508999, 28, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Vaporeon', 92508999, 28, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Leafeon', 92508999, 28, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), + new GymPokemon('Noibat', 90136973, 28), + new GymPokemon('Tauros', 90136973, 28), + new GymPokemon('Alolan Raichu', 96541443, 29), +], 'Bwah!! I had my breath held that whole battle!', [new TemporaryBattleRequirement('Ultra Wormhole')], undefined, { + firstTimeRewardFunction: () => { + App.game.quests.getQuestLine('Child of the Stars').beginQuest(0, undefined, true); + }, + displayName: 'Pokémon Trainer Hau', + returnTown: 'Malie City', + imageName: 'Rival Hau', +}); +TemporaryBattleList['Skull 4'] = new TemporaryBattle('Skull 4', [ + new GymPokemon('Houndour', 161175513, 28), + new GymPokemon('Golbat', 161175513, 28), + new GymPokemon('Alolan Raticate', 172626132, 29), +], 'Yo, think about the bus drivers! If we take this bus stop, they can all chill!', [ + new RouteKillRequirement(10, GameConstants.Region.alola, 10), + new QuestLineStepCompletedRequirement('Child of the Stars', 0), +], undefined, { + displayName: 'Team Skull Grunts', + returnTown: 'Malie City', + imageName: 'Team Skull Grunts (male)', +}); +TemporaryBattleList.Molayne = new TemporaryBattle('Molayne', [ + new GymPokemon('Skarmory', 170174638, 29), + new GymPokemon('Metang', 170174638, 29), + new GymPokemon('Alolan Dugtrio', 175257094, 30), +], 'Here\'s a little something to remember our meeting by! I gathered these Z-Crystals when I was on my own island challenge back in my own day. Take it, and use it well.

    ', [new QuestLineStepCompletedRequirement('Child of the Stars', 2)], undefined, { + firstTimeRewardFunction: QuestLineHelper.zCrystalGet(PokemonType.Steel), +}); +TemporaryBattleList['Skull 5'] = new TemporaryBattle('Skull 5', [new GymPokemon('Drowzee', 533664170, 33)], undefined, // custom quest message +[new QuestLineStepCompletedRequirement('Child of the Stars', 3)], undefined, { + displayName: 'Team Skull Grunt', + returnTown: 'Aether House', + imageName: 'Team Skull Grunt (male)', +}); +TemporaryBattleList['Psychium Z Trial'] = new TemporaryBattle('Psychium Z Trial', [ + // same HP as route mons + new GymPokemon('Krokorok', 7829809, 32), + new GymPokemon('Gabite', 7940429, 32), + new GymPokemon('Trapinch', 7622397, 32), + new GymPokemon('Alolan Dugtrio', 7484122, 32), + new GymPokemon('Trapinch', 7622397, 32), +], 'Lucky you! There was a Z-Crystal hidden here all along! You obtained a Psychium Z!

    ', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Thrifty Megamart')), new RouteKillRequirement(10, GameConstants.Region.alola, 23)], undefined, { + firstTimeRewardFunction: QuestLineHelper.zCrystalGet(PokemonType.Psychic), + displayName: 'Trial Site of Haina Desert', + returnTown: 'Tapu Village', + isTrainerBattle: false, + imageName: 'Trial Site', +}); +TemporaryBattleList['Plumeria 2'] = new TemporaryBattle('Plumeria 2', [ + new GymPokemon('Golbat', 255005022, 37), + new GymPokemon('Salazzle', 270778528, 38), +], 'Hmmph. Guess you are pretty tough. Now I understand why my Grunts waste so much time battling kids. But if you want us to return the Pokémon, then you\'ll have to come to us. Alone. The boss is dying to meet you, hmmph! See you at our base in Po Town!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Thrifty Megamart'))], undefined, { + displayName: 'Team Skull Admin Plumeria', + returnTown: 'Aether House', + imageName: 'Plumeria', +}); +TemporaryBattleList['Gladion 2'] = new TemporaryBattle('Gladion 2', [ + new GymPokemon('Golbat', 179161733, 42), + new GymPokemon('Zoroark', 179161733, 42), + new GymPokemon('Type: Null', 190020020, 43), +], 'That was wrong of me... I shouldn\'t have dragged you into a meaningless battle like that...
    But that Cosmog will bring disaster to all of Alola! I have to get it back from them! You\'re coming with me whether you like it or not. Get on the boat.', [new QuestLineStepCompletedRequirement('Child of the Stars', 6)], undefined, { + displayName: 'Team Skull Gladion', + returnTown: 'Aether House', + imageName: 'Gladion (stance)', +}); +TemporaryBattleList['Exeggutor Tree'] = new TemporaryBattle('Exeggutor Tree', [new GymPokemon('Alolan Exeggutor', 1100000, 40)], // same HP as dungeon mons +'Phew... That was an Exeggutor, wasn\'t it? This island is full of them! I think that they should all clear out once we get past them.', [new QuestLineStepCompletedRequirement('Emissary of Light', 2, GameConstants.AchievementOption.less)], undefined, { + displayName: 'A Tree?', + isTrainerBattle: false, + imageName: 'Lillie (z powered)', +}); +TemporaryBattleList['Skull 6'] = new TemporaryBattle('Skull 6', [ + new GymPokemon('Ekans', 104373405, 45), + new GymPokemon('Fomantis', 104373405, 45), + new GymPokemon('Alolan Raticate', 104373405, 45), + new GymPokemon('Mareanie', 104373405, 45), + new GymPokemon('Golbat', 104373405, 45), + new GymPokemon('Houndour', 104373405, 45), +], undefined, [new QuestLineStepCompletedRequirement('Emissary of Light', 2)], undefined, { + displayName: 'Team Skull Grunts', + returnTown: 'Seafolk Village', + imageName: 'specialNPCs/Team Skull Grunts (group)', +}); +TemporaryBattleList['Recon Squad 3'] = new TemporaryBattle('Recon Squad 3', [new GymPokemon('Poipole', 629719547, 49)], 'Perhaps it is time that we stop taking matters into our own hands and instead start relying on others. Must we start by putting our faith in you?', [new QuestLineStepCompletedRequirement('Emissary of Light', 3)], undefined, { + displayName: 'Ultra Recon Squad', + imageName: 'specialNPCs/Ultra Recon Squad (all)', +}); +TemporaryBattleList.Lusamine = new TemporaryBattle('Lusamine', [ + new GymPokemon('Clefable', 109925182, 47), + new GymPokemon('Lilligant', 109925182, 47), + new GymPokemon('Mismagius', 109925182, 47), + new GymPokemon('Milotic', 109925182, 47), + new GymPokemon('Bewear', 109925182, 47), + new GymPokemon('You hateful little Trainer!', 183208637, 47), +], undefined, [new QuestLineStepCompletedRequirement('Emissary of Light', 6)], undefined, { + imageName: '../pokemon/-793.01', + finalPokemonImage: 'specialNPCs/Transparent', +}); +TemporaryBattleList.Necrozma = new TemporaryBattle('Necrozma', [ + // base HP: 364088130 + new GymPokemon('Necrozma (Dusk Mane)', 338601960, 50), + new GymPokemon('Necrozma (Dawn Wings)', 353165486, 50), +], 'Lusamine\'s interference summoned not one, but two Necrozma! That egotistical woman! You have driven one away and our Pokémon is safe, but the other is still in possession of that girl\'s "Nebby" and has taken on its true form!', [new QuestLineCompletedRequirement('Emissary of Light')], undefined, { + hideTrainer: true, + imageName: 'Phyco', +}); +TemporaryBattleList['Ultra Megalopolis'] = new TemporaryBattle('Ultra Megalopolis', [new GymPokemon('Ultra Necrozma', 800540100, 60)], undefined, // custom quest message +[new TemporaryBattleRequirement('Necrozma'), new QuestLineCompletedRequirement('Emissary of Light')], undefined, { + hideTrainer: true, + imageName: 'specialNPCs/Wormhole', + displayName: 'Ultra Necrozma', +}); +TemporaryBattleList['Captain Mina'] = new TemporaryBattle('Captain Mina', [ + new GymPokemon('Mawile', 262098263, 51), + new GymPokemon('Granbull', 262098263, 51), + new GymPokemon('Ribombee', 274011820, 51), +], 'Woah! I\'m shocked at your strength! But you\'ve only just begun my real trial. Now you have to go around to all the captains in Alola!', [new DevelopmentRequirement(new QuestLineCompletedRequirement('Island Challenge'))], undefined, { imageName: 'Mina' }); +TemporaryBattleList['Captain Ilima'] = new TemporaryBattle('Captain Ilima', [ + new GymPokemon('Gumshoos', 262098263, 51), + new GymPokemon('Smeargle', 262098263, 51), + new GymPokemon('Komala', 274011820, 51), +], 'Yes! You have emerged victorious! You and your Pokémon have become quite a delightful team! Off to Lush Jungle? It\'s been a while since I last visited Akala.', [new TemporaryBattleRequirement('Captain Mina')], undefined, { imageName: 'Ilima' }); +TemporaryBattleList['Captain Mallow'] = new TemporaryBattle('Captain Mallow', [ + new GymPokemon('Trevenant', 262098263, 51), + new GymPokemon('Shiinotic', 262098263, 51), + new GymPokemon('Tsareena', 274011820, 51), +], 'Sure enough, when it comes to you and Pokémon, the quality of the ingredients shines forth! Once you defeat Lana do you want to go to Wela Volcano Park with two pretty pals like us?', [new TemporaryBattleRequirement('Captain Ilima')], undefined, { imageName: 'Mallow' }); +TemporaryBattleList['Captain Lana'] = new TemporaryBattle('Captain Lana', [ + new GymPokemon('Lanturn', 262098263, 51), + new GymPokemon('Cloyster', 262098263, 51), + new GymPokemon('Araquanid', 274011820, 51), +], 'Well! Once again, you certainly reeled me in. Please have a good time with Kiawe.', [new TemporaryBattleRequirement('Captain Mallow')], undefined, { imageName: 'Lana' }); +TemporaryBattleList['Captain Kiawe'] = new TemporaryBattle('Captain Kiawe', [ + new GymPokemon('Arcanine', 262098263, 51), + new GymPokemon('Talonflame', 262098263, 51), + new GymPokemon('Alolan Marowak', 274011820, 51), +], 'Not enough dancing! If you\'re hoping to complete Mina\'s trial, you should make for Hokulani Observatory next. Ula\'Ula is only a stone\'s throw away when Charizard is one of your Ride Pokémon!', [new TemporaryBattleRequirement('Captain Lana')], undefined, { imageName: 'Kiawe' }); +TemporaryBattleList['Captain Sophocles'] = new TemporaryBattle('Captain Sophocles', [ + new GymPokemon('Togedemaru', 262098263, 51), + new GymPokemon('Magnezone', 262098263, 51), + new GymPokemon('Alolan Golem', 274011820, 51), +], 'I couldn\'t get it done. Don\'t worry about it, my precious Pokémon... You\'ve gotta finish Mina\'s trial, right? Are you going to Aether House?', [new TemporaryBattleRequirement('Captain Kiawe')], undefined, { imageName: 'Sophocles' }); +TemporaryBattleList['Kahuna Nanu'] = new TemporaryBattle('Kahuna Nanu', [ + new GymPokemon('Sableye', 262098263, 51), + new GymPokemon('Absol', 262098263, 51), + new GymPokemon('Alolan Persian', 274011820, 51), +], 'Heh... You got me good, kid. Hope I don\'t get in trouble with the girl for this. You should go tell that young filly Mina that you\'re done with what she asked you to do.', [new TemporaryBattleRequirement('Captain Sophocles')], undefined, { imageName: 'Nanu' }); +TemporaryBattleList['Gladion 3'] = new TemporaryBattle('Gladion 3', [ + new GymPokemon('Crobat', 194154232, 53), + new GymPokemon('Zoroark', 194154232, 53), + new GymPokemon('Lucario', 194154232, 53), + new GymPokemon('Silvally (Fire)', 213569655, 55, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Grass)), + new GymPokemon('Silvally (Water)', 213569655, 55, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Fire)), + new GymPokemon('Silvally (Grass)', 213569655, 55, new StarterRequirement(GameConstants.Region.alola, GameConstants.Starter.Water)), +], 'You\'ve got good Pokémon. I know what kind of Trainer you are now. And what kind of journey you\'ve been through.
    Lillie\'s looking after our mother at the foundation. Hau\'s working hard to get stronger, too...
    I know we aren\'t friends. But we aren\'t enemies anymore either. Keep winning. Maybe I\'ll see you again if you do.', [new QuestLineStepCompletedRequirement('Eater of Light', 3)], undefined, { + displayName: 'Pokémon Trainer Gladion', + returnTown: 'Tapu Village', + imageName: 'Gladion', +}); +TemporaryBattleList.Lillie = new TemporaryBattle('Lillie', [ + new GymPokemon('Solgaleo', 728176260, 50, new StatisticRequirement(['npcTalkedTo', GameHelper.hash('SunFlute')], 1, 'Must have played the Sun Flute during Emissary of Light quest line')), + new GymPokemon('Lunala', 728176260, 50, new StatisticRequirement(['npcTalkedTo', GameHelper.hash('MoonFlute')], 1, 'Must have played the Moon Flute during Emissary of Light quest line')), +], 'Nebby, you want to keep on traveling together with $playername$, don\'t you? Of course I can tell how you feel! After all...we\'re family now, aren\'t we?
    $playername$! Nebby doesn\'t want this journey with you to end. And I want you to grant it this wish! Share the world with Nebby!', [new QuestLineStepCompletedRequirement('Eater of Light', 1)], [new TemporaryBattleRequirement('Lillie'), new OneFromManyRequirement([new ObtainedPokemonRequirement('Solgaleo'), new ObtainedPokemonRequirement('Lunala')])], { + isTrainerBattle: false, + displayName: 'Pokémon Trainer Lillie', + imageName: 'Lillie (z powered)', +}); +TemporaryBattleList['Guzma Bug Memory'] = new TemporaryBattle('Guzma Bug Memory', [ + new GymPokemon('Golisopod', 225357859, 63), + new GymPokemon('Ariados', 225357859, 63), + new GymPokemon('Masquerain', 225357859, 63), + new GymPokemon('Pinsir', 225357859, 63), + new GymPokemon('Scizor', 225357859, 63), +], 'That was a good beat-down, Champion! You sure wrecked me again. This just proves how much of a tough trainer you are. Here is the Memory you\'ve been looking for.

    You obtained a Bug Silvally Memory!', [new QuestLineStepCompletedRequirement('Typing some Memories', 19)], undefined, { + displayName: 'Guzma', + imageName: 'Guzma', +}); +TemporaryBattleList['Kahili Flying Memory'] = new TemporaryBattle('Kahili Flying Memory', [ + new GymPokemon('Skarmory', 231357859, 63), + new GymPokemon('Crobat', 231357859, 63), + new GymPokemon('Oricorio (Baile)', 231357859, 63), + new GymPokemon('Mandibuzz', 231357859, 63), + new GymPokemon('Toucannon', 231357859, 63), +], 'You\'re pretty talented, $playername$! No wonder you\'ve become the Champion of Alola! Anyways, here is the Memory. I said I\'d give it to you.

    You obtained a Flying Silvally Memory!', [new QuestLineStepCompletedRequirement('Typing some Memories', 21)], undefined, { + displayName: 'Kahili', + imageName: 'Kahili', +}); +TemporaryBattleList['Plumeria Poison Memory'] = new TemporaryBattle('Plumeria Poison Memory', [ + new GymPokemon('Gengar', 237357859, 63), + new GymPokemon('Alolan Muk', 237357859, 63), + new GymPokemon('Crobat', 237357859, 63), + new GymPokemon('Toxapex', 237357859, 63), + new GymPokemon('Salazzle', 237357859, 63), +], 'You\'re pretty strong, $playername$. Maybe my Pokémon and I need to go through more together to deepen our friendship. Take the Memory with you, you deserve it.

    You obtained a Poison Silvally Memory!', [new QuestLineStepCompletedRequirement('Typing some Memories', 23)], undefined, { + displayName: 'Plumeria', + imageName: 'Plumeria (league)', +}); +TemporaryBattleList['Acerola Ghost Memory'] = new TemporaryBattle('Acerola Ghost Memory', [ + new GymPokemon('Banette', 243357859, 63), + new GymPokemon('Drifblim', 243357859, 63), + new GymPokemon('Dhelmise', 243357859, 63), + new GymPokemon('Froslass', 243357859, 63), + new GymPokemon('Palossand', 243357859, 63), +], 'That was so much fun, $playername$! I hope you come by more times so we can battle more often! Anyways, here is the Memory Mimikyu had found.

    You obtained a Ghost Silvally Memory!', [new QuestLineStepCompletedRequirement('Typing some Memories', 25)], undefined, { + displayName: 'Captain Acerola', + imageName: 'Acerola', +}); +TemporaryBattleList['Faba Psychic Memory'] = new TemporaryBattle('Faba Psychic Memory', [ + new GymPokemon('Claydol', 249357859, 63), + new GymPokemon('Bruxish', 249357859, 63), + new GymPokemon('Alolan Raichu', 249357859, 63), + new GymPokemon('Alakazam', 249357859, 63), + new GymPokemon('Hypno', 249357859, 63), +], 'You\'re still pretty strong after all that time since our last battle. Well, take this Memory. Now off with you!

    You obtained a Psychic Silvally Memory!', [new QuestLineStepCompletedRequirement('Typing some Memories', 27)], undefined, { + displayName: 'Aether Branch Chief Faba', + imageName: 'Aether Branch Chief (faba)', +}); +TemporaryBattleList['Molayne Steel Memory'] = new TemporaryBattle('Molayne Steel Memory', [ + new GymPokemon('Klefki', 255357859, 63), + new GymPokemon('Bisharp', 255357859, 63), + new GymPokemon('Magnezone', 255357859, 63), + new GymPokemon('Metagross', 255357859, 63), + new GymPokemon('Alolan Dugtrio', 255357859, 63), +], 'That was a good match! Thank you for helping me train in here and as a reward for being the first person to defeat me, you can take this strange disk!

    You obtained a Steel Silvally Memory!', [new QuestLineStepCompletedRequirement('Typing some Memories', 29)], undefined, { + displayName: 'Molayne', + imageName: 'Molayne', +}); +TemporaryBattleList['Ryuki Dragon Memory'] = new TemporaryBattle('Ryuki Dragon Memory', [ + new GymPokemon('Garchomp', 261357859, 63), + new GymPokemon('Drampa', 261357859, 63), + new GymPokemon('Turtonator', 261357859, 63), + new GymPokemon('Dragonite', 261357859, 63), + new GymPokemon('Kommo-o', 261357859, 63), +], 'And the crowd goes wild! $playername$! You should come by my Gym someday! It\'s in Malie city on Ula\'ula Island right above the Poké Mart, can\'t miss it. What? You\'ve never seen it? It\'s totally there and a real thing! Anyways you can take this.. What was it\'s name? Oh, right. You can take this Memory with you.

    You obtained a Dragon Silvally Memory!', [new QuestLineStepCompletedRequirement('Typing some Memories', 31)], undefined, { + displayName: 'Ryuki', + imageName: 'Ryuki', +}); +TemporaryBattleList.Anabel = new TemporaryBattle('Anabel', [ + new GymPokemon('Alakazam', 229464883, 61), + new GymPokemon('Weavile', 229464883, 61), + new GymPokemon('Mismagius', 229464883, 61), + new GymPokemon('Salamence', 229464883, 61), + new GymPokemon('Snorlax', 234464883, 61), +], 'Oh you\'re good! You might just have a shot, here are some Beast Balls. Go hunt down those strange Ultra Beasts! If you need more Beast Balls, you can buy them here.', [new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 0)]); +TemporaryBattleList['Captain Mina UB'] = new TemporaryBattle('Captain Mina UB', [ + new GymPokemon('Klefki', 205591231, 61), + new GymPokemon('Granbull', 239464883, 61), + new GymPokemon('Shiinotic', 239464883, 61), + new GymPokemon('Wigglytuff', 239464883, 61), + new GymPokemon('Ribombee', 244464883, 61), +], 'Your strength is still shocking!', [new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 7)], undefined, { + displayName: 'Captain Mina', + imageName: 'Mina', +}); +TemporaryBattleList['Kahuna Nanu UB'] = new TemporaryBattle('Kahuna Nanu UB', [ + new GymPokemon('Sableye', 249464883, 63), + new GymPokemon('Krookodile', 249464883, 63), + new GymPokemon('Honchkrow', 249464883, 63), + new GymPokemon('Absol', 249464883, 63), + new GymPokemon('Alolan Persian', 254464883, 63), +], 'I had to be sure. Sure that you\'re ready for what\'s coming...', [new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 13)], undefined, { + displayName: 'Kahuna Nanu', + imageName: 'Nanu', +}); +TemporaryBattleList['Ash Ketchum Alola'] = new TemporaryBattle('Ash Ketchum Alola', [ + new GymPokemon('Pikachu (Partner Cap)', 182908638, 58), + new GymPokemon('Rowlet', 182908638, 56), + new GymPokemon('Incineroar', 182908638, 56), + new GymPokemon('Lycanroc (Dusk)', 182908638, 60), + new GymPokemon('Naganadel', 182908638, 62), + new GymPokemon('Melmetal', 182908638, 62), +], 'Thanks for battling with me again! I\'ve reignited my passion to battle after a nice, long break! ....Did one of the Pikachu here steal my Pikachu\'s hat? Oh well. I have spares. It\'ll be somewhere around here if you want it.', [new TemporaryBattleRequirement('Ash Ketchum Kalos'), new GymBadgeRequirement(BadgeEnums.Champion_Stamp)], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Pikachu Valley', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Rainbow Rocket Grunt 1'] = new TemporaryBattle('Rainbow Rocket Grunt 1', [ + new GymPokemon('Golbat', 433000000, 100), + new GymPokemon('Raticate', 433000000, 100), + new GymPokemon('Persian', 450000000, 100), +], 'Hmph! I\'ll have you know defeating me won\'t do you any good, anyway.', [ + new QuestLineStepCompletedRequirement('Let\'s Go, Meltan!', 9), + new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 0, GameConstants.AchievementOption.less), +], undefined, { + displayName: 'Rainbow Rocket Grunt', + returnTown: 'Aether Paradise', + imageName: 'Team Rainbow Rocket Grunt (female)', +}); +TemporaryBattleList['Rainbow Rocket Grunt 2'] = new TemporaryBattle('Rainbow Rocket Grunt 2', [ + new GymPokemon('Weezing', 433000000, 100), + new GymPokemon('Electrode', 433000000, 100), + new GymPokemon('Cloyster', 450000000, 100), +], 'Hmph! I\'ll have you know defeating me won\'t do you any good, anyway.', [ + new QuestLineStepCompletedRequirement('Let\'s Go, Meltan!', 9), + new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 0, GameConstants.AchievementOption.less), +], undefined, { + displayName: 'Rainbow Rocket Grunt', + returnTown: 'Aether Paradise', + imageName: 'Team Rainbow Rocket Grunt (male)', +}); +TemporaryBattleList['Aether Branch Chief Faba'] = new TemporaryBattle('Aether Branch Chief Faba', [ + new GymPokemon('Claydol', 450000000, 60), + new GymPokemon('Bruxish', 450000000, 60), + new GymPokemon('Hypno', 480000000, 60), +], 'Hmph! I\'ll have you know defeating me won\'t do you any good, anyway.', [new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 0)], undefined, { + imageName: 'Aether Branch Chief (faba)', +}); +TemporaryBattleList['Team Aqua Leader Archie'] = new TemporaryBattle('Team Aqua Leader Archie', [ + new GymPokemon('Mightyena', 270000000, 60), + new GymPokemon('Crobat', 270000000, 60), + new GymPokemon('Muk', 270000000, 60), + new GymPokemon('Sharpedo', 270000000, 60), + new GymPokemon('Kyogre', 300000000, 60), +], 'You\'ve made your point. I can see you are not one to be trifled with.', [new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 1)], undefined, { + imageName: 'Aqua Leader', +}); +TemporaryBattleList['Team Magma Leader Maxie'] = new TemporaryBattle('Team Magma Leader Maxie', [ + new GymPokemon('Mightyena', 270000000, 60), + new GymPokemon('Crobat', 270000000, 60), + new GymPokemon('Weezing', 270000000, 60), + new GymPokemon('Camerupt', 270000000, 60), + new GymPokemon('Groudon', 300000000, 60), +], 'I fell behind, but only by an inch.', [new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 1)], undefined, { + imageName: 'Magma Leader', +}); +TemporaryBattleList['Team Galactic Leader Cyrus'] = new TemporaryBattle('Team Galactic Leader Cyrus', [ + new GymPokemon('Houndoom', 225000000, 60), + new GymPokemon('Honchkrow', 225000000, 60), + new GymPokemon('Crobat', 225000000, 60), + new GymPokemon('Weavile', 225000000, 60), + new GymPokemon('Dialga', 240000000, 60), + new GymPokemon('Palkia', 240000000, 60), +], 'Impressive. Your prowess is notable.', [new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 2)], undefined, { + imageName: 'Galactic Boss (cyrus)', +}); +TemporaryBattleList['Team Flare Leader Lysandre'] = new TemporaryBattle('Team Flare Leader Lysandre', [ + new GymPokemon('Mienshao', 225000000, 60), + new GymPokemon('Pyroar', 225000000, 60), + new GymPokemon('Honchkrow', 225000000, 60), + new GymPokemon('Mega Gyarados', 225000000, 60), + new GymPokemon('Xerneas', 240000000, 60), + new GymPokemon('Yveltal', 240000000, 60), +], 'I can feel the fire of your convictions burning deep within your heart!', [new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 3)], undefined, { + imageName: 'Team Flare Lysandre', +}); +TemporaryBattleList['Team Plasma Leader Ghetsis'] = new TemporaryBattle('Team Plasma Leader Ghetsis', [ + new GymPokemon('Cofagrigus', 225000000, 60), + new GymPokemon('Bouffalant', 225000000, 60), + new GymPokemon('Bisharp', 225000000, 60), + new GymPokemon('Hydreigon', 225000000, 60), + new GymPokemon('Zekrom', 240000000, 60), + new GymPokemon('Reshiram', 240000000, 60), +], 'I couldn\'t have been defeated by some random Trainer from who knows where!', [new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 4)], undefined, { + imageName: 'Ghetsis', +}); +TemporaryBattleList['Team Rainbow Leader Giovanni'] = new TemporaryBattle('Team Rainbow Leader Giovanni', [ + new GymPokemon('Dugtrio', 230000000, 60), + new GymPokemon('Nidoking', 230000000, 60), + new GymPokemon('Nidoqueen', 230000000, 60), + new GymPokemon('Rhyperior', 230000000, 60), + new GymPokemon('Mega Mewtwo X', 245000000, 60), + new GymPokemon('Mega Mewtwo Y', 245000000, 60), +], 'Ha! That was a truly intense fight!', [new QuestLineStepCompletedRequirement('Defeat Rainbow Rocket', 5)]); +// Magikarp Jump Temp Battles +TemporaryBattleList['Magikarp Jump Koylee'] = new TemporaryBattle('Magikarp Jump Koylee', [new GymPokemon('Magikarp Calico (Orange, White)', 1215000, 20)], 'Your scales are full of heart!', [new RouteKillRequirement(10, GameConstants.Region.alola, 32)], undefined, { + displayName: 'Koylee', + imageName: 'Jump Champ Green', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpella'] = new TemporaryBattle('Magikarp Jump Karpella', [new GymPokemon('Magikarp Calico (Orange, White, Black)', 3037500, 20)], 'Wow, you\'re the cream of the \'karp, alright!', [new RouteKillRequirement(10, GameConstants.Region.alola, 33)], undefined, { + displayName: 'Karpella', + imageName: 'Jump Champ Red', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpen'] = new TemporaryBattle('Magikarp Jump Karpen', [new GymPokemon('Magikarp Calico (White, Orange)', 3206250, 20)], 'Are you sure your Karp isn\'t flying-type?', [new TemporaryBattleRequirement('Magikarp Jump Karpella')], undefined, { + displayName: 'Karpen', + imageName: 'Jump Champ Green', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 33), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Tykarp'] = new TemporaryBattle('Magikarp Jump Tykarp', [new GymPokemon('Magikarp Calico (Orange, White)', 4860000, 20)], 'I lost because of my karpal tunnel...', [new RouteKillRequirement(10, GameConstants.Region.alola, 34)], undefined, { + displayName: 'Tykarp', + imageName: 'Jump Champ Blue', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpress'] = new TemporaryBattle('Magikarp Jump Karpress', [new GymPokemon('Magikarp Calico (Orange, White, Black)', 5130000, 20)], 'Basculin the glory while you can, I\'ll get you next time! Wahaa!', [new TemporaryBattleRequirement('Magikarp Jump Tykarp')], undefined, { + displayName: 'Karpress', + imageName: 'Jump Champ Red', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 34), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karami'] = new TemporaryBattle('Magikarp Jump Karami', [new GymPokemon('Magikarp Calico (Orange, White)', 9112500, 20)], 'Well, it\'s oh-fish-ial! You win!', [new RouteKillRequirement(10, GameConstants.Region.alola, 35)], undefined, { + displayName: 'Karami', + imageName: 'Jump Champ Green', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karson'] = new TemporaryBattle('Magikarp Jump Karson', [new GymPokemon('Magikarp Skelly', 9618750, 20)], 'Hey, would you mind letting minnow when you want to rematch?', [new TemporaryBattleRequirement('Magikarp Jump Karami')], undefined, { + displayName: 'Karson', + imageName: 'Jump Champ Blue', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 35), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpress 2'] = new TemporaryBattle('Magikarp Jump Karpress 2', [new GymPokemon('Magikarp Calico (Orange, White)', 12150000, 20)], 'I\'m fin-ished...', [new RouteKillRequirement(10, GameConstants.Region.alola, 36)], undefined, { + displayName: 'Karpress', + imageName: 'Jump Champ Red', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpen 2'] = new TemporaryBattle('Magikarp Jump Karpen 2', [new GymPokemon('Magikarp Calico (White, Orange)', 12825000, 20)], 'Magikarp is so classy, it\'s so-fish-ticated', [new TemporaryBattleRequirement('Magikarp Jump Karpress 2')], undefined, { + displayName: 'Karpen', + imageName: 'Jump Champ Green', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 36), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karbuck'] = new TemporaryBattle('Magikarp Jump Karbuck', [new GymPokemon('Magikarp Calico (Orange, Gold)', 13095000, 20)], 'That battle scared the karp out of me!', [new TemporaryBattleRequirement('Magikarp Jump Karpen 2')], undefined, { + displayName: 'Karbuck', + imageName: 'Jump Champ Blue', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 36), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Skyhopper'] = new TemporaryBattle('Magikarp Jump Skyhopper', [new GymPokemon('Magikarp Calico (Orange, White)', 18225000, 20)], 'I will jump away from this battle!', [new RouteKillRequirement(10, GameConstants.Region.alola, 37)], undefined, { + displayName: 'Skyhopper', + imageName: 'Jump Champ Red', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpen 3'] = new TemporaryBattle('Magikarp Jump Karpen 3', [new GymPokemon('Magikarp Skelly', 19237500, 20)], 'Are you trying to fly to the stratosphere?', [new TemporaryBattleRequirement('Magikarp Jump Skyhopper')], undefined, { + displayName: 'Karpen', + imageName: 'Jump Champ Blue', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 37), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpella 2'] = new TemporaryBattle('Magikarp Jump Karpella 2', [new GymPokemon('Magikarp Calico (Orange, White, Black)', 19642500, 20)], 'I hate fish puns...', [new TemporaryBattleRequirement('Magikarp Jump Karpen 3')], undefined, { + displayName: 'Karpella', + imageName: 'Jump Champ Green', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 37), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karbuck 2'] = new TemporaryBattle('Magikarp Jump Karbuck 2', [new GymPokemon('Magikarp Calico (Orange, White)', 24300000, 20)], 'I wish a Pidgeotto would steal me away about now...', [new RouteKillRequirement(10, GameConstants.Region.alola, 38)], undefined, { + displayName: 'Karbuck', + imageName: 'Jump Champ Red', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Kareign'] = new TemporaryBattle('Magikarp Jump Kareign', [new GymPokemon('Magikarp Calico (White, Orange)', 25650000, 20)], 'Wow, you\'ve been drinking your Training Sodas!', [new TemporaryBattleRequirement('Magikarp Jump Karbuck 2')], undefined, { + displayName: 'Kareign', + imageName: 'Jump Champ Blue', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 38), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Koylee 2'] = new TemporaryBattle('Magikarp Jump Koylee 2', [new GymPokemon('Magikarp Calico (Orange, White, Black)', 26190000, 20)], 'I need to find more sunken treasures...', [new TemporaryBattleRequirement('Magikarp Jump Kareign')], undefined, { + displayName: 'Koylee', + imageName: 'Jump Champ Green', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 38), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpress 3'] = new TemporaryBattle('Magikarp Jump Karpress 3', [new GymPokemon('Magikarp Grey Diamonds', 36450000, 20)], 'You cheater! I have seen Rowlet giving you money!!!', [new RouteKillRequirement(10, GameConstants.Region.alola, 39)], undefined, { + displayName: 'Karpress', + imageName: 'Jump Champ Blue', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpen 4'] = new TemporaryBattle('Magikarp Jump Karpen 4', [new GymPokemon('Magikarp Brown Tiger', 38475000, 20)], 'My Magikarp might not jump high but it\'s fast enough to win the Naskarp Cup.', [new TemporaryBattleRequirement('Magikarp Jump Karpress 3')], undefined, { + displayName: 'Karpen', + imageName: 'Jump Champ Red', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 39), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Karpella 3'] = new TemporaryBattle('Magikarp Jump Karpella 3', [new GymPokemon('Magikarp Purple Patches', 39285000, 20)], 'I will beat you next time! Any fin is possible if you believe in it!', [new TemporaryBattleRequirement('Magikarp Jump Karpen 4')], undefined, { + displayName: 'Karpella', + imageName: 'Jump Champ Green', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 39), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Skyhopper 2'] = new TemporaryBattle('Magikarp Jump Skyhopper 2', [new GymPokemon('Magikarp Calico (Orange, Gold)', 48600000, 20)], 'Who wants to place a bait on a rematch?', [new RouteKillRequirement(10, GameConstants.Region.alola, 40)], undefined, { + displayName: 'Skyhopper', + imageName: 'Jump Champ Blue', + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +TemporaryBattleList['Magikarp Jump Tykarp 2'] = new TemporaryBattle('Magikarp Jump Tykarp 2', [new GymPokemon('Magikarp Black Mask', 51300000, 20)], 'The way my Magikarp performed is a-trout-cious!', [new TemporaryBattleRequirement('Magikarp Jump Skyhopper 2')], undefined, { + displayName: 'Tykarp', + imageName: 'Jump Champ Red', + visibleRequirement: new RouteKillRequirement(10, GameConstants.Region.alola, 40), + firstTimeRewardFunction: () => { + Notifier.notify({ + message: 'You were awarded a Magikarp Biscuit!', + type: NotificationConstants.NotificationOption.success, + image: ItemList.Magikarp_Biscuit.image, + }); + player.gainItem('Magikarp_Biscuit', 1); + }, +}); +//Galar Temporary Battles +TemporaryBattleList['Hop 1'] = new TemporaryBattle('Hop 1', [ + new GymPokemon('Wooloo', 131822195, 3), + new GymPokemon('Sobble', 142807378, 5, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Grookey', 142807378, 5, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Scorbunny', 142807378, 5, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], 'Well, that was a shock! Guess I know now why Lee thought he should give you a Pokémon, too...', [new GymBadgeRequirement(BadgeEnums.Champion_Stamp)], undefined, { + displayName: 'Pokémon Trainer Hop', + returnTown: 'Postwick', + imageName: 'Hop', +}); +TemporaryBattleList.Mirages = new TemporaryBattle('Mirages', [ + new GymPokemon('Zacian (Battle Hero)', 155623424, 70), + new GymPokemon('Zamazenta (Battle Hero)', 155623424, 70), +], 'The Pokémon fled.', [new TemporaryBattleRequirement('Hop 1')], undefined, { + hideTrainer: true, + imageName: 'specialNPCs/Mirages', +}); +TemporaryBattleList['Hop 2'] = new TemporaryBattle('Hop 2', [ + new GymPokemon('Wooloo', 120799263, 6), + new GymPokemon('Rookidee', 120799263, 5), + new GymPokemon('Sobble', 124574239, 8, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Grookey', 124574239, 8, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Scorbunny', 124574239, 8, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], 'And I even got my Pokéball throw perfect too!', [new RouteKillRequirement(10, GameConstants.Region.galar, 2)], undefined, { + displayName: 'Pokémon Trainer Hop', + returnTown: 'Professor Magnolia\'s House', + imageName: 'Hop', +}); +TemporaryBattleList['Hop 3'] = new TemporaryBattle('Hop 3', [ + new GymPokemon('Wooloo', 139059603, 11), + new GymPokemon('Rookidee', 139059603, 12), + new GymPokemon('Sobble', 143273544, 14, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Grookey', 143273544, 14, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Scorbunny', 143273544, 14, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], 'Was that really good training? Looks like I\'d better keep my guard up!', [new RouteKillRequirement(10, GameConstants.Region.galar, 6)], undefined, { + displayName: 'Pokémon Trainer Hop', + returnTown: 'Motostoke', + imageName: 'Hop', +}); +TemporaryBattleList['Bede 1'] = new TemporaryBattle('Bede 1', [ + new GymPokemon('Solosis', 150454779, 13), + new GymPokemon('Gothita', 150454779, 15), + new GymPokemon('Hatenna', 155014016, 16), +], 'I see... Well, that\'s fine. I wasn\'t really trying all that hard anyway.', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Galar Mine'))], undefined, { + displayName: 'Pokémon Trainer Bede', + imageName: 'Bede', +}); +TemporaryBattleList['Hop 4'] = new TemporaryBattle('Hop 4', [ + new GymPokemon('Wooloo', 197427719, 18), + new GymPokemon('Corvisquire', 197427719, 19), + new GymPokemon('Drizzile', 203410376, 21, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Thwackey', 203410376, 21, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Raboot', 203410376, 21, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], 'We both got ourselves the same Grass Badge, so how come you\'re so much stronger?', [new RouteKillRequirement(10, GameConstants.Region.galar, 14)], undefined, { + displayName: 'Pokémon Trainer Hop', + returnTown: 'Turffield', + imageName: 'Hop', +}); +TemporaryBattleList['Bede 2'] = new TemporaryBattle('Bede 2', [ + new GymPokemon('Solosis', 184374062, 21), + new GymPokemon('Gothita', 184374062, 22), + new GymPokemon('Galarian Ponyta', 184374062, 22), + new GymPokemon('Hatenna', 190359516, 23), +], 'You showed at least a little effort, so I decided I should let you win!', [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Galar Mine No. 2'))], undefined, { + displayName: 'Pokémon Trainer Bede', + imageName: 'Bede', +}); +TemporaryBattleList['Marnie 1'] = new TemporaryBattle('Marnie 1', [ + new GymPokemon('Croagunk', 249033761, 24), + new GymPokemon('Scraggy', 249033761, 24), + new GymPokemon('Morpeko', 256580237, 26), +], 'You beat me... Guess you must not be so bad after all, huh?', [new RouteKillRequirement(10, GameConstants.Region.galar, 15)], undefined, { + displayName: 'Pokémon Trainer Marnie', + imageName: 'Marnie', +}); +TemporaryBattleList['Hop 5'] = new TemporaryBattle('Hop 5', [ + new GymPokemon('Cramorant', 250716184, 28), + new GymPokemon('Toxel', 250716184, 29), + new GymPokemon('Silicobra', 250716184, 30), + new GymPokemon('Drizzile', 258803803, 33, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Thwackey', 258803803, 33, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Raboot', 258803803, 33, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], 'My strategy goes right to pot when I\'ve got all these bad thoughts running through my head...', [new RouteKillRequirement(10, GameConstants.Region.galar, 23)], undefined, { + displayName: 'Pokémon Trainer Hop', + returnTown: 'Stow-on-Side', + imageName: 'Hop', +}); +TemporaryBattleList['Bede 3'] = new TemporaryBattle('Bede 3', [ + new GymPokemon('Duosion', 269057258, 32), + new GymPokemon('Gothorita', 269057258, 32), + new GymPokemon('Galarian Ponyta', 269057258, 33), + new GymPokemon('Hattrem', 277736524, 35), +], 'This has to be some kind of mistake. I demand a do-over!', [new QuestLineStepCompletedRequirement('The Darkest Day', 0)], undefined, { + displayName: 'Pokémon Trainer Bede', + returnTown: 'Stow-on-Side', + imageName: 'Bede', +}); +TemporaryBattleList['Hop 6'] = new TemporaryBattle('Hop 6', [ + new GymPokemon('Trevenant', 223228748, 34), + new GymPokemon('Heatmor', 223228748, 34), + new GymPokemon('Snorlax', 223228748, 35), + new GymPokemon('Boltund', 223228748, 35), + new GymPokemon('Inteleon', 229959263, 37, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Rillaboom', 229959263, 37, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Cinderace', 229959263, 37, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], 'This is rubbish... My team can\'t perform if I can\'t get my own head straight as their Trainer...', [new GymBadgeRequirement(BadgeEnums.Galar_Fairy)], undefined, { + displayName: 'Pokémon Trainer Hop', + returnTown: 'Hammerlocke', + imageName: 'Hop', +}); +TemporaryBattleList['Hop 7'] = new TemporaryBattle('Hop 7', [ + new GymPokemon('Dubwool', 230701817, 40), + new GymPokemon('Corviknight', 230701817, 40), + new GymPokemon('Pincurchin', 230701817, 39), + new GymPokemon('Snorlax', 230701817, 39), + new GymPokemon('Inteleon', 237657651, 41, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Rillaboom', 237657651, 41, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Cinderace', 237657651, 41, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], 'I still can\'t even beat you, my true rival... But I think I\'m starting to see the light!', [ + new MultiRequirement([ + new TemporaryBattleRequirement('Hop 6'), + new GymBadgeRequirement(BadgeEnums.Galar_Rock), + new GymBadgeRequirement(BadgeEnums.Galar_Ice), + ]), +], undefined, { + displayName: 'Pokémon Trainer Hop', + returnTown: 'Circhester', + imageName: 'Hop', +}); +TemporaryBattleList['Marnie 2'] = new TemporaryBattle('Marnie 2', [ + new GymPokemon('Liepard', 291088850, 42), + new GymPokemon('Toxicroak', 291088850, 43), + new GymPokemon('Scrafty', 291088850, 43), + new GymPokemon('Morpeko', 300478812, 44), +], 'What\'s with that?! My Pokémon didn\'t get a chance to really do their thing at all. Ugh!', [new RouteKillRequirement(10, GameConstants.Region.galar, 30)], undefined, { + displayName: 'Pokémon Trainer Marnie', + returnTown: 'Circhester', + imageName: 'Marnie', +}); +TemporaryBattleList.Eternatus = new TemporaryBattle('Eternatus', [new GymPokemon('Eternatus', 1978787544, 60)], 'You defeated Eternatus, but it looks like it\'s not over yet!', [new QuestLineStepCompletedRequirement('The Darkest Day', 16)], undefined, { + hideTrainer: true, + imageName: '../pokemon/890', +}); +TemporaryBattleList['The Darkest Day'] = new TemporaryBattle('The Darkest Day', [new GymPokemon('Eternamax Eternatus', 2132337401, 60)], 'You finally defeated Eternatus!', [new TemporaryBattleRequirement('Eternatus')], undefined, { + hideTrainer: true, + imageName: '../pokemon/890', +}); +TemporaryBattleList['Hop 8'] = new TemporaryBattle('Hop 8', [ + new GymPokemon('Dubwool', 406369343, 59), + new GymPokemon('Pincurchin', 406369343, 59), + new GymPokemon('Cramorant', 406369343, 58), + new GymPokemon('Snorlax', 406369343, 58), + new GymPokemon('Corviknight', 406369343, 58), + new GymPokemon('Inteleon', 410276760, 60, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Grass)), + new GymPokemon('Rillaboom', 410276760, 60, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Fire)), + new GymPokemon('Cinderace', 410276760, 60, new StarterRequirement(GameConstants.Region.galar, GameConstants.Starter.Water)), +], 'I didn\'t expect there to be such a gap between you and me, mate...', [new QuestLineStepCompletedRequirement('Sword and Shield', 0)], undefined, { + displayName: 'Pokémon Trainer Hop', + imageName: 'Hop', +}); +TemporaryBattleList['Sordward 1'] = new TemporaryBattle('Sordward 1', [ + new GymPokemon('Sirfetch\'d', 613640125, 60), + new GymPokemon('Golisopod', 613640125, 60), + new GymPokemon('Doublade', 613640125, 60), + new GymPokemon('Bisharp', 633434967, 60), +], 'Oh... How can this be? My...my Pokémon...', [new QuestLineStepCompletedRequirement('Sword and Shield', 2)], undefined, { + displayName: 'Pokémon Trainer Sordward', + imageName: 'Sordward', +}); +TemporaryBattleList['Shielbert 1'] = new TemporaryBattle('Shielbert 1', [ + new GymPokemon('Sirfetch\'d', 613640125, 60), + new GymPokemon('Bronzong', 613640125, 60), + new GymPokemon('Falinks', 613640125, 60), + new GymPokemon('Klinklang', 633434967, 60), +], 'Oh... How can this be? My...my Pokémon...', [new QuestLineStepCompletedRequirement('Sword and Shield', 2)], undefined, { + displayName: 'Pokémon Trainer Shielbert', + imageName: 'Shielbert', +}); +TemporaryBattleList['Rampaging Tsareena'] = new TemporaryBattle('Rampaging Tsareena', [new GymPokemon('Tsareena', 2401180786, 60)], 'The Rampaging Tsareena fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 3)], undefined, { + hideTrainer: true, + imageName: '../pokemon/763', +}); +TemporaryBattleList['Rampaging Gyarados'] = new TemporaryBattle('Rampaging Gyarados', [new GymPokemon('Gyarados', 2401180786, 60)], 'The Rampaging Gyarados fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 4)], undefined, { + hideTrainer: true, + imageName: '../pokemon/130', +}); +TemporaryBattleList['Rampaging Torkoal'] = new TemporaryBattle('Rampaging Torkoal', [new GymPokemon('Torkoal', 2401180786, 60)], 'The Rampaging Torkoal fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 5)], undefined, { + hideTrainer: true, + imageName: '../pokemon/324', +}); +TemporaryBattleList['Sordward & Shielbert'] = new TemporaryBattle('Sordward & Shielbert', [ + new GymPokemon('Golisopod', 432185147, 62), + new GymPokemon('Bronzong', 432185147, 62), + new GymPokemon('Doublade', 432185147, 62), + new GymPokemon('Falinks', 432185147, 62), + new GymPokemon('Bisharp', 449825356, 62), + new GymPokemon('Klinklang', 449825356, 62), +], 'Quite the vexing predicament indeed, surely this must be some kind of mistake...', [new QuestLineStepCompletedRequirement('Sword and Shield', 7)]); +TemporaryBattleList['Rampaging Conkeldurr'] = new TemporaryBattle('Rampaging Conkeldurr', [new GymPokemon('Conkeldurr', 2749793992, 60)], 'The Rampaging Conkeldurr fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 8)], undefined, { + hideTrainer: true, + imageName: '../pokemon/534', +}); +TemporaryBattleList['Rampaging Dusknoir'] = new TemporaryBattle('Rampaging Dusknoir', [new GymPokemon('Dusknoir', 2749793992, 60)], 'The Rampaging Dusknoir fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 8)], undefined, { + hideTrainer: true, + imageName: '../pokemon/477', +}); +TemporaryBattleList['Gym Leader Bede'] = new TemporaryBattle('Gym Leader Bede', [ + new GymPokemon('Mawile', 676486974, 61), + new GymPokemon('Gardevoir', 676486974, 61), + new GymPokemon('Galarian Rapidash', 676486974, 62), + new GymPokemon('Hatterene', 698309136, 63), +], 'Thank you for the battle. I can now accept you as the Champion. It\'s painful to admit, but I\'ve come to realise a few of my weaknesses. But I\'ll keep getting stronger. I\'ll reach the pinnacle of what Fairy types can do.', [new QuestLineStepCompletedRequirement('Sword and Shield', 9)], undefined, { imageName: 'Gym Leader Bede' }); +TemporaryBattleList['Rampaging Gigalith'] = new TemporaryBattle('Rampaging Gigalith', [new GymPokemon('Gigalith', 2749793992, 60)], 'The Rampaging Gigalith fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 10)], undefined, { + hideTrainer: true, + imageName: '../pokemon/526', +}); +TemporaryBattleList['Rampaging Froslass'] = new TemporaryBattle('Rampaging Froslass', [new GymPokemon('Froslass', 2749793992, 60)], 'The Rampaging Froslass fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 10)], undefined, { + hideTrainer: true, + imageName: '../pokemon/478', +}); +TemporaryBattleList['Gym Leader Marnie'] = new TemporaryBattle('Gym Leader Marnie', [ + new GymPokemon('Liepard', 542115147, 59), + new GymPokemon('Toxicroak', 542115147, 59), + new GymPokemon('Scrafty', 542115147, 59), + new GymPokemon('Morpeko', 548679609, 60), + new GymPokemon('Grimmsnarl', 563532116, 60), +], 'Yeah I lost, but I\'m gonna learn from your battle style and everythin\'!', [new QuestLineStepCompletedRequirement('Sword and Shield', 11)]); +TemporaryBattleList['Rampaging Haxorus'] = new TemporaryBattle('Rampaging Haxorus', [new GymPokemon('Haxorus', 2841435245, 60)], 'The Rampaging Haxorus fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 12)], undefined, { + hideTrainer: true, + imageName: '../pokemon/612', +}); +TemporaryBattleList['Sordward 2'] = new TemporaryBattle('Sordward 2', [ + new GymPokemon('Sirfetch\'d', 699950617, 64), + new GymPokemon('Golisopod', 699950617, 64), + new GymPokemon('Doublade', 699950617, 64), + new GymPokemon('Bisharp', 722539114, 64), +], 'Oho... My noble Pokémon...', [new QuestLineStepCompletedRequirement('Sword and Shield', 14)], undefined, { + displayName: 'Pokémon Trainer Sordward', + imageName: 'Sordward', +}); +TemporaryBattleList['Shielbert 2'] = new TemporaryBattle('Shielbert 2', [ + new GymPokemon('Sirfetch\'d', 699950617, 64), + new GymPokemon('Bronzong', 699950617, 64), + new GymPokemon('Falinks', 699950617, 64), + new GymPokemon('Klinklang', 722539114, 64), +], 'Oho... My noble Pokémon...', [new QuestLineStepCompletedRequirement('Sword and Shield', 14)], undefined, { + displayName: 'Pokémon Trainer Shielbert', + imageName: 'Shielbert', +}); +TemporaryBattleList['Rampaging Zacian'] = new TemporaryBattle('Rampaging Zacian', [new GymPokemon('Zacian (Crowned Sword)', 2980285799, 70)], 'Zacian fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 16)], undefined, { + hideTrainer: true, + imageName: '../pokemon/888.01', +}); +TemporaryBattleList['Rampaging Zamazenta'] = new TemporaryBattle('Rampaging Zamazenta', [new GymPokemon('Zamazenta (Crowned Shield)', 2980285799, 70)], 'Zamazenta fainted.', [new QuestLineStepCompletedRequirement('Sword and Shield', 16)], undefined, { + hideTrainer: true, + imageName: '../pokemon/889.01', +}); +TemporaryBattleList['Klara 1'] = new TemporaryBattle('Klara 1', [ + new GymPokemon('Venipede', 1241081506, 58), + new GymPokemon('Galarian Slowpoke', 1266153856, 60), +], 'Oh, my next Pokémon\'s gonna make short work-- Huh? That was my last one?', [new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion)], undefined, { + displayName: 'Pokémon Trainer Klara', + returnTown: 'Armor Station', + imageName: 'Klara', +}); +TemporaryBattleList['Avery 1'] = new TemporaryBattle('Avery 1', [ + new GymPokemon('Abra', 1241081506, 58), + new GymPokemon('Galarian Slowpoke', 1266153856, 60), +], 'Such strength! I\'m in Psyshock!', [new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion)], undefined, { + displayName: 'Pokémon Trainer Avery', + returnTown: 'Armor Station', + imageName: 'Avery', +}); +TemporaryBattleList.Mustard = new TemporaryBattle('Mustard', [ + new GymPokemon('Mienfoo', 1277045143, 60), + new GymPokemon('Shinx', 1277045143, 60), +], 'That was everything I hoped for and more!', [new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 0)], undefined, { + displayName: 'Dojo Master Mustard', +}); +TemporaryBattleList['Klara 2'] = new TemporaryBattle('Klara 2', [ + new GymPokemon('Galarian Slowpoke', 873047014, 62), + new GymPokemon('Koffing', 873047014, 62), + new GymPokemon('Whirlipede', 899502986, 63), +], 'Just what have you got that I don\'t?', [ + new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 6), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Warm-Up Tunnel')), +], undefined, { + displayName: 'Pokémon Trainer Klara', + imageName: 'Klara', +}); +TemporaryBattleList['Avery 2'] = new TemporaryBattle('Avery 2', [ + new GymPokemon('Galarian Slowpoke', 873047014, 62), + new GymPokemon('Woobat', 873047014, 62), + new GymPokemon('Kadabra', 899502986, 63), +], 'What a Psystrike to my poor pride...', [ + new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 6), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Warm-Up Tunnel')), +], undefined, { + displayName: 'Pokémon Trainer Avery', + imageName: 'Avery', +}); +TemporaryBattleList['Klara 3'] = new TemporaryBattle('Klara 3', [ + new GymPokemon('Skorupi', 676780921, 65), + new GymPokemon('Galarian Weezing', 676780921, 66), + new GymPokemon('Whirlipede', 676780921, 66), + new GymPokemon('Galarian Slowbro', 704125603, 67), +], 'But I didn\'t hold back! I gave it everything I\'ve got...', [new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 9)], undefined, { + displayName: 'Pokémon Trainer Klara', + returnTown: 'Master Dojo', + imageName: 'Klara', +}); +TemporaryBattleList['Avery 3'] = new TemporaryBattle('Avery 3', [ + new GymPokemon('Galarian Ponyta', 676780921, 65), + new GymPokemon('Swoobat', 676780921, 66), + new GymPokemon('Kadabra', 676780921, 66), + new GymPokemon('Galarian Slowbro', 704125603, 67), +], 'Oh, I should just Imprison myself for this!', [new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 9)], undefined, { + displayName: 'Pokémon Trainer Avery', + returnTown: 'Master Dojo', + imageName: 'Avery', +}); +TemporaryBattleList.Kubfu = new TemporaryBattle('Kubfu', [new GymPokemon('Kubfu', 2911282519, 50)], undefined, [new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 11)], [new ObtainedPokemonRequirement('Kubfu')], { + isTrainerBattle: false, + hideTrainer: true, + imageName: '../pokemon/891', +}); +TemporaryBattleList['Zarude Tribe 1'] = new TemporaryBattle('Zarude Tribe 1', [ + new GymPokemon('Zarude', 521084874, 79), + new GymPokemon('Zarude', 521084874, 80), + new GymPokemon('Zarude', 521084874, 81), + new GymPokemon('Zarude', 521084874, 81), + new GymPokemon('Zarude', 521084874, 81), +], 'Za! Za! Zarude!', [new QuestLineStepCompletedRequirement('Secrets of the Jungle', 3)], undefined, { + displayName: 'Zarude Tribe', + imageName: 'specialNPCs/Zarude Tribe', + hideTrainer: true, +}); +TemporaryBattleList['Zarude Tribe 2'] = new TemporaryBattle('Zarude Tribe 2', [ + new GymPokemon('Zarude', 453871360, 82), + new GymPokemon('Zarude', 453871360, 82), + new GymPokemon('Zarude', 453871360, 83), + new GymPokemon('Zarude', 453871360, 83), + new GymPokemon('Zarude', 453871360, 84), + new GymPokemon('Zarude', 453871360, 85), +], 'Za! Za! Zarude!', [new QuestLineStepCompletedRequirement('Secrets of the Jungle', 5)], undefined, { + displayName: 'Zarude Tribe', + imageName: 'specialNPCs/Zarude Tribe', + hideTrainer: true, +}); +TemporaryBattleList['Zarude Tribe 3'] = new TemporaryBattle('Zarude Tribe 3', [ + new GymPokemon('Zarude', 453871360, 85), + new GymPokemon('Zarude', 453871360, 85), + new GymPokemon('Zarude', 453871360, 86), + new GymPokemon('Zarude', 453871360, 86), + new GymPokemon('Zarude', 453871360, 87), + new GymPokemon('Zarude', 453871360, 88), +], 'Za! Za! Zarude!', [new QuestLineStepCompletedRequirement('Secrets of the Jungle', 5)], undefined, { + displayName: 'Zarude Tribe', + imageName: 'specialNPCs/Zarude Tribe', + hideTrainer: true, +}); +TemporaryBattleList['Ash Ketchum Galar'] = new TemporaryBattle('Ash Ketchum Galar', [ + new GymPokemon('Pikachu (Partner Cap)', 447517503, 58), + new GymPokemon('Sirfetch\'d', 439711964, 56), + new GymPokemon('Dragonite', 439711964, 56), + new GymPokemon('Dracovish', 439711964, 60), + new GymPokemon('Gigantamax Gengar', 460526732, 62), + new GymPokemon('Mega Lucario', 473535961, 62), +], '...I really thought I could beat you this time. Still, it was a really fun battle! Okay, let\'s go to Glimwood Tangle! I\'ll beat you there!', [new QuestLineStepCompletedRequirement('Secrets of the Jungle', 8)], undefined, { + displayName: 'Ash Ketchum', + returnTown: 'Master Dojo', + imageName: 'Ash Ketchum', +}); +TemporaryBattleList['Zarude (Dada)'] = new TemporaryBattle('Zarude (Dada)', [new GymPokemon('Zarude (Dada)', 2887787136, 90)], 'Zaru Zaruza. Zarude!', [new QuestLineStepCompletedRequirement('Secrets of the Jungle', 10)], undefined, { + hideTrainer: true, + imageName: '../pokemon/893.01', +}); +TemporaryBattleList['Flowering Celebi'] = new TemporaryBattle('Flowering Celebi', [new GymPokemon('Flowering Celebi', 2960030616, 100)], 'Cel Cel! Celebi!', [new QuestLineStepCompletedRequirement('Secrets of the Jungle', 12)], undefined, { + hideTrainer: true, + imageName: '../pokemon/251.01', +}); +TemporaryBattleList.Peony = new TemporaryBattle('Peony', [ + new GymPokemon('Copperajah', 1290271017, 70), + new GymPokemon('Aggron', 1302273540, 70), +], 'Gahahaaa! Look at me, takin\' a thrashin\' from a youngster like you!', [new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion)], undefined, { + displayName: 'Pokémon Trainer Peony', + imageName: 'Peony', +}); +TemporaryBattleList.Calyrex = new TemporaryBattle('Calyrex', [new GymPokemon('Calyrex', 2745599773, 80)], 'Cracrown crow. Roooooowwwn rown crown.', [new QuestLineStepCompletedRequirement('The Crown of Galar', 0)], undefined, { + hideTrainer: true, + imageName: '../pokemon/898', +}); +TemporaryBattleList.Glastrier = new TemporaryBattle('Glastrier', [new GymPokemon('Glastrier', 2935511652, 75)], 'The Pokémon ran away!', [new QuestLineStepCompletedRequirement('The Crown of Galar', 4)], undefined, { + hideTrainer: true, + imageName: '../pokemon/896', +}); +TemporaryBattleList.Spectrier = new TemporaryBattle('Spectrier', [new GymPokemon('Spectrier', 2935511652, 75)], 'The Pokémon ran away!', [new QuestLineStepCompletedRequirement('The Crown of Galar', 4)], undefined, { + hideTrainer: true, + imageName: '../pokemon/897', +}); +TemporaryBattleList['Dyna Tree Birds'] = new TemporaryBattle('Dyna Tree Birds', [ + new GymPokemon('Galarian Articuno', 884062476, 70), + new GymPokemon('Galarian Zapdos', 884062476, 70), + new GymPokemon('Galarian Moltres', 884062476, 70), +], 'The legendary birds fled in different directions.', [new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 1)], undefined, { + hideTrainer: true, + returnTown: 'Dyna Tree Hill', + imageName: 'specialNPCs/Dyna Tree Birds', +}); +TemporaryBattleList['Galarian Articuno 1'] = new TemporaryBattle('Galarian Articuno 1', [new GymPokemon('Galarian Articuno', 2746123804, 100)], 'Galarian Articuno fled to elsewhere in the Crown Tundra.', [ + new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 3), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Roaring-Sea Caves')), +], undefined, { + hideTrainer: true, + displayName: 'Galarian Articuno', + returnTown: 'Roaring-Sea Caves', + imageName: '../pokemon/144.01', + visibleRequirement: new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 3), +}); +TemporaryBattleList['Galarian Articuno 2'] = new TemporaryBattle('Galarian Articuno 2', [new GymPokemon('Galarian Articuno', 2840817728, 100)], 'Galarian Articuno fled to elsewhere in the Crown Tundra.', [ + new TemporaryBattleRequirement('Galarian Articuno 1'), + new RouteKillRequirement(10, GameConstants.Region.galar, 51), +], undefined, { + hideTrainer: true, + displayName: 'Galarian Articuno', + returnTown: 'Roaring-Sea Caves', + imageName: '../pokemon/144.01', + visibleRequirement: new TemporaryBattleRequirement('Galarian Articuno 1'), +}); +TemporaryBattleList['Galarian Articuno 3'] = new TemporaryBattle('Galarian Articuno 3', [new GymPokemon('Galarian Articuno', 2911838171, 100)], 'Galarian Articuno fled to elsewhere in the Crown Tundra.', [ + new TemporaryBattleRequirement('Galarian Articuno 2'), + new RouteKillRequirement(10, GameConstants.Region.galar, 55), +], undefined, { + hideTrainer: true, + displayName: 'Galarian Articuno', + returnTown: 'Tunnel to the Top', + imageName: '../pokemon/144.01', + visibleRequirement: new TemporaryBattleRequirement('Galarian Articuno 2'), +}); +TemporaryBattleList['Galarian Zapdos 1'] = new TemporaryBattle('Galarian Zapdos 1', [new GymPokemon('Galarian Zapdos', 2746123804, 100)], 'Galarian Zapdos fled to elsewhere in the Wild Area.', [new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 3)], undefined, { + hideTrainer: true, + displayName: 'Galarian Zapdos', + returnTown: 'Motostoke', + imageName: '../pokemon/145.01', +}); +TemporaryBattleList['Galarian Zapdos 2'] = new TemporaryBattle('Galarian Zapdos 2', [new GymPokemon('Galarian Zapdos', 2840817728, 100)], 'Galarian Zapdos fled to elsewhere in the Wild Area.', [ + new TemporaryBattleRequirement('Galarian Zapdos 1'), + new RouteKillRequirement(10, GameConstants.Region.galar, 19), +], undefined, { + hideTrainer: true, + displayName: 'Galarian Zapdos', + returnTown: 'Dusty Bowl', + imageName: '../pokemon/145.01', + visibleRequirement: new TemporaryBattleRequirement('Galarian Zapdos 1'), +}); +TemporaryBattleList['Galarian Zapdos 3'] = new TemporaryBattle('Galarian Zapdos 3', [new GymPokemon('Galarian Zapdos', 2911838171, 100)], 'Galarian Zapdos fled to elsewhere in the Wild Area.', [ + new TemporaryBattleRequirement('Galarian Zapdos 2'), + new RouteKillRequirement(10, GameConstants.Region.galar, 7), +], undefined, { + hideTrainer: true, + displayName: 'Galarian Zapdos', + returnTown: 'Motostoke', + imageName: '../pokemon/145.01', + visibleRequirement: new TemporaryBattleRequirement('Galarian Zapdos 2'), +}); +TemporaryBattleList['Galarian Moltres 1'] = new TemporaryBattle('Galarian Moltres 1', [new GymPokemon('Galarian Moltres', 2746123804, 100)], 'Galarian Moltres fled to elsewhere in the Isle of Armor.', [ + new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 3), + new RouteKillRequirement(10, GameConstants.Region.galar, 37), +], undefined, { + hideTrainer: true, + displayName: 'Galarian Moltres', + returnTown: 'Courageous Cavern', + imageName: '../pokemon/146.01', + visibleRequirement: new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 3), +}); +TemporaryBattleList['Galarian Moltres 2'] = new TemporaryBattle('Galarian Moltres 2', [new GymPokemon('Galarian Moltres', 2840817728, 100)], 'Galarian Moltres fled to elsewhere in the Isle of Armor.', [ + new TemporaryBattleRequirement('Galarian Moltres 1'), + new RouteKillRequirement(10, GameConstants.Region.galar, 41), +], undefined, { + hideTrainer: true, + displayName: 'Galarian Moltres', + returnTown: 'Master Dojo', + imageName: '../pokemon/146.01', + visibleRequirement: new TemporaryBattleRequirement('Galarian Moltres 1'), +}); +TemporaryBattleList['Galarian Moltres 3'] = new TemporaryBattle('Galarian Moltres 3', [new GymPokemon('Galarian Moltres', 2911838171, 100)], 'Galarian Moltres fled to elsewhere in the Isle of Armor.', [ + new TemporaryBattleRequirement('Galarian Moltres 2'), + new RouteKillRequirement(10, GameConstants.Region.galar, 34), +], undefined, { + hideTrainer: true, + displayName: 'Galarian Moltres', + returnTown: 'Master Dojo', + imageName: '../pokemon/146.01', + visibleRequirement: new TemporaryBattleRequirement('Galarian Moltres 2'), +}); +TemporaryBattleList.Regigigas = new TemporaryBattle('Regigigas', [new GymPokemon('Regigigas', 2959185134, 100)], 'The ancient giant was defeated!', [new QuestLineStepCompletedRequirement('The Ancient Golems', 6)], [new QuestLineStepCompletedRequirement('The Ancient Golems', 7)], { + hideTrainer: true, + isTrainerBattle: false, + returnTown: 'Freezington', + imageName: '../pokemon/486', +}); +TemporaryBattleList['Max Raid Venusaur'] = new TemporaryBattle('Max Raid Venusaur', [new GymPokemon('Gigantamax Venusaur', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 33), new SeededDateSelectNRequirement(0, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Master Dojo', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Charizard'] = new TemporaryBattle('Max Raid Charizard', [new GymPokemon('Gigantamax Charizard', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new SeededDateSelectNRequirement(1, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Motostoke', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Blastoise'] = new TemporaryBattle('Max Raid Blastoise', [new GymPokemon('Gigantamax Blastoise', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 41), new SeededDateSelectNRequirement(2, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Master Dojo', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Butterfree'] = new TemporaryBattle('Max Raid Butterfree', [new GymPokemon('Gigantamax Butterfree', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 34), new SeededDateSelectNRequirement(3, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Master Dojo', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Pikachu'] = new TemporaryBattle('Max Raid Pikachu', [new GymPokemon('Gigantamax Pikachu', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 48), new SeededDateSelectNRequirement(4, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Freezington', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Meowth'] = new TemporaryBattle('Max Raid Meowth', [new GymPokemon('Gigantamax Meowth', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 54), new SeededDateSelectNRequirement(5, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Tunnel to the Top', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Machamp'] = new TemporaryBattle('Max Raid Machamp', [new GymPokemon('Gigantamax Machamp', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new SeededDateSelectNRequirement(6, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Motostoke', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Gengar'] = new TemporaryBattle('Max Raid Gengar', [new GymPokemon('Gigantamax Gengar', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 11), new SeededDateSelectNRequirement(7, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Motostoke', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Kingler'] = new TemporaryBattle('Max Raid Kingler', [new GymPokemon('Gigantamax Kingler', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 5), new SeededDateSelectNRequirement(8, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Motostoke', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Lapras'] = new TemporaryBattle('Max Raid Lapras', [new GymPokemon('Gigantamax Lapras', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 51), new SeededDateSelectNRequirement(9, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Roaring-Sea Caves', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Eevee'] = new TemporaryBattle('Max Raid Eevee', [new GymPokemon('Gigantamax Eevee', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new SeededDateSelectNRequirement(10, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Freezington', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Snorlax'] = new TemporaryBattle('Max Raid Snorlax', [new GymPokemon('Gigantamax Snorlax', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 53), new SeededDateSelectNRequirement(11, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Dyna Tree Hill', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Garbodor'] = new TemporaryBattle('Max Raid Garbodor', [new GymPokemon('Gigantamax Garbodor', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 38), new SeededDateSelectNRequirement(12, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Warm-Up Tunnel', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Rillaboom'] = new TemporaryBattle('Max Raid Rillaboom', [new GymPokemon('Gigantamax Rillaboom', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 35), new OneFromManyRequirement([new RouteKillRequirement(10, GameConstants.Region.galar, 34), new RouteKillRequirement(10, GameConstants.Region.galar, 40)]), new SeededDateSelectNRequirement(13, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Brawlers\' Cave', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Cinderace'] = new TemporaryBattle('Max Raid Cinderace', [new GymPokemon('Gigantamax Cinderace', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 40), new SeededDateSelectNRequirement(14, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Brawlers\' Cave', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Inteleon'] = new TemporaryBattle('Max Raid Inteleon', [new GymPokemon('Gigantamax Inteleon', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 43), new SeededDateSelectNRequirement(15, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Courageous Cavern', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Corviknight'] = new TemporaryBattle('Max Raid Corviknight', [new GymPokemon('Gigantamax Corviknight', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new SeededDateSelectNRequirement(16, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Professor Magnolia\'s House', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Orbeetle'] = new TemporaryBattle('Max Raid Orbeetle', [new GymPokemon('Gigantamax Orbeetle', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 21), new SeededDateSelectNRequirement(17, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Dusty Bowl', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Drednaw'] = new TemporaryBattle('Max Raid Drednaw', [new GymPokemon('Gigantamax Drednaw', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 8), new SeededDateSelectNRequirement(18, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Professor Magnolia\'s House', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Coalossal'] = new TemporaryBattle('Max Raid Coalossal', [new GymPokemon('Gigantamax Coalossal', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new SeededDateSelectNRequirement(19, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Motostoke', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Flapple'] = new TemporaryBattle('Max Raid Flapple', [new GymPokemon('Gigantamax Flapple', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 50), new SeededDateSelectNRequirement(20, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Roaring-Sea Caves', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Appletun'] = new TemporaryBattle('Max Raid Appletun', [new GymPokemon('Gigantamax Appletun', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 48), new SeededDateSelectNRequirement(21, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Rock Peak Ruins', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Sandaconda'] = new TemporaryBattle('Max Raid Sandaconda', [new GymPokemon('Gigantamax Sandaconda', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 39), new SeededDateSelectNRequirement(22, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Warm-Up Tunnel', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Toxtricity'] = new TemporaryBattle('Max Raid Toxtricity', [new GymPokemon('Gigantamax Toxtricity', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 36), new SeededDateSelectNRequirement(23, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Courageous Cavern', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Centiskorch'] = new TemporaryBattle('Max Raid Centiskorch', [new GymPokemon('Gigantamax Centiskorch', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new SeededDateSelectNRequirement(24, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Motostoke', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Hatterene'] = new TemporaryBattle('Max Raid Hatterene', [new GymPokemon('Gigantamax Hatterene', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 50), new SeededDateSelectNRequirement(25, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Roaring-Sea Caves', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Grimmsnarl'] = new TemporaryBattle('Max Raid Grimmsnarl', [new GymPokemon('Gigantamax Grimmsnarl', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 52), new SeededDateSelectNRequirement(26, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Roaring-Sea Caves', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Alcremie'] = new TemporaryBattle('Max Raid Alcremie', [new GymPokemon('Gigantamax Alcremie', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new SeededDateSelectNRequirement(27, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Dusty Bowl', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Copperajah'] = new TemporaryBattle('Max Raid Copperajah', [new GymPokemon('Gigantamax Copperajah', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 49), new SeededDateSelectNRequirement(28, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Iron Ruins', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Max Raid Duraludon'] = new TemporaryBattle('Max Raid Duraludon', [new GymPokemon('Gigantamax Duraludon', 3077552890, 70)], undefined, [new QuestLineStepCompletedRequirement('The Lair of Giants', 2), new RouteKillRequirement(10, GameConstants.Region.galar, 7), new SeededDateSelectNRequirement(29, 30, 10)], undefined, { + hideTrainer: true, + displayName: 'Max Raid', + returnTown: 'Professor Magnolia\'s House', + rewardFunction: () => ItemList.Wishing_Piece.gain(1), + resetDaily: true, +}); +TemporaryBattleList['Eternamax Eternatus'] = new TemporaryBattle('Eternamax Eternatus', [new GymPokemon('Eternamax Eternatus', 3148573341, 60)], 'Defeated again, Eternatus fled far to the south!', [new QuestLineStepCompletedRequirement('The Lair of Giants', 34)], undefined, { + hideTrainer: true, + imageName: '../pokemon/890.01', +}); +// Hisui Temporary Battles +TemporaryBattleList['Volo 1'] = new TemporaryBattle('Volo 1', [new GymPokemon('Togepi', 348526193, 5)], 'Moves, items... Use them well, and the world will open up to you!', [new DevelopmentRequirement()], undefined, { + displayName: 'Ginkgo Guild Member Volo', + imageName: 'Volo (Ginkgo)', +}); +TemporaryBattleList['Akari 1'] = new TemporaryBattle('Akari 1', [new GymPokemon('Pikachu', 348526193, 9)], 'You and your Pokémon seem completely in step with one another.', [new DevelopmentRequirement()], undefined, { + displayName: 'The Survey Corps\' Akari', + imageName: 'Akari', +}); +TemporaryBattleList['Warden Mai'] = new TemporaryBattle('Warden Mai', [new GymPokemon('Munchlax', 348526193, 10)], 'You really aren\'t one of the usual Galaxy buffoons if you could defeat my partner... Well fought, Munchlax.', [new DevelopmentRequirement()], undefined, { + imageName: 'Mai', +}); +TemporaryBattleList['Alpha Kricketune'] = new TemporaryBattle('Alpha Kricketune', [new GymPokemon('Kricketune', 2031393560, 12)], 'You defeated Kricketune!', [new DevelopmentRequirement()], undefined, { + isTrainerBattle: false, + hideTrainer: true, + imageName: '../pokemon/402', +}); +TemporaryBattleList['Warden Lian'] = new TemporaryBattle('Warden Lian', [new GymPokemon('Goomy', 348526193, 15)], 'H-how can this be...', [new DevelopmentRequirement()], undefined, { + imageName: 'Lian', +}); +TemporaryBattleList['Irida 1'] = new TemporaryBattle('Irida 1', [new GymPokemon('Glaceon', 348526193, 17)], 'I see now... Poké Balls are simply your tool of choice, not products of disregard for Pokémon. You still understand the Pokémon and trust them as partners. I feel better putting my trust in you now, I think.', [new DevelopmentRequirement()], undefined, { + displayName: 'Clan Leader Irida', + imageName: 'Irida', +}); +TemporaryBattleList['Lord of the Woods: Kleavor'] = new TemporaryBattle('Lord of the Woods: Kleavor', [new GymPokemon('Noble Kleavor', 2031393560, 18)], 'The golden light was dispelled from Kleavor, calming it.', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/900.01', +}); +TemporaryBattleList['Akari 2'] = new TemporaryBattle('Akari 2', [new GymPokemon('Pikachu', 348526193, 9)], 'Oops! I keep finding myself caught up in observing the way the Pokémon use their moves...', [new DevelopmentRequirement()], undefined, { + displayName: 'The Survey Corps\' Akari', + imageName: 'Akari', +}); +TemporaryBattleList['Volo 2'] = new TemporaryBattle('Volo 2', [ + new GymPokemon('Togepi', 348526193, 22), + new GymPokemon('Gible', 348526193, 22), +], 'Oh, my! You\'re quite adept at instructing your Pokémon in battle! My goodness, that was fun!', [new DevelopmentRequirement()], undefined, { + displayName: 'Ginkgo Guild Member Volo', + imageName: 'Volo (Ginkgo)', +}); +TemporaryBattleList['Coin 1'] = new TemporaryBattle('Coin 1', [new GymPokemon('Toxicroak', 348526193, 23)], 'I\'m not fond of this outcome, but at least it\'s still better than plowing fields for the Galaxy Team!', [new DevelopmentRequirement()], undefined, { + displayName: 'The Bandit Coin', + imageName: 'Coin', +}); +TemporaryBattleList.Ursaluna = new TemporaryBattle('Ursaluna', [new GymPokemon('Ursaluna', 2031393560, 26)], 'You defeated Ursaluna!', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/901', +}); +TemporaryBattleList['Lady of the Ridge: Lilligant'] = new TemporaryBattle('Lady of the Ridge: Lilligant', [new GymPokemon('Noble Lilligant', 2031393560, 30)], 'The golden light was dispelled from Lilligant, calming it.', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/549.02', +}); +TemporaryBattleList['Irida 2'] = new TemporaryBattle('Irida 2', [ + new GymPokemon('Eevee', 348526193, 15), + new GymPokemon('Glaceon', 348526193, 30), +], 'Ah, now I feel better! The world is vast...and I am small within it.', [new DevelopmentRequirement()], undefined, { + displayName: 'Clan Leader Irida', + imageName: 'Irida', +}); +TemporaryBattleList.Clover = new TemporaryBattle('Clover', [new GymPokemon('Abomasnow', 348526193, 35)], 'I don\'t get it! How\'d I lose?!', [new DevelopmentRequirement()], undefined, { + displayName: 'The Bandit Clover', +}); +TemporaryBattleList['Coin 2'] = new TemporaryBattle('Coin 2', [new GymPokemon('Toxicroak', 348526193, 34)], 'What a blithering mooncalf I am. How could I let myself lose...', [new TemporaryBattleRequirement('Clover')], undefined, { + displayName: 'The Bandit Coin', + imageName: 'Coin', +}); +TemporaryBattleList['Charm 1'] = new TemporaryBattle('Charm 1', [ + new GymPokemon('Rhydon', 348526193, 34), + new GymPokemon('Gengar', 348526193, 35), +], 'What a disgrace...', [new TemporaryBattleRequirement('Coin 2')], undefined, { + displayName: 'The Bandit Charm', + imageName: 'Charm', +}); +TemporaryBattleList['Lord of the Isles: Arcanine'] = new TemporaryBattle('Lord of the Isles: Arcanine', [new GymPokemon('Noble Arcanine', 2031393560, 36)], 'The golden light was dispelled from Arcanine, calming it.', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/59.02', +}); +TemporaryBattleList['Adaman 1'] = new TemporaryBattle('Adaman 1', [ + new GymPokemon('Eevee', 348526193, 18), + new GymPokemon('Leafeon', 348526193, 36), +], 'You see how good they are now, yes? No more sneering at them!', [new DevelopmentRequirement()], undefined, { + displayName: 'Clan Leader Adaman', + imageName: 'Adaman', +}); +TemporaryBattleList['Melli 1'] = new TemporaryBattle('Melli 1', [new GymPokemon('Skuntank', 348526193, 40)], 'Listen here! Neither I nor Skuntank admit defeat to you just yet-our challenge to you still stands!', [new DevelopmentRequirement()], undefined, { + displayName: 'Warden Melli', + imageName: 'Melli', +}); +TemporaryBattleList['Warden Ingo'] = new TemporaryBattle('Warden Ingo', [ + new GymPokemon('Machoke', 348526193, 41), + new GymPokemon('Tangela', 348526193, 41), + new GymPokemon('Gliscor', 348526193, 42), +], 'Bravo! Excellent! Your talent has brought you to the destination called Victory! Now, allow me to call Sneasler...', [new DevelopmentRequirement()], undefined, { + imageName: 'Ingo', +}); +TemporaryBattleList['Melli 2'] = new TemporaryBattle('Melli 2', [ + new GymPokemon('Skorupi', 348526193, 22), + new GymPokemon('Zubat', 348526193, 22), + new GymPokemon('Skuntank', 348526193, 44), +], 'Let\'s make one thing clear: I didn\'t lose! You may have won...but there\'s a difference!', [new DevelopmentRequirement()], undefined, { + displayName: 'Warden Melli', + imageName: 'Melli', +}); +TemporaryBattleList['Lord of the Hollow: Electrode'] = new TemporaryBattle('Lord of the Hollow: Electrode', [new GymPokemon('Noble Electrode', 2031393560, 46)], 'The golden light was dispelled from Electrode, calming it.', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/101.02', +}); +TemporaryBattleList['Warden Gaeric'] = new TemporaryBattle('Warden Gaeric', [ + new GymPokemon('Froslass', 348526193, 24), + new GymPokemon('Glalie', 348526193, 48), +], 'Outstanding! I\'m tough as an iceberg, but you smashed me through and through!', [new DevelopmentRequirement()], undefined, { + imageName: 'Gaeric', +}); +TemporaryBattleList['Warden Sabi'] = new TemporaryBattle('Warden Sabi', [ + new GymPokemon('Electivire', 348526193, 30), + new GymPokemon('Magmortar', 348526193, 30), + new GymPokemon('Rhyperior', 348526193, 50), +], 'Wow, you caught us AND you beat us. You\'ve won all our games so far! But Braviary still wants to get to know you even better. Up to the roof we go! All right, Braviary! Why not test out their strength for yourself?', [new DevelopmentRequirement()], undefined, { + imageName: 'Sabi', +}); +TemporaryBattleList['Hisuian Braviary'] = new TemporaryBattle('Hisuian Braviary', [new GymPokemon('Hisuian Braviary', 2031393560, 54)], 'You defeated Braviary!', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/628.01', +}); +TemporaryBattleList['Lord of the Tundra: Avalugg'] = new TemporaryBattle('Lord of the Tundra: Avalugg', [new GymPokemon('Noble Avalugg', 2031393560, 56)], 'The golden light was dispelled from Avalugg, calming it.', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/713.02', +}); +TemporaryBattleList.Beni = new TemporaryBattle('Beni', [ + new GymPokemon('Mismagius', 348526193, 59), + new GymPokemon('Sneasler', 348526193, 59), + new GymPokemon('Gardevoir', 348526193, 60), + new GymPokemon('Gallade', 348526193, 60), +], 'It seems my ninja techniques will soon be consigned to history...', [new DevelopmentRequirement()], undefined, { + displayName: 'The Galaxy Team\'s Beni', + imageName: 'Beni (Ninja)', +}); +TemporaryBattleList['Charm 2'] = new TemporaryBattle('Charm 2', [ + new GymPokemon('Rhydon', 348526193, 61), + new GymPokemon('Gengar', 348526193, 62), +], 'Well, you are rather formidable...', [new TemporaryBattleRequirement('Coin 2')], undefined, { + displayName: 'The Bandit Charm', + imageName: 'Charm', +}); +TemporaryBattleList['Dialga (Origin)'] = new TemporaryBattle('Dialga (Origin)', [new GymPokemon('Dialga (Origin)', 2031393560, 65)], 'Dialga was captured in the Origin Ball and returned to its base form!', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/483.01', +}); +TemporaryBattleList['Palkia (Origin)'] = new TemporaryBattle('Palkia (Origin)', [new GymPokemon('Palkia (Origin)', 2031393560, 65)], 'Palkia was captured in the Origin Ball and returned to its base form!', [new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/484.01', +}); +TemporaryBattleList['The Galaxy Team\'s Kamado'] = new TemporaryBattle('The Galaxy Team\'s Kamado', [ + new GymPokemon('Golem', 348526193, 65), + new GymPokemon('Clefable', 348526193, 65), + new GymPokemon('Hisuian Braviary', 348526193, 65), + new GymPokemon('Heracross', 348526193, 65), + new GymPokemon('Snorlax', 348526193, 66), +], 'Even frightful creatures like Pokémon can become powerful allies...', [new DevelopmentRequirement()]); +TemporaryBattleList['Adaman 2'] = new TemporaryBattle('Adaman 2', [ + new GymPokemon('Umbreon', 348526193, 32), + new GymPokemon('Vaporeon', 348526193, 32), + new GymPokemon('Leafeon', 348526193, 64), +], 'You\'re really something...and I\'m a man of my word. So, here\'s that treasure.', [new DevelopmentRequirement()], undefined, { + displayName: 'Clan Leader Adaman', + imageName: 'Adaman', +}); +TemporaryBattleList['Irida 3'] = new TemporaryBattle('Irida 3', [ + new GymPokemon('Espeon', 348526193, 32), + new GymPokemon('Flareon', 348526193, 32), + new GymPokemon('Glaceon', 348526193, 64), +], 'I wonder... Are there people even stronger than you out in the world, with Pokémon stronger than yours? I\'ll just have to find out for myself I suppose! Here! The treasure I promised you.', [new DevelopmentRequirement()], undefined, { + displayName: 'Clan Leader Irida', + imageName: 'Irida', +}); +TemporaryBattleList['Volo 3'] = new TemporaryBattle('Volo 3', [ + new GymPokemon('Giratina (Altered)', 348526193, 70), + new GymPokemon('Giratina (Origin)', 348526193, 70), +], 'Turning tail and running? From this puny HUMAN? Pathetic! I was the one to feed you the power you needed so that you could take on Arceus! I was the one who gave you the chance to claw open that space-time rift, driving the deity of space and time mad so that you could drag the creator out from hiding!', [new DevelopmentRequirement()], undefined, { + displayName: 'Pokémon Wielder Volo', + imageName: 'Volo', +}); +TemporaryBattleList['Tornadus 1'] = new TemporaryBattle('Tornadus 1', [new GymPokemon('Tornadus', 2031393560, 70)], undefined, [new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 0)], undefined, { + hideTrainer: true, + imageName: '../pokemon/641', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Tornadus 2'] = new TemporaryBattle('Tornadus 2', [new GymPokemon('Tornadus', 2031393560, 70)], undefined, [new TemporaryBattleRequirement('Tornadus 1')], undefined, { + hideTrainer: true, + imageName: '../pokemon/641', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Tornadus 3'] = new TemporaryBattle('Tornadus 3', [new GymPokemon('Tornadus', 2031393560, 70)], undefined, [new TemporaryBattleRequirement('Tornadus 2')], [new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 1), new TemporaryBattleRequirement('Tornadus 3')], { + isTrainerBattle: false, + hideTrainer: true, + imageName: '../pokemon/641', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Thundurus 1'] = new TemporaryBattle('Thundurus 1', [new GymPokemon('Thundurus', 2031393560, 70)], undefined, [new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 0)], undefined, { + hideTrainer: true, + imageName: '../pokemon/642', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Thundurus 2'] = new TemporaryBattle('Thundurus 2', [new GymPokemon('Thundurus', 2031393560, 70)], undefined, [new TemporaryBattleRequirement('Thundurus 1')], undefined, { + hideTrainer: true, + imageName: '../pokemon/642', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Thundurus 3'] = new TemporaryBattle('Thundurus 3', [new GymPokemon('Thundurus', 2031393560, 70)], undefined, [new TemporaryBattleRequirement('Thundurus 2')], [new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 1), new TemporaryBattleRequirement('Thundurus 3')], { + isTrainerBattle: false, + hideTrainer: true, + imageName: '../pokemon/642', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Landorus 1'] = new TemporaryBattle('Landorus 1', [new GymPokemon('Landorus', 2031393560, 70)], undefined, [new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 0)], undefined, { + hideTrainer: true, + imageName: '../pokemon/645', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Landorus 2'] = new TemporaryBattle('Landorus 2', [new GymPokemon('Landorus', 2031393560, 70)], undefined, [new TemporaryBattleRequirement('Landorus 1')], undefined, { + hideTrainer: true, + imageName: '../pokemon/645', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Landorus 3'] = new TemporaryBattle('Landorus 3', [new GymPokemon('Landorus', 2031393560, 70)], undefined, [new TemporaryBattleRequirement('Landorus 2')], [new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 1), new TemporaryBattleRequirement('Landorus 3')], { + isTrainerBattle: false, + hideTrainer: true, + imageName: '../pokemon/645', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Enamorus 1'] = new TemporaryBattle('Enamorus 1', [new GymPokemon('Enamorus', 2031393560, 65)], undefined, [new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 2)], undefined, { + hideTrainer: true, + imageName: '../pokemon/905', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Enamorus 2'] = new TemporaryBattle('Enamorus 2', [new GymPokemon('Enamorus', 2031393560, 65)], undefined, [new TemporaryBattleRequirement('Enamorus 1')], undefined, { + hideTrainer: true, + imageName: '../pokemon/905', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList['Enamorus 3'] = new TemporaryBattle('Enamorus 3', [new GymPokemon('Enamorus', 2031393560, 65)], 'Before you could attempt to capture it, Enamorus fled to roam the region!', [new TemporaryBattleRequirement('Enamorus 2')], undefined, { + hideTrainer: true, + imageName: '../pokemon/905', + returnTown: 'Ancient Retreat', +}); +TemporaryBattleList.Arceus = new TemporaryBattle('Arceus', [new GymPokemon('Arceus (Normal)', 2031393560, 75)], 'Arceus granted you a part of its self, and the Legend Plate!', //That text needs changed, not sure what to, though, +[new DevelopmentRequirement()], undefined, { + hideTrainer: true, + imageName: '../pokemon/493', +}); +// Paldea Temporary Battles +TemporaryBattleList['Paradise Protection Protocol'] = new TemporaryBattle('Paradise Protection Protocol', [ + new GymPokemon('Koraidon', 710987746, 70), + new GymPokemon('Miraidon', 710987746, 70), +], 'The Guardians of Paradise were defeated!', [ + new GymBadgeRequirement(BadgeEnums.Scarlet), + new GymBadgeRequirement(BadgeEnums.Violet), +]); +TemporaryBattleList; +/// +/// +class TemporaryBattleRunner { + static startBattle(battle) { + var _a; + this.running(false); + this.battleObservable(battle); + App.game.gameState = GameConstants.GameState.idle; + DungeonRunner.timeBonus(FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute)); + this.timeLeft(GameConstants.TEMP_BATTLE_TIME * this.timeBonus()); + this.timeLeftPercentage(100); + player.route = 0; + Battle.route = 0; + Battle.catching(!((_a = battle.optionalArgs.isTrainerBattle) !== null && _a !== void 0 ? _a : true)); + TemporaryBattleBattle.battle = battle; + TemporaryBattleBattle.totalPokemons(battle.getPokemonList().length); + TemporaryBattleBattle.index(0); + TemporaryBattleBattle.generateNewEnemy(); + App.game.gameState = GameConstants.GameState.temporaryBattle; + this.running(true); + this.resetGif(); + setTimeout(() => { + this.hideGif(); + }, GameConstants.GYM_COUNTDOWN); + } + static hideGif() { + $('#temporaryBattleGoContainer').hide(); + } + static resetGif() { + if (!Settings.getSetting('showGymGoAnimation').value) { + return; + } + $('#temporaryBattleGoContainer').show(); + setTimeout(() => { + $('#temporaryBattleGo').attr('src', 'assets/gifs/go.gif'); + }, 0); + } + static tick() { + if (!this.running()) { + return; + } + if (this.timeLeft() < 0) { + this.battleLost(); + } + this.timeLeft(this.timeLeft() - GameConstants.TEMP_BATTLE_TICK); + this.timeLeftPercentage(Math.floor(this.timeLeft() / (GameConstants.TEMP_BATTLE_TIME * FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute)) * 100)); + const currentFluteBonus = FluteEffectRunner.getFluteMultiplier(GameConstants.FluteItemType.Time_Flute); + if (currentFluteBonus != this.timeBonus()) { + if (currentFluteBonus > this.timeBonus()) { + if (this.timeBonus() === 1) { + this.timeBonus(currentFluteBonus); + this.timeLeft(this.timeLeft() * this.timeBonus()); + } + else { + this.timeLeft(this.timeLeft() / this.timeBonus()); + this.timeBonus(currentFluteBonus); + this.timeLeft(this.timeLeft() * this.timeBonus()); + } + } + else { + this.timeLeft(this.timeLeft() / this.timeBonus()); + this.timeBonus(currentFluteBonus); + } + } + } + static battleLost() { + if (this.running()) { + this.running(false); + Notifier.notify({ + message: `It appears you are not strong enough to defeat ${TemporaryBattleBattle.battle.getDisplayName()}.`, + type: NotificationConstants.NotificationOption.danger, + }); + player.town = TemporaryBattleBattle.battle.getTown(); + App.game.gameState = GameConstants.GameState.town; + } + } + static battleWon(battle) { + var _a, _b, _c, _d; + if (this.running()) { + this.running(false); + if (App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex(battle.name)]() == 0) { + (_b = (_a = battle.optionalArgs).firstTimeRewardFunction) === null || _b === void 0 ? void 0 : _b.call(_a); + if (battle.defeatMessage) { + $('#temporaryBattleWonModal').modal('show'); + } + } + (_d = (_c = battle.optionalArgs).rewardFunction) === null || _d === void 0 ? void 0 : _d.call(_c); + GameHelper.incrementObservable(App.game.statistics.temporaryBattleDefeated[GameConstants.getTemporaryBattlesIndex(battle.name)]); + player.town = battle.getTown(); + App.game.gameState = GameConstants.GameState.town; + } + } + static finalPokemon() { + return TemporaryBattleBattle.pokemonsUndefeatedComputable() === 1; + } + static getEnvironmentArea() { + const battle = TemporaryBattleRunner.battleObservable(); + return battle === null || battle === void 0 ? void 0 : battle.optionalArgs.environment; + } + static getBattleBackgroundImage() { + var _a, _b, _c; + const battle = TemporaryBattleRunner.battleObservable(); + return (_c = (_a = battle === null || battle === void 0 ? void 0 : battle.optionalArgs.battleBackground) !== null && _a !== void 0 ? _a : (_b = battle === null || battle === void 0 ? void 0 : battle.parent) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : battle === null || battle === void 0 ? void 0 : battle.optionalArgs.returnTown; + } +} +TemporaryBattleRunner.timeLeft = ko.observable(GameConstants.TEMP_BATTLE_TIME); +TemporaryBattleRunner.timeLeftPercentage = ko.observable(100); +TemporaryBattleRunner.timeBonus = ko.observable(1); +TemporaryBattleRunner.battleObservable = ko.observable(); +TemporaryBattleRunner.running = ko.observable(false); +TemporaryBattleRunner.timeLeftSeconds = ko.pureComputed(() => { + return (Math.ceil(TemporaryBattleRunner.timeLeft() / 100) / 10).toFixed(1); +}); +/* Uncomment once Z-Moves are ready +document.addEventListener('DOMContentLoaded', () => { + $('#temporaryBattleWonModal').on('hidden.bs.modal', () => { + if (TemporaryBattleBattle.battle.name === 'Hau 2') { + KeyItemController.showGainModal(KeyItemType['Z-Power_Ring']); + } + }); +});*/ +class BattleCafe extends TownContent { + constructor() { + super([new ObtainedPokemonRequirement('Milcery')]); + } + cssClass() { + return 'btn btn-info'; + } + onclick() { + $('#battleCafeModal').modal('show'); + } + text() { + return 'Battle Café'; + } +} +class BattleCafeSaveObject { + constructor() { + this.saveKey = 'BattleCafe'; + } + toJSON() { + return { + spinsLeft: BattleCafeController.spinsLeft(), + }; + } + fromJSON(json) { + var _a; + if (!json) { + return; + } + BattleCafeController.spinsLeft((_a = json.spinsLeft) !== null && _a !== void 0 ? _a : BattleCafeController.baseDailySpins); + } +} +class BattleCafeController { + static spinsPerDay() { + // Give additional spins for each sweet type completed, shiny, and resistant + let spins = this.baseDailySpins; + const sweetStatus = GameHelper.enumStrings(GameConstants.AlcremieSweet) + .map((s) => ({ + caught: BattleCafeController.getCaughtStatus(GameConstants.AlcremieSweet[s])(), + pokerus: BattleCafeController.getPokerusStatus(GameConstants.AlcremieSweet[s])(), + })); + // Caught + spins += sweetStatus.filter((s) => s.caught >= CaughtStatus.Caught).length; + // Caught Shiny + spins += sweetStatus.filter((s) => s.caught == CaughtStatus.CaughtShiny).length; + // Resistant + spins += sweetStatus.filter((s) => s.pokerus == GameConstants.Pokerus.Resistant).length; + return spins; + } + static spin(clockwise) { + if (!BattleCafeController.canSpin()) { + return; + } + BattleCafeController.clockwise(clockwise); + BattleCafeController.isSpinning(true); + const spinTime = +$('#battleCafeDuration').val(); + const sweet = BattleCafeController.selectedSweet(); + setTimeout(() => { + BattleCafeController.isSpinning(false); + BattleCafeController.unlockAlcremie(clockwise, spinTime, sweet); + BattleCafeController.spinsLeft(BattleCafeController.spinsLeft() - 1); + BattleCafeController.getPrice(sweet).forEach(b => GameHelper.incrementObservable(App.game.farming.berryList[b.berry], b.amount * -1)); + }, spinTime * 1000); + } + static unlockAlcremie(clockwise, spinTime, sweet) { + let spin; + if (spinTime == 3600) { + (new PokemonItem('Milcery (Cheesy)', 0)).gain(1); + return; + } + if (DayCycle.currentDayCyclePart() === DayCyclePart.Dusk && !clockwise && spinTime > 10) { + spin = GameConstants.AlcremieSpins.at5Above10; + } + else if ([DayCyclePart.Night, DayCyclePart.Dawn].includes(DayCycle.currentDayCyclePart())) { + if (clockwise && spinTime < 5) { + spin = GameConstants.AlcremieSpins.nightClockwiseBelow5; + } + else if (clockwise && spinTime >= 5) { + spin = GameConstants.AlcremieSpins.nightClockwiseAbove5; + } + else if (!clockwise && spinTime < 5) { + spin = GameConstants.AlcremieSpins.nightCounterclockwiseBelow5; + } + else if (!clockwise && spinTime >= 5) { + spin = GameConstants.AlcremieSpins.nightCounterclockwiseAbove5; + } + } + else { // Is day + if (clockwise && spinTime < 5) { + spin = GameConstants.AlcremieSpins.dayClockwiseBelow5; + } + else if (clockwise && spinTime >= 5) { + spin = GameConstants.AlcremieSpins.dayClockwiseAbove5; + } + else if (!clockwise && spinTime < 5) { + spin = GameConstants.AlcremieSpins.dayCounterclockwiseBelow5; + } + else if (!clockwise && spinTime >= 5) { + spin = GameConstants.AlcremieSpins.dayCounterclockwiseAbove5; + } + } + BattleCafeController.evolutions[sweet][spin].gain(1); + } + static canSpin() { + if (BattleCafeController.selectedSweet() == undefined) { + Notifier.notify({ + message: 'No sweet selected.', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + if (BattleCafeController.isSpinning()) { + Notifier.notify({ + message: 'Already spinning.', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + if (BattleCafeController.spinsLeft() < 1) { + Notifier.notify({ + message: 'No spins left today.', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + if (+$('#battleCafeDuration').val() > 20 && +$('#battleCafeDuration').val() != 3600) { + Notifier.notify({ + message: 'Can\'t spin for more than 20 seconds, unless...', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + if (+$('#battleCafeDuration').val() < 1) { + Notifier.notify({ + message: 'It only counts as spinning, if you spin for some time...', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + if (!BattleCafeController.canBuySweet(BattleCafeController.selectedSweet())()) { + Notifier.notify({ + message: 'Not enough berries for this sweet.', + type: NotificationConstants.NotificationOption.danger, + }); + return false; + } + return true; + } + static canBuySweet(sweet) { + return ko.pureComputed(() => { + return BattleCafeController.getPrice(sweet).every(b => { + if (App.game.farming.berryList[b.berry]() < b.amount) { + return false; + } + return true; + }); + }); + } + static getCaughtStatus(sweet) { + return ko.pureComputed(() => { + return Math.min(...Object.values(BattleCafeController.evolutions[sweet]).map((pokemon) => pokemon.getCaughtStatus())); + }); + } + static getPokerusStatus(sweet) { + return ko.pureComputed(() => { + return Math.min(...Object.values(BattleCafeController.evolutions[sweet]).map((pokemon) => pokemon.getPokerusStatus())); + }); + } + static getPrice(sweet) { + switch (sweet) { + // should be easy to do, without touching the farm + case GameConstants.AlcremieSweet['Strawberry Sweet']: + return [ + { berry: BerryType.Cheri, amount: 500 }, + { berry: BerryType.Leppa, amount: 500 }, + { berry: BerryType.Razz, amount: 50 }, + ]; + // max gen 2 + case GameConstants.AlcremieSweet['Clover Sweet']: + return [ + { berry: BerryType.Wepear, amount: 1000 }, + { berry: BerryType.Aguav, amount: 2000 }, + { berry: BerryType.Lum, amount: 10 }, + ]; + // max gen 3 + case GameConstants.AlcremieSweet['Star Sweet']: + return [ + { berry: BerryType.Pinap, amount: 2000 }, + { berry: BerryType.Grepa, amount: 100 }, + { berry: BerryType.Nomel, amount: 50 }, + ]; + // max gen 4 + case GameConstants.AlcremieSweet['Berry Sweet']: + return [ + { berry: BerryType.Passho, amount: 1000 }, + { berry: BerryType.Yache, amount: 75 }, + { berry: BerryType.Coba, amount: 150 }, + ]; + // max gen 4 + case GameConstants.AlcremieSweet['Ribbon Sweet']: + return [ + { berry: BerryType.Bluk, amount: 3000 }, + { berry: BerryType.Pamtre, amount: 50 }, + { berry: BerryType.Payapa, amount: 100 }, + ]; + // max gen 5 + case GameConstants.AlcremieSweet['Flower Sweet']: + return [ + { berry: BerryType.Figy, amount: 15000 }, + { berry: BerryType.Iapapa, amount: 20000 }, + { berry: BerryType.Liechi, amount: 3 }, + ]; + // max gen 5 + case GameConstants.AlcremieSweet['Love Sweet']: + return [ + { berry: BerryType.Haban, amount: 200 }, + { berry: BerryType.Roseli, amount: 700 }, + { berry: BerryType.Lansat, amount: 5 }, + ]; + } + } + static calcMaxSpins(sweet) { + const maxSpins = BattleCafeController.getPrice(sweet) + .map((cost) => Math.floor(App.game.farming.berryList[cost.berry]() / cost.amount)); + return Math.min(...maxSpins); + } +} +BattleCafeController.selectedSweet = ko.observable(undefined); +BattleCafeController.baseDailySpins = 3; +BattleCafeController.spinsLeft = ko.observable(BattleCafeController.baseDailySpins); +BattleCafeController.isSpinning = ko.observable(false); +BattleCafeController.clockwise = ko.observable(false); +BattleCafeController.evolutions = { + [GameConstants.AlcremieSweet['Strawberry Sweet']]: { + [GameConstants.AlcremieSpins.dayClockwiseBelow5]: new PokemonItem('Alcremie (Strawberry Vanilla)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseBelow5]: new PokemonItem('Alcremie (Strawberry Ruby Cream)'), + [GameConstants.AlcremieSpins.nightClockwiseBelow5]: new PokemonItem('Alcremie (Strawberry Matcha)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseAbove5]: new PokemonItem('Alcremie (Strawberry Mint)'), + [GameConstants.AlcremieSpins.nightClockwiseAbove5]: new PokemonItem('Alcremie (Strawberry Lemon)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseBelow5]: new PokemonItem('Alcremie (Strawberry Salted)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseAbove5]: new PokemonItem('Alcremie (Strawberry Ruby Swirl)'), + [GameConstants.AlcremieSpins.dayClockwiseAbove5]: new PokemonItem('Alcremie (Strawberry Caramel)'), + [GameConstants.AlcremieSpins.at5Above10]: new PokemonItem('Alcremie (Strawberry Rainbow)'), + }, + [GameConstants.AlcremieSweet['Love Sweet']]: { + [GameConstants.AlcremieSpins.dayClockwiseBelow5]: new PokemonItem('Alcremie (Love Vanilla)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseBelow5]: new PokemonItem('Alcremie (Love Ruby Cream)'), + [GameConstants.AlcremieSpins.nightClockwiseBelow5]: new PokemonItem('Alcremie (Love Matcha)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseAbove5]: new PokemonItem('Alcremie (Love Mint)'), + [GameConstants.AlcremieSpins.nightClockwiseAbove5]: new PokemonItem('Alcremie (Love Lemon)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseBelow5]: new PokemonItem('Alcremie (Love Salted)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseAbove5]: new PokemonItem('Alcremie (Love Ruby Swirl)'), + [GameConstants.AlcremieSpins.dayClockwiseAbove5]: new PokemonItem('Alcremie (Love Caramel)'), + [GameConstants.AlcremieSpins.at5Above10]: new PokemonItem('Alcremie (Love Rainbow)'), + }, + [GameConstants.AlcremieSweet['Berry Sweet']]: { + [GameConstants.AlcremieSpins.dayClockwiseBelow5]: new PokemonItem('Alcremie (Berry Vanilla)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseBelow5]: new PokemonItem('Alcremie (Berry Ruby Cream)'), + [GameConstants.AlcremieSpins.nightClockwiseBelow5]: new PokemonItem('Alcremie (Berry Matcha)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseAbove5]: new PokemonItem('Alcremie (Berry Mint)'), + [GameConstants.AlcremieSpins.nightClockwiseAbove5]: new PokemonItem('Alcremie (Berry Lemon)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseBelow5]: new PokemonItem('Alcremie (Berry Salted)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseAbove5]: new PokemonItem('Alcremie (Berry Ruby Swirl)'), + [GameConstants.AlcremieSpins.dayClockwiseAbove5]: new PokemonItem('Alcremie (Berry Caramel)'), + [GameConstants.AlcremieSpins.at5Above10]: new PokemonItem('Alcremie (Berry Rainbow)'), + }, + [GameConstants.AlcremieSweet['Clover Sweet']]: { + [GameConstants.AlcremieSpins.dayClockwiseBelow5]: new PokemonItem('Alcremie (Clover Vanilla)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseBelow5]: new PokemonItem('Alcremie (Clover Ruby Cream)'), + [GameConstants.AlcremieSpins.nightClockwiseBelow5]: new PokemonItem('Alcremie (Clover Matcha)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseAbove5]: new PokemonItem('Alcremie (Clover Mint)'), + [GameConstants.AlcremieSpins.nightClockwiseAbove5]: new PokemonItem('Alcremie (Clover Lemon)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseBelow5]: new PokemonItem('Alcremie (Clover Salted)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseAbove5]: new PokemonItem('Alcremie (Clover Ruby Swirl)'), + [GameConstants.AlcremieSpins.dayClockwiseAbove5]: new PokemonItem('Alcremie (Clover Caramel)'), + [GameConstants.AlcremieSpins.at5Above10]: new PokemonItem('Alcremie (Clover Rainbow)'), + }, + [GameConstants.AlcremieSweet['Flower Sweet']]: { + [GameConstants.AlcremieSpins.dayClockwiseBelow5]: new PokemonItem('Alcremie (Flower Vanilla)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseBelow5]: new PokemonItem('Alcremie (Flower Ruby Cream)'), + [GameConstants.AlcremieSpins.nightClockwiseBelow5]: new PokemonItem('Alcremie (Flower Matcha)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseAbove5]: new PokemonItem('Alcremie (Flower Mint)'), + [GameConstants.AlcremieSpins.nightClockwiseAbove5]: new PokemonItem('Alcremie (Flower Lemon)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseBelow5]: new PokemonItem('Alcremie (Flower Salted)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseAbove5]: new PokemonItem('Alcremie (Flower Ruby Swirl)'), + [GameConstants.AlcremieSpins.dayClockwiseAbove5]: new PokemonItem('Alcremie (Flower Caramel)'), + [GameConstants.AlcremieSpins.at5Above10]: new PokemonItem('Alcremie (Flower Rainbow)'), + }, + [GameConstants.AlcremieSweet['Star Sweet']]: { + [GameConstants.AlcremieSpins.dayClockwiseBelow5]: new PokemonItem('Alcremie (Star Vanilla)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseBelow5]: new PokemonItem('Alcremie (Star Ruby Cream)'), + [GameConstants.AlcremieSpins.nightClockwiseBelow5]: new PokemonItem('Alcremie (Star Matcha)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseAbove5]: new PokemonItem('Alcremie (Star Mint)'), + [GameConstants.AlcremieSpins.nightClockwiseAbove5]: new PokemonItem('Alcremie (Star Lemon)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseBelow5]: new PokemonItem('Alcremie (Star Salted)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseAbove5]: new PokemonItem('Alcremie (Star Ruby Swirl)'), + [GameConstants.AlcremieSpins.dayClockwiseAbove5]: new PokemonItem('Alcremie (Star Caramel)'), + [GameConstants.AlcremieSpins.at5Above10]: new PokemonItem('Alcremie (Star Rainbow)'), + }, + [GameConstants.AlcremieSweet['Ribbon Sweet']]: { + [GameConstants.AlcremieSpins.dayClockwiseBelow5]: new PokemonItem('Alcremie (Ribbon Vanilla)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseBelow5]: new PokemonItem('Alcremie (Ribbon Ruby Cream)'), + [GameConstants.AlcremieSpins.nightClockwiseBelow5]: new PokemonItem('Alcremie (Ribbon Matcha)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseAbove5]: new PokemonItem('Alcremie (Ribbon Mint)'), + [GameConstants.AlcremieSpins.nightClockwiseAbove5]: new PokemonItem('Alcremie (Ribbon Lemon)'), + [GameConstants.AlcremieSpins.nightCounterclockwiseBelow5]: new PokemonItem('Alcremie (Ribbon Salted)'), + [GameConstants.AlcremieSpins.dayCounterclockwiseAbove5]: new PokemonItem('Alcremie (Ribbon Ruby Swirl)'), + [GameConstants.AlcremieSpins.dayClockwiseAbove5]: new PokemonItem('Alcremie (Ribbon Caramel)'), + [GameConstants.AlcremieSpins.at5Above10]: new PokemonItem('Alcremie (Ribbon Rainbow)'), + }, +}; +class DreamOrbLoot { + constructor(item, weight) { + this.item = item; + this.weight = weight; + } +} +class DreamOrb { + constructor(color, requirement, items) { + this.color = color; + this.requirement = requirement; + this.items = items; + this.amount = ko.observable(0); + } +} +class DreamOrbController { + constructor() { + this.amountSelected = ko.observable(1); + this.amountOpened = ko.observable(0); + this.itemsReceived = ko.observableArray(); + this.orbs = [ + new DreamOrb('Pink', undefined, [ + new DreamOrbLoot({ type: ItemType.item, id: 'Shuckle' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Swablu' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Riolu' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Munna' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Tornadus (Therian)' }, 0.075), + new DreamOrbLoot({ type: ItemType.item, id: 'Sun_stone' }, 0.15), + new DreamOrbLoot({ type: ItemType.item, id: 'Water_stone' }, 0.15), + new DreamOrbLoot({ type: ItemType.item, id: 'Revive' }, 0.125), + ]), + new DreamOrb('Green', new ObtainedPokemonRequirement('Tornadus (Therian)'), [ + new DreamOrbLoot({ type: ItemType.item, id: 'Drifloon' }, 0.15), + new DreamOrbLoot({ type: ItemType.item, id: 'Bronzor' }, 0.15), + new DreamOrbLoot({ type: ItemType.item, id: 'Sigilyph' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Thundurus (Therian)' }, 0.075), + new DreamOrbLoot({ type: ItemType.item, id: 'Red_shard' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Blue_shard' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Yellow_shard' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Green_shard' }, 0.125), + ]), + new DreamOrb('Orange', new ObtainedPokemonRequirement('Thundurus (Therian)'), [ + new DreamOrbLoot({ type: ItemType.item, id: 'Staryu' }, 0.1), + new DreamOrbLoot({ type: ItemType.item, id: 'Ralts' }, 0.1), + new DreamOrbLoot({ type: ItemType.item, id: 'Rotom' }, 0.1), + new DreamOrbLoot({ type: ItemType.item, id: 'Landorus (Therian)' }, 0.075), + new DreamOrbLoot({ type: ItemType.item, id: 'Fire_stone' }, 0.2), + new DreamOrbLoot({ type: ItemType.item, id: 'Protein' }, 0.091), + new DreamOrbLoot({ type: ItemType.item, id: 'Calcium' }, 0.092), + new DreamOrbLoot({ type: ItemType.item, id: 'Carbos' }, 0.092), + new DreamOrbLoot({ type: ItemType.item, id: 'Rare_Candy' }, 0.15), + ]), + new DreamOrb('Blue', new MultiRequirement([new ObtainedPokemonRequirement('Landorus (Therian)'), new ObtainedPokemonRequirement('Enamorus')]), [ + new DreamOrbLoot({ type: ItemType.item, id: 'Igglybuff' }, 0.2), + new DreamOrbLoot({ type: ItemType.item, id: 'Smoochum' }, 0.2), + new DreamOrbLoot({ type: ItemType.item, id: 'Enamorus (Therian)' }, 0.05), + new DreamOrbLoot({ type: ItemType.item, id: 'Moon_stone' }, 0.1), + new DreamOrbLoot({ type: ItemType.item, id: 'Leaf_stone' }, 0.1), + new DreamOrbLoot({ type: ItemType.item, id: 'Thunder_stone' }, 0.1), + new DreamOrbLoot({ type: ItemType.item, id: 'Heart_scale' }, 0.125), + new DreamOrbLoot({ type: ItemType.item, id: 'Max_revive' }, 0.1), + ]), + ]; + this.saveKey = 'dream-orbs'; + this.selectedOrb = ko.observable(this.orbs[0]); + this.opening = ko.observable(false); + this.item = ko.observable(undefined); + } + open() { + if (this.opening()) { + return; + } + const selectedOrb = this.selectedOrb(); + if (!selectedOrb.amount()) { + Notifier.notify({ + message: 'No orbs left.', + type: NotificationConstants.NotificationOption.danger, + }); + return; + } + const amountToOpen = Math.min(this.amountSelected(), selectedOrb.amount()); + this.opening(true); + this.item(undefined); + Notifier.notify({ + sound: NotificationConstants.NotificationSound.General.dream_orb, + }); + setTimeout(() => { + const itemWeights = selectedOrb.items.map((i) => i.weight); + const items = {}; + for (let i = 0; i < amountToOpen; i++) { + const orbLoot = Rand.fromWeightedArray(selectedOrb.items, itemWeights); + items[orbLoot.item.id] ? + items[orbLoot.item.id].amount++ : + items[orbLoot.item.id] = { item: orbLoot.item, amount: 1 }; + if (i + 1 >= amountToOpen) { + this.item(orbLoot); + } + } + GameHelper.incrementObservable(selectedOrb.amount, amountToOpen * -1); + Object.keys(items).forEach((key) => { + BagHandler.gainItem(items[key].item, items[key].amount); + }); + this.opening(false); + this.amountOpened(amountToOpen); + this.itemsReceived(Object.values(items).map((item) => (Object.assign({ name: BagHandler.displayName(item.item) }, item)))); + if (amountToOpen > 1) { + $('#dreamOrbsOpenedModal').modal('show'); + } + }, 1800); + } + toJSON() { + return { + orbs: this.orbs.map((o) => ({ amount: o.amount(), color: o.color })), + }; + } + fromJSON(json) { + var _a; + (_a = json === null || json === void 0 ? void 0 : json.orbs) === null || _a === void 0 ? void 0 : _a.forEach((o) => { var _a; return (_a = this.orbs.find((o2) => o2.color == o.color)) === null || _a === void 0 ? void 0 : _a.amount(o.amount); }); + } +} +class DreamOrbTownContent extends TownContent { + constructor() { + super([ + new ObtainedPokemonRequirement('Tornadus'), + new ObtainedPokemonRequirement('Thundurus'), + new ObtainedPokemonRequirement('Landorus'), + ]); + } + cssClass() { + return 'btn btn-info'; + } + text() { + return 'Open Dream Orbs'; + } + onclick() { + $('#dreamOrbsModal').modal('show'); + } +} +class NPC { + constructor(name, dialog, options = {}, type = NPCType.Default) { + this.name = name; + this.dialog = dialog; + this.options = options; + this.type = type; + this.talkedTo = ko.observable(false); // Used for custom quests + this.saveKey = 0; + if (this.options.saveKey) { + this.saveKey = GameHelper.hash(this.options.saveKey); + } + } + get dialogHTML() { + return this.dialog.map(line => `

    ${TextMerger.mergeText(line)}

    `).join('\n'); + } + isVisible() { + var _a, _b; + return (_b = (_a = this.options.requirement) === null || _a === void 0 ? void 0 : _a.isCompleted()) !== null && _b !== void 0 ? _b : true; + } + setTalkedTo() { + this.talkedTo(true); + if (this.saveKey && !this.hasTalkedTo()) { + GameHelper.incrementObservable(App.game.statistics.npcTalkedTo[this.saveKey]); + } + } + hasTalkedTo() { + return this.saveKey ? App.game.statistics.npcTalkedTo[this.saveKey]() > 0 : false; + } +} +/// +class GiftNPC extends NPC { + constructor(name, dialog, giftFunction, giftImage, options = {}) { + super(name, dialog, options, NPCType.Gift); + this.name = name; + this.dialog = dialog; + this.giftFunction = giftFunction; + this.giftImage = giftImage; + } + isVisible() { + return super.isVisible() && !this.hasTalkedTo(); + } + acceptGift() { + var _a; + (_a = this.giftFunction) === null || _a === void 0 ? void 0 : _a.call(this); + GameHelper.incrementObservable(App.game.statistics.npcTalkedTo[this.saveKey]); + } + setTalkedTo() { + this.talkedTo(true); + } +} +/// +class KantoBerryMasterNPC extends NPC { + constructor(name, dialog) { + super(name, dialog); + this.name = name; + this.dialog = dialog; + } + get dialogHTML() { + // Before the player has unlocked the farm + if (!App.game.farming.canAccess()) { + return super.dialogHTML; + } + // After the farm is unlocked + return `

    ${KantoBerryMasterNPC.generateMessage(new Date())}

    `; + } + static generateMessage(date) { + if (App.game.farming.unlockedBerries.every(berry => berry())) { + return 'The disciple has surpassed the master. I have nothing more to teach you.'; + } + const possibleMutations = App.game.farming.mutations.filter((mut) => mut.unlocked && mut.showHint && !App.game.farming.unlockedBerries[mut.mutatedBerry]()); + if (possibleMutations.length === 0) { + return 'It seems as though you have hit a roadblock in your Berry progress. Focus on other areas before returning.'; + } + SeededRand.seedWithDate(date); + possibleMutations.forEach(b => SeededRand.boolean()); + const mutationToShow = SeededRand.fromArray(possibleMutations); + mutationToShow.hintSeen = true; + if (mutationToShow instanceof EnigmaMutation) { + mutationToShow.hintsSeen[mutationToShow.hintIndex](true); + return mutationToShow.partialHint; + } + return mutationToShow.hint; + } +} +class NPCController { + static openDialog(npc) { + this.selectedNPC(npc); + $('#npc-modal').modal(); + npc.setTalkedTo(); + } +} +NPCController.selectedNPC = ko.observable(); +var NPCType; +(function (NPCType) { + NPCType[NPCType["Default"] = 0] = "Default"; + NPCType[NPCType["Gift"] = 1] = "Gift"; +})(NPCType || (NPCType = {})); +class PokemonContest { + constructor() { + this.name = 'Pokemon Contest'; + this.saveKey = 'pokemonContest'; + this.prizes = [ + new PokemonContestPrizes('10 Rare Candy', 'Get 10 Rare Candy by catching Machop, not at all related to entering a contest! (real requirement will be added later)', 'Rare_Candy', 10, new ObtainedPokemonRequirement('Machop')), + /*new PokemonContestPrizes('Secret Mega Stone', + 'Obtain the Megastone for Altaria by reaching Master ranking in any contest.', + 'Altarianite', + 10, + new StatisticRequirement(['contestResults', GameConstants.ContestResults.Master], 1, 'Win a Pokemon Contest at Master ranking.'), + new MaxRegionRequirement(GameConstants.Region.kalos) + ),*/ + new PokemonContestPrizes('Pikachu (Rock Star)', 'Impress Pikachu (Rock Star) by being very Cool!', 'Pikachu (Rock Star)', 1, new StatisticRequirement(['contestStyleMaster', GameConstants.ContestStyle.Cool], 1, 'Win a Pokemon Contest at Master ranking when the style is Cool.')), + new PokemonContestPrizes('Pikachu (Belle)', 'Impress Pikachu (Belle) by being very Beautiful!', 'Pikachu (Belle)', 1, new StatisticRequirement(['contestStyleMaster', GameConstants.ContestStyle.Beautiful], 1, 'Win a Pokemon Contest at Master ranking when the style is Beautiful.')), + new PokemonContestPrizes('Pikachu (Pop Star)', 'Impress Pikachu (Pop Star) by being very Cute!', 'Pikachu (Pop Star)', 1, new StatisticRequirement(['contestStyleMaster', GameConstants.ContestStyle.Cute], 1, 'Win a Pokemon Contest at Master ranking when the style is Cute.')), + new PokemonContestPrizes('Pikachu (Ph. D.)', 'Impress Pikachu (Ph. D.) by being very Clever!', 'Pikachu (Ph. D.)', 1, new StatisticRequirement(['contestStyleMaster', GameConstants.ContestStyle.Clever], 1, 'Win a Pokemon Contest at Master ranking when the style is Clever.')), + new PokemonContestPrizes('Pikachu (Libre)', 'Impress Pikachu (Libre) by being very Tough!', 'Pikachu (Libre)', 1, new StatisticRequirement(['contestStyleMaster', GameConstants.ContestStyle.Tough], 1, 'Win a Pokemon Contest at Master ranking when the style is Tough.')), + ]; + this.lastEnteredDate = ko.observable(undefined); + this.entries = ko.observableArray(Array(3).fill(undefined).map(() => new ContestEntry())); + } + initialize() { + } + canAccess() { + return PokemonContestController.requirements.isCompleted(); + } + update(delta) { + } + toJSON() { + return { + prizes: this.prizes.map(p => p.toJSON()), + }; + } + fromJSON(json) { + if (!json) { + return; + } + this.prizes.forEach(p => { + const jsonPrize = json === null || json === void 0 ? void 0 : json.prizes.find(p2 => p2.title == p.title); + if (jsonPrize) { + p.fromJSON(jsonPrize); + } + }); + } +} +class PokemonContestController { + static generateDailyContest(date) { + SeededRand.seedWithDate(date); + // Generate Contest Style and Pokemon Type constraints + this.contestStyle(SeededRand.fromArray(GameHelper.enumNumbers(GameConstants.ContestStyle))); + const validTypes = GameHelper.enumNumbers(PokemonType).filter((t) => t !== PokemonType.None); + this.pokemonType(SeededRand.fromArray(validTypes)); + } + static getValidPokemonList(entryIndex) { + return ko.pureComputed(() => { + const pokemonType = PokemonContestController.pokemonType(); + const otherEntries = App.game.pokemonContest.entries().filter((e, i) => i !== entryIndex && e.pokemonName()).map((e) => e.pokemonName()); + const validPokemon = App.game.party.caughtPokemon.filter((p) => pokemonMap[p.name].type.includes(pokemonType) && !otherEntries.includes(p.name)); + return validPokemon.sort((a, b) => a.displayName.localeCompare(b.displayName)); + }); + } + static canEnterContest() { + if (App.game.pokemonContest.lastEnteredDate() && App.game.pokemonContest.lastEnteredDate().toDateString() == (new Date()).toDateString()) { + Notifier.notify({ + title: 'You can\'t enter the contest', + message: 'You have already entered the contest today', + type: NotificationConstants.NotificationOption.warning, + }); + return false; + } + return true; + } + static startContest() { + if (!PokemonContestController.canEnterContest()) { + return; + } + //PokemonContestController.inProgress(true); + App.game.pokemonContest.lastEnteredDate(new Date()); + //TODO: take some berries from the user + const stylePoints = PokemonContestController.getTotalStylePoints(); + const contestTokensGained = stylePoints; + let result = undefined; + if (stylePoints > 700) { + result = GameConstants.ContestResults.Master; + GameHelper.incrementObservable(App.game.statistics.contestStyleMaster[PokemonContestController.contestStyle()], 1); + } + else if (stylePoints > 450) { + result = GameConstants.ContestResults.Hyper; + } + else if (stylePoints > 200) { + result = GameConstants.ContestResults.Super; + } + else { + result = GameConstants.ContestResults.Normal; + } + App.game.wallet.gainContestTokens(contestTokensGained); + GameHelper.incrementObservable(App.game.statistics.contestResults[result], 1); + const message = `Your Result is ${GameConstants.ContestResults[result]}!\n` + + `You gained ${contestTokensGained} Contest Tokens.\n` + + 'Please check our Reward stand to see if you won anything new.\n' + + 'I hope to see you again tomorrow.'; + Notifier.notify({ + title: 'Contest is over!', + message: message, + type: NotificationConstants.NotificationOption.success, + timeout: GameConstants.MINUTE * 3, + }); + } +} +PokemonContestController.contestStyle = ko.observable(undefined); +PokemonContestController.pokemonType = ko.observable(PokemonType.None); +//static inProgress = ko.observable(false); //TODO: this should be used for some sort of animation or something +PokemonContestController.contestText = ko.observable(undefined); +PokemonContestController.requirements = new MultiRequirement([new MaxRegionRequirement(GameConstants.Region.hoenn), new DevelopmentRequirement()]); +PokemonContestController.entryAmount = 3; +PokemonContestController.getBerryList = ko.pureComputed(() => { + const berries = App.game.farming.berryData.filter((b) => App.game.farming.unlockedBerries[b.type]() && App.game.farming.berryList[b.type]() > 0); + return berries; +}); +PokemonContestController.getTotalStylePoints = ko.pureComputed(() => { + return App.game.pokemonContest.entries().reduce((sum, e) => sum + e.getStylePoints(), 0); +}); +class ContestEntry { + constructor() { + this.getStylePoints = ko.pureComputed(() => { + if (!this.pokemonName()) { + return 0; + } + let stylePoints = 0; + let flavorType; + const baseStats = pokemonMap[this.pokemonName()].base; + switch (PokemonContestController.contestStyle()) { + case GameConstants.ContestStyle.Cool: + stylePoints = baseStats.attack + baseStats.specialDefense; + flavorType = FlavorType.Spicy; + break; + case GameConstants.ContestStyle.Beautiful: + stylePoints = baseStats.specialAttack + baseStats.defense; + flavorType = FlavorType.Dry; + break; + case GameConstants.ContestStyle.Cute: + stylePoints = baseStats.specialDefense + baseStats.hitpoints; + flavorType = FlavorType.Sweet; + break; + case GameConstants.ContestStyle.Clever: + stylePoints = baseStats.specialAttack + baseStats.speed; + flavorType = FlavorType.Bitter; + break; + case GameConstants.ContestStyle.Tough: + stylePoints = baseStats.hitpoints + baseStats.defense; + flavorType = FlavorType.Sour; + break; + } + if (this.berry() && this.berry() !== BerryType.None) { + stylePoints += App.game.farming.berryData[this.berry()].flavors[flavorType].value; + } + return stylePoints; + }); + this.pokemonName = ko.observable(undefined); + this.berry = ko.observable(BerryType.None); + } + getPokemonImage() { + return !this.pokemonName() ? 'assets/images/pokeball/Pokeball.svg' : PokemonHelper.getImage(pokemonMap[this.pokemonName()].id); + } +} +class PokemonContestTownContent extends TownContent { + constructor() { + super([PokemonContestController.requirements]); + } + cssClass() { + return 'btn btn-primary'; + } + text() { + return 'Pokémon Contest'; + } + onclick() { + $('#pokemonContestModal').modal('show'); + } +} +class PokemonContestPrizes { + constructor(title, description, itemName, amount, claimRequirement, visibleRequirement) { + this.title = title; + this.description = description; + this.amount = amount; + this.claimRequirement = claimRequirement; + this.visibleRequirement = visibleRequirement; + this.claimed = ko.observable(false); + this.item = ItemList[itemName]; + } + getImage() { + return this.item.image; + } + isVisible() { + return this.item.isAvailable() && !this.item.isSoldOut() && (!this.visibleRequirement || this.visibleRequirement.isCompleted()); + } + canBeClaimed() { + return !this.claimed() && this.claimRequirement.isCompleted(); + } + claim() { + if (!this.canBeClaimed()) { + return; + } + this.claimed(true); + this.item.gain(this.amount); + } + toJSON() { + return { + title: this.title, + claimed: this.claimed(), + }; + } + fromJSON(json) { + if (json) { + this.claimed(json.claimed); + } + } +} +class ProfNPC extends NPC { + constructor(name, region, pokedexCompleteText, nextRegionUnlockedText, image = undefined, requirement) { + super(name, undefined, { image: image, requirement: requirement }); + this.name = name; + this.region = region; + this.pokedexCompleteText = pokedexCompleteText; + this.nextRegionUnlockedText = nextRegionUnlockedText; + } + get dialogHTML() { + var _a, _b; + const requiresCompleteDex = App.game.challenges.list.requireCompletePokedex.active(); + const nextRegionUnlocked = (_b = (_a = TownList[GameConstants.StartingTowns[this.region + 1]]) === null || _a === void 0 ? void 0 : _a.isUnlocked()) !== null && _b !== void 0 ? _b : false; + const completeDexAchievement = AchievementHandler.findByName(`${GameConstants.camelCaseToString(GameConstants.Region[this.region])} Master`); + if (!nextRegionUnlocked) { + return `

    Hello, new Champion, you've come a long way!

    +

    Come see me once you've beat the Elite Four!

    `; + } + let html = ''; + if (completeDexAchievement.isCompleted()) { + html += `

    ${this.pokedexCompleteText}

    `; + } + else { + if (requiresCompleteDex) { + html += '

    To progress to the next region, you need to catch all Pokémon native to this region.

    '; + } + html += `

    You still have ${completeDexAchievement.property.requiredValue - completeDexAchievement.getProgress()} left to catch in this region! You're almost there!

    `; + } + if (nextRegionUnlocked && (completeDexAchievement.isCompleted() || !requiresCompleteDex)) { + html += `

    ${this.nextRegionUnlockedText}

    `; + } + return html; + } +} +class PurifyChamberTownContent extends TownContent { + constructor() { + super([PurifyChamber.requirements]); + } + cssClass() { + return 'btn btn-info'; + } + text() { + return 'Purify Chamber'; + } + onclick() { + $('#purifyChamberModal').modal('show'); + } + isUnlocked() { + return PurifyChamber.requirements.isCompleted(); + } + areaStatus() { + const canPurify = App.game.purifyChamber.currentFlow() >= App.game.purifyChamber.flowNeeded() && App.game.party.caughtPokemon.some(p => p.shadow == GameConstants.ShadowStatus.Shadow); + return Math.min(canPurify ? areaStatus.uncaughtPokemon : areaStatus.completed, super.areaStatus()); + } +} +class PurifyChamber { + constructor() { + this.notified = false; + this.saveKey = 'PurifyChamber'; + this.selectedPokemon = ko.observable(undefined); + this.currentFlow = ko.observable(0); + this.flowNeeded = ko.pureComputed(() => { + const purifiedPokemon = App.game.party.caughtPokemon.filter((p) => p.shadow == GameConstants.ShadowStatus.Purified).length; + const flow = 15 * purifiedPokemon * purifiedPokemon + + 15 * purifiedPokemon + + 1500 * Math.exp(0.1 * purifiedPokemon); + return Math.round(flow); + }); + } + canPurify() { + if (!this.selectedPokemon()) { + return false; + } + if (this.selectedPokemon().shadow != GameConstants.ShadowStatus.Shadow) { + return false; + } + if (this.currentFlow() < this.flowNeeded()) { + return false; + } + return true; + } + purify() { + if (!this.canPurify()) { + return; + } + this.selectedPokemon().shadow = GameConstants.ShadowStatus.Purified; + this.currentFlow(0); + this.notified = false; + } + gainFlow(exp) { + if (!PurifyChamber.requirements.isCompleted() || !App.game.party.hasShadowPokemon()) { + return; + } + const newFlow = Math.round(this.currentFlow() + exp / 1000); + this.currentFlow(Math.min(newFlow, this.flowNeeded())); + if (!this.notified && this.currentFlow() >= this.flowNeeded()) { + this.notified = true; + Notifier.notify({ + title: 'Purify Chamber', + message: 'Maximum Flow has accumulated at the Purify Chamber in Orre!', + type: NotificationConstants.NotificationOption.primary, + sound: NotificationConstants.NotificationSound.General.max_flow, + timeout: 15 * GameConstants.MINUTE, + }); + } + } + toJSON() { + var _a; + return { + selectedPokemon: (_a = this.selectedPokemon()) === null || _a === void 0 ? void 0 : _a.id, + currentFlow: this.currentFlow(), + }; + } + fromJSON(json) { + var _a; + if (json) { + if (json.selectedPokemon) { + let selectedPokemon = App.game.party.getPokemon(json.selectedPokemon); + if (selectedPokemon.shadow != GameConstants.ShadowStatus.Shadow) { + selectedPokemon = undefined; + } + this.selectedPokemon(selectedPokemon); + this.currentFlow((_a = json.currentFlow) !== null && _a !== void 0 ? _a : 0); + } + } + } +} +PurifyChamber.requirements = new QuestLineStepCompletedRequirement('Shadows in the Desert', 17); +class RoamerNPC extends NPC { + constructor(name, dialog, region, subRegionRoamerGroup, image = undefined, requirement) { + super(name, dialog, { image: image, requirement: requirement }); + this.name = name; + this.dialog = dialog; + this.region = region; + this.subRegionRoamerGroup = subRegionRoamerGroup; + } + get dialogHTML() { + var _a, _b, _c, _d; + const route = RoamingPokemonList.getIncreasedChanceRouteBySubRegionGroup(this.region, this.subRegionRoamerGroup); + const roamers = RoamingPokemonList.getSubRegionalGroupRoamers(this.region, this.subRegionRoamerGroup); + // If no roaming Pokemon yet + if (!roamers.length) { + const regionName = (_c = (_b = (_a = RoamingPokemonList.roamerGroups[this.region]) === null || _a === void 0 ? void 0 : _a[this.subRegionRoamerGroup]) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : GameConstants.camelCaseToString(GameConstants.Region[this.region]); + return `There haven't been any reports of roaming Pokémon around ${regionName} lately.`; + } + roamers.forEach((roamer) => { + if (App.game.statistics.pokemonEncountered[roamer.pokemon.id]() === 0 && App.game.statistics.pokemonSeen[roamer.pokemon.id]() === 0) { + GameHelper.incrementObservable(App.game.statistics.pokemonSeen[roamer.pokemon.id]); + } + }); + const roamersHTML = roamers.map(r => ``).join(''); + return super.dialogHTML.replace(/{ROUTE_NAME}/g, (_d = route()) === null || _d === void 0 ? void 0 : _d.routeName) + roamersHTML; + } +} +/// +/// +/// +/// +/// +/// +/// +/// +class Town { + constructor(name, region, subRegion, content = [], + // Optional arguments are in a named object, so that we don't need + // to pass undefined to get to the one we want + optional = {}) { + var _a; + this.name = name; + this.region = region; + this.requirements = optional.requirements || []; + this.npcs = optional.npcs; + this.startingTown = GameConstants.StartingTowns.includes(this.name); + this.content = content; + this.subRegion = subRegion; + this.ignoreAreaStatus = (_a = optional.ignoreAreaStatus) !== null && _a !== void 0 ? _a : false; + if (GymList[name]) { + const gym = GymList[name]; + this.content.unshift(gym); + } + if (GameConstants.DockTowns.includes(name)) { + this.content.push(new DockTownContent()); + } + if (GameConstants.StartingTowns.includes(name)) { + this.content.push(new NextRegionTownContent()); + } + content.forEach((c) => { + c.addParent(this); + }); + } + isUnlocked() { + return this.requirements.every(requirement => requirement.isCompleted()); + } +} +class DungeonTown extends Town { + constructor(name, region, subregion, requirements = [], content = [], optional = {}) { + optional.requirements = requirements; + super(name, region, subregion, content, optional); + this.dungeon = dungeonList[name]; + } +} +/* eslint-disable array-bracket-newline */ +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +const TownList = {}; +const pokeMartShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.xClick, + ItemList.Lucky_egg, + ItemList.Token_collector, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, + ItemList.SmallRestore, + ItemList.MediumRestore, + ItemList.LargeRestore, +], 'Explorers Poké Mart'); +const DepartmentStoreShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.xClick, + ItemList.Lucky_egg, + ItemList.Dowsing_machine, + ItemList.Token_collector, + ItemList.Lucky_incense, + ItemList.SmallRestore, + ItemList.MediumRestore, + ItemList.LargeRestore, +], 'Department Store'); +const pokeLeagueShop = () => new Shop([ + new PokeballItem(GameConstants.Pokeball.Masterball, 10000000, GameConstants.Currency.money, { multiplier: 1.35, multiplierDecrease: false, saveName: `${GameConstants.Pokeball[GameConstants.Pokeball.Masterball]}|${GameConstants.Currency[GameConstants.Currency.money]}` }, 'Master Ball'), + new PokeballItem(GameConstants.Pokeball.Masterball, 75000, GameConstants.Currency.dungeonToken, { multiplier: 1.35, multiplierDecrease: false, saveName: `${GameConstants.Pokeball[GameConstants.Pokeball.Masterball]}|${GameConstants.Currency[GameConstants.Currency.dungeonToken]}` }, 'Master Ball'), + new PokeballItem(GameConstants.Pokeball.Masterball, 3000, GameConstants.Currency.questPoint, { multiplier: 1.35, multiplierDecrease: false, saveName: `${GameConstants.Pokeball[GameConstants.Pokeball.Masterball]}|${GameConstants.Currency[GameConstants.Currency.questPoint]}` }, 'Master Ball'), + new PokeballItem(GameConstants.Pokeball.Masterball, 3000, GameConstants.Currency.farmPoint, { multiplier: 1.35, multiplierDecrease: false, saveName: `${GameConstants.Pokeball[GameConstants.Pokeball.Masterball]}|${GameConstants.Currency[GameConstants.Currency.farmPoint]}` }, 'Master Ball'), + new PokeballItem(GameConstants.Pokeball.Masterball, 10, GameConstants.Currency.diamond, { multiplier: 1.35, multiplierDecrease: false, saveName: `${GameConstants.Pokeball[GameConstants.Pokeball.Masterball]}|${GameConstants.Currency[GameConstants.Currency.diamond]}` }, 'Master Ball'), + ItemList.Protein, + ItemList.Calcium, + ItemList.Carbos, +]); +//Kanto Shops +const ViridianCityShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.xClick, + ItemList.Dungeon_ticket, +]); +const PewterCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Token_collector, + ItemList.Lucky_egg, + ItemList.Mystery_egg, +]); +const Route3Shop = new Shop([ + ItemList.Magikarp, +], 'Shady Deal'); +const CeruleanCityShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.Water_egg, + ItemList.Water_stone, +]); +const VermilionCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Lucky_egg, + ItemList.Electric_egg, + ItemList.Thunder_stone, +]); +const LavenderTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, + ItemList.Grass_egg, +]); +const CeladonCityShop = new Shop([ + ItemList.Eevee, + ItemList.Porygon, + ItemList.Jynx, + ItemList['Mr. Mime'], + ItemList.Lickitung, +], 'Game Corner Shop'); +const CeladonDepartmentStoreShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xAttack, + ItemList.xClick, + ItemList.Lucky_egg, + ItemList.Dowsing_machine, + ItemList.Token_collector, + ItemList.Lucky_incense, +], 'Department Store'); +const SaffronCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xClick, + ItemList.Fighting_egg, + ItemList.Leaf_stone, + ItemList.Moon_stone, +]); +const FuchsiaCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Lucky_egg, + ItemList.Dragon_egg, + ItemList.Linking_cord, +]); +const CinnabarIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.SmallRestore, + ItemList.Fire_egg, + ItemList.Fire_stone, + ItemList.Explorer_kit, + ItemList.Explosive_Charge, + ItemList.Treasure_Scanner, + ItemList.HatcheryHelperKris, +]); +const OneIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.Lucky_incense, +]); +const TwoIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xClick, + ItemList.Dowsing_machine, +]); +const ThreeIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, +]); +const ClientIslandShop = new Shop([ + ItemList['Charity Chansey'], +], 'Gift Shop'); +const FourIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.Soothe_bell, + ItemList.Wonder_Chest, +]); +const FiveIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xClick, + ItemList.Dragon_scale, +]); +const SixIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Lucky_egg, + ItemList.Prism_scale, +]); +const SevenIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, +]); +const MikanIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Metal_coat, +]); +const NavelIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Kings_rock, +]); +const TrovitaIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Deepsea_tooth, + ItemList.Deepsea_scale, +]); +const KumquatIslandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Upgrade, +]); +const ValenciaPokémonCenterShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Dowsing_machine, + ItemList.Sun_stone, +]); +const PinkanPokémonReserveShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Lucky_incense, +]); +const TanobyRuinsShop = new Shop([ + ItemList['Pinkan Dodrio'], +], 'Trade with Prof. Ivy'); +const PinkanBerryMaster = new BerryMasterShop(GameConstants.BerryTraderLocations['Pinkan Pokémon Reserve'], [ + ItemList.Freeze_Mulch, + ItemList.Berry_Shovel, + ItemList.Mulch_Shovel, + ItemList.Gooey_Mulch, +], 'Officer Jenny\'s Pinkan Trade Shop', [new QuestLineCompletedRequirement('Team Rocket\'s Pinkan Theme Park')]); +// Kanto NPCs +const PalletProfOak = new ProfNPC('Prof. Oak', GameConstants.Region.kanto, 'Congratulations on completing your Kanto Pokédex!', 'Your journey isn\'t over yet, a whole world awaits you! Onwards to Johto!', 'assets/images/npcs/Professor Oak.png', +// Prevent Prof. Oak clones during Celebi questline +new OneFromManyRequirement([new QuestLineStartedRequirement('Unfinished Business', GameConstants.AchievementOption.less), new QuestLineCompletedRequirement('Unfinished Business'), new QuestLineStepCompletedRequirement('Unfinished Business', 2)])); +const PalletMom1 = new NPC('Mom', [ + 'So you\'re really leaving on your very own Pokémon journey. I\'m so proud of you. Let me give you some words of wisdom for your travels.', + 'Traveling on your own can be scary. But remember that there are nice people everywhere you go. So strike up a conversation! You will probably learn something useful.', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Tutorial Quests', 2), new QuestLineStepCompletedRequirement('Tutorial Quests', 3, GameConstants.AchievementOption.less)]), +}); +const PalletMom2 = new NPC('Mom', [ + 'Remember that there are nice people everywhere you go. So strike up a conversation! You will probably learn something useful.', +], { + requirement: new QuestLineStepCompletedRequirement('Tutorial Quests', 3), +}); +const PalletCelebiProfOak1 = new NPC('Prof. Oak', [ + 'Good of you to come see me. I need you to pick up something for me. A special kind of Poké Ball, found by Professor Ivy. She lives on one of the Sevii Islands, east of Three Island.', + 'I don\'t know who else to trust with this. It\'s very important and very valuable.', + 'Feel free to take your time, but please don\'t get distracted for the duration of an entire filler anime season.', +], { + image: 'assets/images/npcs/Professor Oak.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Unfinished Business'), new QuestLineStepCompletedRequirement('Unfinished Business', 1, GameConstants.AchievementOption.less)]), +}); +const PalletCelebiProfOak2 = new NPC('Prof. Oak', [ + 'Ah, the fabled GS Ball. Let me have a look.', + 'Hm. I just can\'t figure this out. There\'s clearly something inside, but I just can\'t get the darned thing to open.', + 'I know just the man for the job! Kurt, a Poké Ball expert. He lives in Azalea Town, in Johto. Please deliver the GS Ball to him.', +], { + image: 'assets/images/npcs/Professor Oak.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 1), new QuestLineStepCompletedRequirement('Unfinished Business', 2, GameConstants.AchievementOption.less)]), +}); +const ViridianCityOldMan1 = new NPC('Old Man', [ + 'Leave me alone. I need my coffee.', +], { + image: 'assets/images/npcs/Old Man.png', + requirement: new QuestLineStepCompletedRequirement('Tutorial Quests', 4, GameConstants.AchievementOption.less), +}); +const ViridianCityOldMan2 = new NPC('Old Man', [ + 'Ahh, I\'ve had my coffee now and I feel great!', + 'You can use the Poké Ball Selector to select which type of Poké Ball to use on specific Pokémon based on caught status.', + 'For example, if you click on the empty ball next to the word "Caught" and assign a Poké Ball, you will then start throwing Poké Balls at Pokémon you\'ve already caught before. This can be very useful if you need Dungeon Tokens.', + 'Here, let me show you how it works.', + 'I\'ll always be here to explain it again if you forget.', +], { + image: 'assets/images/npcs/Old Man.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Tutorial Quests', 4), new QuestLineStepCompletedRequirement('Tutorial Quests', 5, GameConstants.AchievementOption.less)]), +}); +const ViridianCityOldMan3 = new NPC('Old Man', [ + 'You can use the Poké Ball Selector to select which type of Poké Ball to use on specific Pokémon based on caught status.', + 'For example, if you click on the empty ball next to the word "Caught" and assign a Poké Ball, you will then start throwing Poké Balls at Pokémon you\'ve already caught before. This can be very useful if you need Dungeon Tokens.', + 'I\'ll always be here to explain it again if you forget.', +], { + image: 'assets/images/npcs/Old Man.png', + requirement: new QuestLineStepCompletedRequirement('Tutorial Quests', 5), +}); +const PewterBattleItemRival = new NPC('Battle Item Master', [ + 'Hey kid, you look new! Let me offer some advice: Battle Items like X Attack can be acquired along Routes, inside Dungeons and in Shops!', + 'Use them to help you out whenever you feel like time is against you!', +]); +const PewterScientist = new NPC('Gem Scientist', [ + 'I see you are carrying a Gem Case. Here at the museum we study space, fossils and gems!', + 'When you defeat a Pokémon you gain a gem of that Pokémon\'s type. If the Pokémon has two types you gain one for each! Defeating very strong Pokémon, such as those owned by gym leaders, gets you five!', + 'You can click Gems in the Start Menu to boost your damage using these gems. For example, using rock gems you can boost the super effective damage of your rock type Pokémon! Those flying types had better watch out for your might!', + 'You can even use this to eliminate immunities! By using electric gems to boost your electric type immune damage, your electric Pokémon can suddenly do damage against ground types!', +], { + image: 'assets/images/npcs/Scientist (female).png', + requirement: new GymBadgeRequirement(BadgeEnums.Earth), +}); +const Route3ShadySalesman = new NPC('Shady Salesman', [ + 'Have I got a deal just for you!', + 'I\'ll let you have a super secret Pokémon. For the right price! Buying this pokemon Takes No Effort, you should Value it.', +], { image: 'assets/images/npcs/ShadySalesman.png' }); +const CeruleanKantoBerryMaster = new KantoBerryMasterNPC('Berry Master', [ + 'Bah! You younglings have no appreciation of the art of Berry farming!', + 'Come back when you are ready to learn!', +]); +const CeruleanSuperNerd = new NPC('Super Nerd Jovan', [ + 'In my spare time I like to play this kickass browser game. It takes ages to get all the best stuff.', + 'Then one day, all my progress was gone. I don\'t know exactly what happened. Something updated, some cookies got cleaned up, I don\'t know. I had to start all over from the beginning.', + 'That day I learned that I should frequently download a save.', +], { image: 'assets/images/npcs/Super Nerd.png' }); +const BillsGrandpa1 = new NPC('Bill\'s Grandpa', [ + 'Hm? You know Bill? He\'s my grandson. He\'s not here right now. He does something with PCs, so I\'m house-sitting.', + 'I like Pokémon but I\'m not as knowledgeable as my grandson. My grandson Bill told me about a Pokémon that is pink and like a balloon.', + 'Would you catch that Pokémon and show it to me, please?', +], { image: 'assets/images/npcs/Bill\'s Grandpa with Eevee.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Bill\'s Grandpa Treasure Hunt'), new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 1, GameConstants.AchievementOption.less)]), +}); +const BillsGrandpa2 = new NPC('Bill\'s Grandpa', [ + 'Ah, so that is Jigglypuff? Isn\'t it cute! That\'s so kind of you. Thanks! This Moon Stone is a token of my appreciation.', + 'Ah, my grandson mentioned a round, green Pokémon, wait not green, it\'s blue, a blue Pokémon that has leaves growing on its head.', + 'If you encounter that Pokémon and catch it, would you, please, bring it here?', +], { image: 'assets/images/npcs/Bill\'s Grandpa with Eevee.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 1), new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 3, GameConstants.AchievementOption.less)]), +}); +const BillsGrandpa3 = new NPC('Bill\'s Grandpa', [ + 'Oh, the Pokémon was called Oddish? It is adorable! Thank you so much for bringing it to me! Please, accept this Leaf Stone.', + 'By the way, do you know of a sea Pokémon that has a red sphere on its body? You know, the one that\'s shaped like a star?', + 'When you get one, could you, please, come back here so I can see it?', +], { image: 'assets/images/npcs/Bill\'s Grandpa with Eevee.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 3), new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 5, GameConstants.AchievementOption.less)]), +}); +const BillsGrandpa4 = new NPC('Bill\'s Grandpa', [ + 'Ah, you brought it to me. Staryu is the name, you said? It\'s certainly shaped like a star. You are so kind for coming back with it! This Water Stone should be really useful to you.', + 'I was thinking, Bill told me about a Pokémon that is very loyal to its trainer. It\'s supposed to roar well.', + 'I would really like to meet one, can you stop by if you capture one, please?', +], { image: 'assets/images/npcs/Bill\'s Grandpa with Eevee.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 5), new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 7, GameConstants.AchievementOption.less)]), +}); +const BillsGrandpa5 = new NPC('Bill\'s Grandpa', [ + 'Ah, so this little puppy is Growlithe? I cannot begin to imagine its roaring! I\'m so happy that you are doing all this for me. Thank you so much! I was saving this Fire Stone for a rainy day, but I want you to have it instead.', + 'Did you think I was done by the way? I wanted to ask if you knew that hugely popular Pokémon? The Pokémon that has a yellow body and red cheeks. I would love to see what it looks like.', + 'This is the one I\'m most excited to meet. Please come back once you catch it, I will have tea prepared for you.', +], { image: 'assets/images/npcs/Bill\'s Grandpa with Eevee.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 7), new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 9, GameConstants.AchievementOption.less)]), +}); +const BillsGrandpa6 = new NPC('Bill\'s Grandpa', [ + 'Yes! That\'s the one! It\'s Pikachu, right? Ohhh, I\'ve wanted to meet it for so long. Such a cutie. You deserve this Thunder Stone!', + 'You\'ve shown me everything I wanted to see and more. You have been a very nice trainer! My grandson could learn one thing or two from you, ho, ho!', + 'There is one more thing I would like to ask you, would you battle this old man? I promise I\'ll make it worth your while. Let\'s go outside.', + 'Let me tell you though, in my youth, I was strong enough to beat Viridian City\'s Gym, so don\'t expect me to be a pushover.', +], { image: 'assets/images/npcs/Bill\'s Grandpa with Eevee.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 9), new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 11, GameConstants.AchievementOption.less)]), +}); +const BillsGrandpa7 = new NPC('Bill\'s Grandpa', [ + 'As I said, that was one of the best battles I\'ve ever had.', + 'There is someone I would like to go with you, it\'s my partner, Eevee.', + 'I think Eevee is gonna be better with you than with me. I\'m sure that, with you, Eevee is gonna grow up healthy and strong!', +], { image: 'assets/images/npcs/Bill\'s Grandpa without Eevee.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 11), new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 13, GameConstants.AchievementOption.less)]), +}); +const BillsGrandpa8 = new NPC('Bill\'s Grandpa', [ + 'Hello again, I see you are treating Eevee very well.', + 'I\'m still house-sitting for my grandson, I\'m sure he\'s doing well.', +], { image: 'assets/images/npcs/Bill\'s Grandpa without Eevee.png', + requirement: new QuestLineStepCompletedRequirement('Bill\'s Grandpa Treasure Hunt', 13), +}); +const BillsHouseEusine = new NPC('Eusine', [ + 'Puff, puff... I am...no match for you. ...As I predicted.', + '..................', + 'Go ahead. Since I met you in Ecruteak City, I\'ve sort of known that Suicune would choose you.', + 'Take a look at it! Suicune is still there waiting for you! It has been waiting for a worthy Trainer to whom it can entrust itself!', +], { + image: 'assets/images/npcs/Eusine.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eusine\'s Chase', 9), new QuestLineCompletedRequirement('Eusine\'s Chase', GameConstants.AchievementOption.less)]), +}); +const VermilionFanClubChairman = new NPC('Fan Club Chairman', [ + 'You won’t find a Pokémon as wonderful as my favorite Rapidash in those Typed Eggs in the shops, but they might hatch rare Pokémon you can’t find anywhere else!', +], { image: 'assets/images/npcs/Gentleman (Gen 4).png' }); +const VermilionShardApprentice = new NPC('Shard Apprentice', [ + 'Are you looking for some Shards? You can find them in many Dungeons! Except in Viridian Forest and Mt. Moon. I\'ve never found any Shards there for some reason.', + 'I happen to know that there are some Yellow and Blue Shards in Diglett\'s Cave. Just look inside the chests!', + 'Shards can have lots of different colors. Different Dungeons will have different colors, so keep an eye out! Most of them can\'t even be found in Kanto!', +]); +const VermilionEusine = new NPC('Eusine', [ + 'That was so close! I thought I could corner it by ambushing it here... But running on the water... is beyond me. Still, I am starting to see a pattern. Suicune prefers water! That means...', + 'Sorry, I\'ve got to go!', +], { + image: 'assets/images/npcs/Eusine.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eusine\'s Chase', 5), new QuestLineStepCompletedRequirement('Eusine\'s Chase', 7, GameConstants.AchievementOption.less)]), +}); +const LavenderMrFuji = new NPC('Mr. Fuji', [ + 'Welcome. In our Volunteer House here we take in all kinds of Pokémon to care for them.', + 'Did you know that sparkling Pokémon are more often found in Dungeons, on Farms, from Eggs, and even from Shops, the Safari Zone, and Evolutions from Items?', +], { image: 'assets/images/npcs/Mr. Fuji.png' }); +const LavenderChanneler = new NPC('Channeler Karina', [ + 'I know a lot of useful stuff. Like the odds of finding a shiny Pokémon or how to increase Click Attack.', + 'No, I didn\'t learn this from talking to ghosts, don\'t be silly. There\'s a FAQ button in the Start Menu. It\'s very useful.', +], { image: 'assets/images/npcs/Channeler.png' }); +const LavenderShopper = new NPC('Shopper', [ + 'I always seem to run out of Great Balls. Luckly this shop always have them in stock!', + 'They even have an offer today! They give you free Great Balls if you give them the code THE-GREATEST-POKEBALL', +]); +const BigSpender = new NPC('Big Spender', [ + 'I love shopping! When I come in, the cashiers know I want tons of items.', + 'You can use the Shop Amount Button settings to make it easy for big purchases, too!', +], { image: 'assets/images/npcs/Beauty.png' }); +const EggHuntErika = new NPC('Erika', [ + 'Hello... Isn\'t the spring weather so relaxing? I adore how lovely the blooming flowers look during this time of year...', + 'Oh! I\'m sorry, I almost dozed off. I was reminiscing about my stroll in Viridian Forest earlier today. I came across the loveliest patch of flowers over there and...', + '...', + 'Zzz... Hm? Oh yes, the forest. It was most peculiar - when I laid down upon the flowerbed I had the strangest dream of a basket full of Pokémon. At least, I think it was a dream... It did not strike me as one of the usual inhabitants of the area.', +], { + image: 'assets/images/npcs/Erika.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Egg Hunt'), new QuestLineCompletedRequirement('Egg Hunt', GameConstants.AchievementOption.less)]), +}); +const SaffronBattleItemRival = new NPC('Battle Item Master', [ + 'Do I know you? Wait... Have you met my worthless rival? Ha! Let me guess, he gave you some unwanted advice?', + 'I bet he forget to tell you that although all Battle Items only last for 30 seconds, they can stack and last for days! Now scram!', +]); +const SaffronBreeder = new NPC('Breeder', [ + 'You can leave your level 100 Pokémon with us up at the Hatchery. Breeding them will reset their level, but they will be stronger! They gain 25% of their base attack!', + 'And the best part is you can keep doing it over and over and over again! The sky is the limit! Reach for the stars!', + 'With Protein your Pokémon will become even stronger when you breed them. I hear they sell it at the Indigo Plateau.', +], { + image: 'assets/images/npcs/Pokémon Breeder (female).png', + requirement: new GymBadgeRequirement(BadgeEnums.Earth), +}); +const LaprasGift = new GiftNPC('Silph Co. Employee', [ + 'Oh! Hi! You\'re not a member of Team Rocket! You came to save us? Why thank you!', + 'I want you to have this Pokémon for saving us.', +], () => { + App.game.party.gainPokemonByName('Lapras'); +}, 'assets/images/pokemon/131.png', { saveKey: 'laprasgift', image: 'assets/images/npcs/Office Worker (male).png', requirement: new MultiRequirement([new TemporaryBattleRequirement('Blue 5'), new ObtainedPokemonRequirement('Lapras', true)]) }); +const FuchsiaKantoRoamerNPC = new RoamerNPC('Youngster Wendy', [ + 'There\'s been some recent sightings of roaming Pokémon on {ROUTE_NAME}!', +], GameConstants.Region.kanto, RoamingPokemonList.findGroup(GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto)); +const FuchsiaEusine = new NPC('Eusine', [ + 'You! Not again! I\'ll be there first next time! Having followed it here, I\'m starting to understand what Suicune is after.', + 'To be honest, I would like to keep this information to myself. But I want to be an honest Trainer in front of Suicune! That\'s why I am sharing a clue with you.', + 'It seems that... Suicune prefers a hilly place near water... Somewhere north. I don\'t know exactly where, yet. It will be just you and me! Who\'ll find it first? I challenge you!', +], { + image: 'assets/images/npcs/Eusine.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eusine\'s Chase', 7), new QuestLineStepCompletedRequirement('Eusine\'s Chase', 9, GameConstants.AchievementOption.less)]), +}); +const CinnabarIslandResearcher = new NPC('Researcher', [ + 'They were trying to clone an ancient Pokémon in the mansion... I wonder if they succeeded.', + 'Apparently the ancient Pokémon escaped, and can be found roaming around Kanto!', +], { image: 'assets/images/npcs/Scientist (male).png' }); +const KantoFossilNpc = new NPC('Underground Expert', [ + 'That Explorer Kit is a must-have for any Fossil Fanatic! Why, it\'s how I found my very first Old Amber.', + 'Hrm, yes! I see that gleam in your eye! It may look expensive now, but the treasures you\'ll find in the Underground are priceless! And what\'s more- with each new region you travel to, the more adept you will become at identifying new curios!', + 'Speaking of, our very own Kanto is home to three: the Helix Fossil, Dome Fossil, and Old Amber! You can revive them via that Hatchery of yours!', +], { image: 'assets/images/npcs/Ruin Maniac gen3.png' }); +const OneIslandCelio1 = new NPC('Celio', [ + 'Ah, yes. Welcome! Welcome! Almost didn\'t see you there. I\'m just so busy trying to get this darned thing to work. Once it\'s complete we can finally have a direct communications network between the Sevii Islands and Kanto!', + 'I don\'t even have time to go and pick up an important package. A meteorite, found by the owner of the game corner on Two Island. It contains important materials for my machine.', + 'You seem like the adventuring type. Tell you what. How about Bill stays here with me to work on this machine, and you go fetch my Meteorite for me.', +], { + image: 'assets/images/npcs/Celio.png', + requirement: new QuestLineStepCompletedRequirement('Bill\'s Errand', 1, GameConstants.AchievementOption.less), +}); +const OneIslandCelio2 = new NPC('Celio', [ + 'Back already? That didn\'t take very long.', + 'What? It did take long? You went on a whole rescue mission? Seems like I lost track of time while working on my machine with Bill. It\'s been a lot of fun.', + 'I\'m glad to hear Lostelle is all right. You can hand the meteorite to me. Bill, thank you for your assistance, I\'ll take it from here. I can see that your friend is eager to get back to Kanto and challenge the Pokémon League.', + 'Thank you both very much.', +], { + image: 'assets/images/npcs/Celio.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Errand', 5), new QuestLineCompletedRequirement('Bill\'s Errand', GameConstants.AchievementOption.less)]), +}); +const OneIslandCelio3 = new NPC('Celio', [ + 'You\'ve been a great help. Thanks again. Maybe we\'ll meet again some day...', +], { + image: 'assets/images/npcs/Celio.png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('Bill\'s Errand'), new QuestLineStartedRequirement('Celio\'s Errand', GameConstants.AchievementOption.less)]), +}); +const OneIslandCelio4 = new NPC('Celio', [ + 'How have things been for you? Oh, is that right? You\'ve caught more Pokémon. Do you know what? Maybe I can be useful to you. I\'m modifying the Network Machine right now. I\'m changing it so it can handle trades over long distances. When I get finished, you\'ll be trading for exotic Pokémon from Trainers far away.', + 'But, there is a slight catch. For the link to work, the Machine needs a special gemstone. It\'s supposed to be on One Island, but I haven\'t found one yet. Who knows where it could be.', +], { + image: 'assets/images/npcs/Celio.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Celio\'s Errand'), new QuestLineStepCompletedRequirement('Celio\'s Errand', 1, GameConstants.AchievementOption.less)]), +}); +const OneIslandCelio5 = new NPC('Celio', [ + 'Oh! Th-that\'s... Thank you! You\'re simply amazing. ... ... ... ... Um... May I ask one more giant favor of you?', + 'While I was studying gemstones, I discovered something important. There is another gem that forms a pair with this Ruby. That other gemstone is supposed to be in the Sevii Islands. Please, I need you to go find the other gem.', + 'Here, take my ferry pass. It will let you get to all of the Sevii Islands. Please, I can\'t do it without your help.', +], { + image: 'assets/images/npcs/Celio.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Celio\'s Errand', 4), new QuestLineStepCompletedRequirement('Celio\'s Errand', 6, GameConstants.AchievementOption.less)]), +}); +const OneIslandCelio6 = new NPC('Celio', [ + 'So this is the gem that forms a pair with the Ruby... You\'ve gone through a lot to get this, didn\'t you? You don\'t have to tell me. I know it wasn\'t easy. Thank you so much! Now it\'s my turn to work for you! Please give me a little time.', + 'Okay, this is good... I did it! I linked up with Lanette! I did it! I\'ve managed to link up with Trainers in the Hoenn region! Finally, the Network Machine is fully operational! I owe it all to you! Thanks to you, my dream came true...', +], { + image: 'assets/images/npcs/Celio.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Celio\'s Errand', 12), new QuestLineCompletedRequirement('Celio\'s Errand', GameConstants.AchievementOption.less)]), +}); +const OneIslandCelio7 = new NPC('Celio', [ + 'I... I\'m not crying. That\'s enough about me! You\'re going to keep looking for exotic Pokémon, right? I wish you the best of luck!', +], { + image: 'assets/images/npcs/Celio.png', + requirement: new QuestLineCompletedRequirement('Celio\'s Errand'), +}); +const OneIslandYoungster = new NPC('Youngster', [ + 'Isn\'t it strange how Moltres lives on One Island?', +], { + image: 'assets/images/npcs/Youngster.png', + requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Mt. Ember Summit')), +}); +const TwoIslandGameCornerOwner1 = new NPC('Game Corner Owner', [ + 'Hello stranger. I\'m afraid the Game Corner is currently closed.', + 'What? The meteorite for Celio? Yes, I can give that to you. But I need you to do something for me first.', + 'My daughter Lostelle is missing. She likes to pick berries in the Berry Forest on Three Island. She does it all the time. But this time she hasn\'t come back. Please go find her.', +], { + requirement: new QuestLineStepCompletedRequirement('Bill\'s Errand', 4, GameConstants.AchievementOption.less), +}); +const TwoIslandGameCornerOwner2 = new NPC('Game Corner Owner', [ + 'My sweet Lostelle! I\'m so glad you\'re all right.', + 'Thank you very much kind stranger. Please take the Meteorite.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Errand', 4), new QuestLineCompletedRequirement('Bill\'s Errand', GameConstants.AchievementOption.less)]) }); +const ThreeIslandBiker1 = new NPC('Biker', [ + 'You know what sucks? The other islands are off limits for some arbitrary reason. There is no explanation. Just can\'t go there.', + 'Alright, you want the real truth? Some weird old dude told me this: "The other islands are locked behind part of a "Quest Line" You have to progress to unlock it."', + 'I don\'t know what half those words mean. All I know is I can\'t go back to Kanto with the rest of the gang. This sucks.', +], { + image: 'assets/images/npcs/Biker Goon.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Bill\'s Errand', 3), new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion, GameConstants.AchievementOption.less)]), +}); +const ThreeIslandBiker2 = new NPC('Biker', [ + 'You know what sucks? The other islands are off limits for some arbitrary reason. There is no explanation. Just can\'t go there.', + 'Alright, you want the real truth? Some weird old dude told me this: "The other islands are locked behind part of a Questline. You can unlock it at a Bulletin Board."', + 'I don\'t know what half those words mean. All I know is I can\'t go back to Kanto with the rest of the gang. This sucks.', +], { + image: 'assets/images/npcs/Biker Goon.png', + requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), new QuestLineStepCompletedRequirement('Celio\'s Errand', 5, GameConstants.AchievementOption.less)]), +}); +const ThreeIslandBiker3 = new NPC('Biker', [ + 'You know what sucks? The other islands are off limits for some arbitrary reason. There is no explanation. Just can\'t go there.', + 'Wait, you got to them? Good for you. Not that it matters to me, I\'m still stuck here. This sucks.', +], { + image: 'assets/images/npcs/Biker Goon.png', + requirement: new QuestLineStepCompletedRequirement('Celio\'s Errand', 5), +}); +const CelebiProfIvy = new NPC('Prof. Ivy', [ + 'Welcome to Valencia Island! Well, this tiny beach on Valencia Island. I don\'t know why I decided to have this lab built below this giant cliff... Can\'t even get to the rest of the island from here.', + 'This is the GS Ball. I found it here recently. Professor Oak seemed very interested. Please deliver it to him at your earliest convenience.', + 'But first, wanna get involved in our regional Pokémon League? No? Maybe another time then.', +], { + image: 'assets/images/npcs/Professor Ivy.png', + requirement: new QuestLineStepCompletedRequirement('Unfinished Business', 2, GameConstants.AchievementOption.less), +}); +const SeviiRocketGrunts = new NPC('Team Rocket Grunts', [ + 'Whew, punched through at last. Let\'s go treasure hunting! Any treasure we find, we haul back to the Warehouse, understood?', + '...Oh, what are the passwords? At the Rocket Warehouse, I mean.', + 'What, you forgot the password? There\'re actually two. The first one\'s "Goldeen need log". And the second one is...', + 'Hey! This snoop\'s been listening in!', +], { + image: 'assets/images/npcs/Team Rocket Grunts.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Celio\'s Errand', 0), new QuestLineStepCompletedRequirement('Celio\'s Errand', 2, GameConstants.AchievementOption.less)]), +}); +const SeviiRuby = new NPC('Ruby', [ + '', + 'You found a Ruby!', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Celio\'s Errand', 3), new QuestLineStepCompletedRequirement('Celio\'s Errand', 4, GameConstants.AchievementOption.less)]) }); +const SeviiLorelei = new NPC('Lorelei', [ + 'Thank you. But this is awful... I was born and raised here on these islands. I had no idea that those horrible criminals were loose here…', +], { + image: 'assets/images/npcs/Lorelei.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Celio\'s Errand', 6), new QuestLineStepCompletedRequirement('Celio\'s Errand', 8, GameConstants.AchievementOption.less)]), +}); +const SeviiGideon1 = new NPC('Gideon', [ + 'I can\'t figure out how I\'m supposed to get inside. Let me tell you, I found this place. Don\'t look so envious, will you?', +], { + image: 'assets/images/npcs/Scientist Gideon.png', + requirement: new QuestLineStepCompletedRequirement('Celio\'s Errand', 7, GameConstants.AchievementOption.less), +}); +const SeviiGideon2 = new NPC('Gideon', [ + 'Fufu... Fufufufu... I guessed right. I was right in tailing you! I knew there was a Sapphire here, so it belongs to me! I\'ll sell it to Team Rocket for serious money.', + '...D-don\'t glare at me like that! If you want it back, why don\'t you go get it after I sell it? I\'ll even tell you one of the passwords to Team Rocket\'s Warehouse. The Warehouse password I know is "Yes, nah, Chansey." I\'m done. Don\'t think badly of me!', +], { + image: 'assets/images/npcs/Scientist Gideon.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Celio\'s Errand', 7), new QuestLineStepCompletedRequirement('Celio\'s Errand', 9, GameConstants.AchievementOption.less)]), +}); +const SixIslandSeviiRoamerNPC = new RoamerNPC('Bug Catcher John', [ + 'Apparently some kid released one of his Pokémon around here. That Pokémon, its partner, and for whatever reason, the Legendary Beasts from Johto have been seen roaming on {ROUTE_NAME}.', +], GameConstants.Region.kanto, RoamingPokemonList.findGroup(GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567), 'assets/images/npcs/Bug Catcher.png', new GymBadgeRequirement(BadgeEnums.Elite_OrangeChampion)); +const AlteringCaveRuinManiac1 = new NPC('Ruin Maniac', [ + 'Hello. You want to know what I\'m doing in this pointless dead end cave?', + 'Well, I\'m trying to dig to a secluded island north of here. I\'ve heard there are some unusual Pokémon there.', + 'Want to help me? No? Ah, you\'re busy dealing with a group of Team Rocket? Well, I wish you luck with that', + 'Once I finish it you\'ll have a way to get to get to that island too, so make sure to come back later!', +], { + image: 'assets/images/npcs/Ruin Maniac gen3.png', + requirement: new QuestLineCompletedRequirement('Celio\'s Errand', GameConstants.AchievementOption.less), +}); +const AlteringCaveRuinManiac2 = new NPC('Ruin Maniac', [ + 'Wow, that was some back breaking work... But I have done it!', + 'I\'ve dug a tunnel to Pinkan Island! Though, I think I\'ll need to rest for a while first... You go on ahead.', +], { + image: 'assets/images/npcs/Ruin Maniac gen3.png', + requirement: new QuestLineCompletedRequirement('Celio\'s Errand'), +}); +const ValenciaProfIvy = new NPC('Prof. Ivy', [ + 'Hello again! I see you too found a way around the giant cliff.', + 'On this island, Pokémon have changed over the years. I am here to study them.', + 'Oh, you have already encountered them? And you are busy with the Orange League?', + 'Well, good luck to you, then.', +], { image: 'assets/images/npcs/Professor Ivy.png' }); +const TanobyProfIvy = new NPC('Prof. Ivy', [ + 'Hello again! I see you too found your way to these ancient ruins!', + 'A peculiar Pokémon known as Unown lives here. There are 28 different forms of Unown, but only one shows up at a time, but the form that appears changes every time the clock strikes midnight.', + 'There are 2 other ruins like this, one in Johto, and one in Sinnoh. I have heard that in each ruins, there are forms that only appear there. For example, the forms that resemble a question mark and an exclamation point have only been seen here.', + 'Speaking of peculiar Pokémon, I found this unusual variant of Dodrio on an island in this area. Hmm. If you want, you could buy it from me. I am needing some research funds.', +], { image: 'assets/images/npcs/Professor Ivy.png' }); +const PinkanOfficerJenny1 = new NPC('Officer Jenny', [ + 'Have you seen the Pinkan Berries? That is what makes all the Pokémon on this island turn pink.', + 'Hang on, this island is strictly off limits! Pinkan is a protected Pokémon reserve. How did you get here?', + 'Well I suppose you did deal with that Team Rocket branch on Five Island, so I guess I\'ll let you stay, as thanks.', + 'I\'m afraid I can\'t allow you into Pinkan Mountain though. The Pokémon there are extremely territorial.', + 'If you want to prove you can deal with such dangerous Pokémon safely, I suggest defeating the Orange League.', +], { + image: 'assets/images/npcs/Officer Jenny.png', + requirement: new GymBadgeRequirement(BadgeEnums.Elite_OrangeChampion, GameConstants.AchievementOption.less), +}); +const PinkanOfficerJenny2 = new NPC('Officer Jenny', [ + 'Have you seen the Pinkan Berries? That is what makes all the Pokémon on this island turn pink.', + 'Hang on, this island is strictly off limits! Pinkan is a protected Pokémon reserve. How did you get here?', + 'Well I suppose you did deal with that Team Rocket branch on Five Island, so I guess I\'ll let you stay, as thanks.', + 'And since you\'ve conquered the Orange League, I suppose it should be safe to let you into Pinkan Mountain. Just be careful.', +], { + image: 'assets/images/npcs/Officer Jenny.png', + requirement: new MultiRequirement([new GymBadgeRequirement(BadgeEnums.Elite_OrangeChampion), new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 0, GameConstants.AchievementOption.less)]), +}); +const PinkanOfficerJenny3 = new NPC('Officer Jenny', [ + 'Oh it\'s you again! Got some Pinkan Berries to trade?', + 'So long as you\'re not helping those Rocket clowns, we\'ll let you trade for some of those rare Pinkan Pokémon that have only just come to the island.', +], { + image: 'assets/images/npcs/Officer Jenny.png', + requirement: new QuestLineCompletedRequirement('Team Rocket\'s Pinkan Theme Park'), +}); +const ThemeparkTeamRocket1 = new NPC('Jessie & James', [ + 'Oh hello there trainer! What do you mean we\'re not supposed to be here? We toootally got permission from Officer Jenny!', + 'Isn\'t your whole "thing" being helpful? We want to build a theme park to help fund the Pinkan Reserve, but this meddlesome twerp named Ash keeps getting in the way. He\'s even electrocuted us with his damn Pikachu!', + 'We need a bunch of Pinkan Berries to help feed the Pokémon at our theme park, but the twerp keeps zapping us when we try to go collect them.', + 'Would you mind farming some Pinkan Berries to help us grow our supply? We don\'t know how to, but we\'ve heard the Berry Master in Kanto could be helpful?', +], { + requirement: new MultiRequirement([new QuestLineStartedRequirement('Team Rocket\'s Pinkan Theme Park'), new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 1, GameConstants.AchievementOption.less)]), + image: 'assets/images/npcs/Pinkan Jessie & James.png', +}); +const ThemeparkTeamRocket2 = new NPC('Jessie & James', [ + 'Whoa! An actual Pinkan Berry! Now our evil plo- plan! Definitely not evil, our very helpful and good plan!...Ahem. Our plan can now proceed.', + 'Now we can get us some Pinkan\'s for the theme park! Would you mind defeating 500 Pinkan Pokémon in the forest and out in the plains? We\'ll do the catching, you just need to beat \'em', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 1), new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 2, GameConstants.AchievementOption.less)]), + image: 'assets/images/npcs/Pinkan Jessie & James.png', +}); +const ThemeparkTeamRocket3 = new NPC('Jessie & James', [ + 'Nice! Well, it would be nice. Now we have all these berries and Pinkan Pokémon, but nowhere to put \'em all!', + 'We need a bunch of Pixie Plates, and we need some Fairy Gems to help...uh...pay off the contractor?', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 2), new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 3, GameConstants.AchievementOption.less)]), + image: 'assets/images/npcs/Pinkan Jessie & James.png', +}); +const ThemeparkTeamRocket4 = new NPC('Jessie & James', [ + 'Hahahaha! Now our plan can really start! Prepare for trouble, and make it double, because you just built us a profit machine!', + 'We\'re going to make these Pinkan Pokémon perform silly routines and make us a ton of money, no days off for these suckers!', + 'What\'s that? You\'re gonna stop us!? Heh, yeah right! Bring it on twerp!', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 3), new QuestLineStepCompletedRequirement('Team Rocket\'s Pinkan Theme Park', 5, GameConstants.AchievementOption.less)]), + image: 'assets/images/npcs/Pinkan Jessie & James.png', +}); +const Informant1 = new NPC('Informant', [ + 'In a shady warehouse, you find the informant. He is a Mr. Mime, and he doesn\'t seem willing to divulge the information you need.', +], { + image: 'assets/images/npcs/specialNPCs/Mime Interview.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 2), new QuestLineStepCompletedRequirement('Detective Pikachu', 4, GameConstants.AchievementOption.less)]), +}); +const Informant2 = new NPC('Informant', [ + 'The Mr. Mime signals to you that this is an illicit drug called R. It is frequently used in the underground fighting rings near the Battle Frontier.', +], { + image: 'assets/images/npcs/specialNPCs/Mime Interview.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 4), new QuestLineStepCompletedRequirement('Detective Pikachu', 6, GameConstants.AchievementOption.less)]), +}); +const Mewtwo1 = new NPC('Mewtwo', [ + 'You were wise to seek me out. Howard Clifford has been deceiving you. He is the one making the R drug, and....', + 'A sphere of energy envelops Mewtwo, and he is dragged away by some sort of helicopter. The helicopter has a logo on it: Clifford Industries!', +], { + image: 'assets/images/npcs/specialNPCs/Possessed Mewtwo.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 10), new QuestLineStepCompletedRequirement('Detective Pikachu', 12, GameConstants.AchievementOption.less)]), +}); +const Mewtwo2 = new NPC('Mewtwo', [ + 'Thank you for your help. I have little to offer you in return, but perhaps this will help.', + 'I found Detective Pikachu\'s partner some days ago injured on the side of the road, and have nursed him back to health. I hope this reunion will suffice.', +], { + image: 'assets/images/npcs/specialNPCs/Possessed Mewtwo.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 15), new QuestLineStepCompletedRequirement('Detective Pikachu', 17, GameConstants.AchievementOption.less)]), +}); +const DetectiveRaichu = new NPC('Detective Raichu', [ + 'Thanks for your help, kid! I\'ll stick along with you until our next mystery comes along.', +], { + image: 'assets/images/pokemon/26.02.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 16), new QuestLineStepCompletedRequirement('Detective Pikachu', 17, GameConstants.AchievementOption.less)]), +}); +const ClientSignpost = new NPC('Welcome Sign', [ + 'Welcome to Client Island!', + 'This island is exclusive to those dedicated to reducing server load by downloading the client.', + 'Without your support, Red Spearow here wouldn\'t have any time to relax!', + 'Please drop by the Gift Shop on your way out to make a whole new line of friends.', +], { image: 'assets/images/npcs/other/signpost.png' }); +const RedSpearow = new NPC('Red Spearow', [ + 'SQUAWK! SQUAWK!', + '...', + 'The Red Spearow seems to appreciate your visit.', +], { image: 'assets/images/pokemon/21.01.png' }); +const NewIslandJessieAndJames = new RoamerNPC('Jessie & James', ['Mewtwo\'s Clones have escaped and are Roaming freely across Kanto. Will you help us track them down? It\'s for a good cause, we swear.'], GameConstants.Region.kanto, 0, 'assets/images/npcs/Jessie and James.png', new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('New Island'))); +const NewIslandAsh1 = new NPC('Ash Ketchum', ['Mewtwo has created an army of Clones. Please help me fight them, I have to save Pikachu!'], { + image: 'assets/images/npcs/Ash Ketchum.png', + requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('New Island'), GameConstants.AchievementOption.less), +}); +const NewIslandAsh2 = new NPC('Ash Ketchum', ['There are still Clones left in Mewtwos army! Help me fight them!'], { + image: 'assets/images/npcs/Ash Ketchum.png', + requirement: new MultiRequirement([new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('New Island')), new ClearDungeonRequirement(10, GameConstants.getDungeonIndex('New Island'), GameConstants.AchievementOption.less)]), +}); +const BugCatcherPinsir = new NPC('Bug Catcher Michel', [ + 'I heard there was a stone hidden in the Safari Zone that makes Pinsir stronger!', + 'But... I don\'t have a high enough Safari Level to find it.', +], { image: 'assets/images/npcs/Bug Catcher.png', requirement: new MaxRegionRequirement(GameConstants.Region.kalos) }); +const CandyMan = new NPC('The Candy Man', [ + 'I sure do love candy. The rarer, the better!', + 'I\'ve got a real SWEET-TOOTH', +]); +const SpeedyRunner = new NPC('Speedy Runner', [ + 'I don\'t have time to listen to people explain stuff I already know.', + 'Some old man tried to teach me how to catch Pokémon earlier. I just shouted', + 'HOW-BLU-COIN?', + 'at him and left.', +], { image: 'assets/images/npcs/Jogger.png' }); +const UnrivaledBlue = new NPC('Blue', [ + 'So, you said you want to know where you might find Mewtwo\'s Mega Stones, right?', + 'Well, you\'re in luck! I was talking to an old rival of mine the other day, and she said she was looking for Mewtwo, and that she already had two of its Mega Stones. Unfortunately for her, they were the same one.', + 'Not much use in having two of the same Mega Stone, so she might be willing to give one up. If you want to find her, you should check out Cerulean Cave.', +], { + image: 'assets/images/npcs/Blue-lgpe.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('An Unrivaled Power', 2), new QuestLineStepCompletedRequirement('An Unrivaled Power', 4, GameConstants.AchievementOption.less)]), +}); +const UnrivaledGreen1 = new NPC('Green', [ + 'Ow! You were hit by a low-flying Poké Ball!', + 'Oh, whoops! You\'re not a Pokémon! Sorry, it\'s so dark in here, I saw you and thought you were some kind of Pokémon.', + 'Well, uh... nice to meet you. I\'m Green! So hey, I\'m just curious... Are you here because you\'re also looking for... y\'know, something special?', + 'R-right! Mewtwo! ...Drat, so you knew about it already, huh.......', + 'Whaaaaaaaaaat?! You\'ve already caught it?! Hey, no fair! I was planning on catching it first!', +], { + image: 'assets/images/npcs/Green.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('An Unrivaled Power', 4), new QuestLineStepCompletedRequirement('An Unrivaled Power', 6, GameConstants.AchievementOption.less)]), +}); +const UnrivaledGreen2 = new NPC('Green', [ + 'Wow, you\'re strong! Well, I guess that\'s that. Here, you can have this.', + '


    You obtained the Mewtwonite X!', + 'Oh, I know! Why don\'t you become one of my Pokémon, together with Mewtwo?', + 'A Poké Ball came flying at you!', + 'A Poké Ball came flying at you!', + 'Hee hee hee... A Poké Ball came flying at you!', + 'A Poké Ball came flying at you!', + 'A Poké Ball came flying at you! Think about it, ok?', +], { + image: 'assets/images/npcs/Green.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('An Unrivaled Power', 6), new QuestLineStepCompletedRequirement('An Unrivaled Power', 8, GameConstants.AchievementOption.less)]), +}); +const AnomalyMewtwo1 = new NPC('Anomaly Mewtwo', [ + 'That child... She wished to possess me, like a mere animal. She would have cared little for my own desires. I wish only to live in peace, without being disturbed.', + 'You say you would help me? But you are no different. You even possess another of my kind. You do not fool me.', + 'I will leave this place now, to find what I desire. Do not follow me.', +], { + image: 'assets/images/pokemon/150.01.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('An Unrivaled Power', 7), new QuestLineStepCompletedRequirement('An Unrivaled Power', 9, GameConstants.AchievementOption.less)]), +}); +const BillGrandpaChristmas = new NPC('Bill\'s Grandpa', [ + 'Did you find all of the Santa Jynx?', + 'I hope they don\'t come back!', +], { + image: 'assets/images/npcs/Bill\'s Grandpa without Eevee.png', + requirement: new OneFromManyRequirement([ + new MultiRequirement([ + new ItemOwnedRequirement('Christmas_present', 11), + new TemporaryBattleRequirement('Santa Jynx 1'), + ]), + new MultiRequirement([ + new ItemOwnedRequirement('Christmas_present', 27), + new TemporaryBattleRequirement('Santa Jynx 2'), + ]), + new MultiRequirement([ + new ItemOwnedRequirement('Christmas_present', 49), + new TemporaryBattleRequirement('Santa Jynx 3'), + ]), + new MultiRequirement([ + new ItemOwnedRequirement('Christmas_present', 150), + new TemporaryBattleRequirement('Santa Jynx 4'), + ]), + ]), +}); +//Kanto Towns +TownList['Pallet Town'] = new Town('Pallet Town', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new BulletinBoard(GameConstants.BulletinBoards.Kanto)], { + npcs: [PalletProfOak, PalletCelebiProfOak1, PalletCelebiProfOak2, PalletMom1, PalletMom2], +}); +TownList['Viridian City'] = new Town('Viridian City', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [ViridianCityShop, TemporaryBattleList['Unrivaled Blue']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 1)], + npcs: [ViridianCityOldMan1, ViridianCityOldMan2, ViridianCityOldMan3, UnrivaledBlue], +}); +TownList['Pewter City'] = new Town('Pewter City', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [PewterCityShop], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 2), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Viridian Forest')), + ], + npcs: [PewterBattleItemRival, PewterScientist], +}); +TownList['Route 4 Pokémon Center'] = new Town('Route 4 Pokémon Center', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [Route3Shop], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 3), + ], + npcs: [Route3ShadySalesman], + ignoreAreaStatus: true, +}); +TownList['Cerulean City'] = new Town('Cerulean City', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [CeruleanCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Cerulean City']), new MoveToDungeon(dungeonList['Cerulean Cave'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 4)], + npcs: [CeruleanKantoBerryMaster, CeruleanSuperNerd, Mewtwo1, Mewtwo2, DetectiveRaichu], +}); +TownList['Bill\'s House'] = new Town('Bill\'s House', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [ + TemporaryBattleList['Bill\'s Grandpa'], + TemporaryBattleList['Santa Jynx 1'], + TemporaryBattleList['Santa Jynx 2'], + TemporaryBattleList['Santa Jynx 3'], + TemporaryBattleList['Santa Jynx 4'], +], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 25)], + npcs: [BillsGrandpa1, BillsGrandpa2, BillsGrandpa3, BillsGrandpa4, BillsGrandpa5, BillsGrandpa6, BillsGrandpa7, BillsGrandpa8, BillsHouseEusine, BillGrandpaChristmas], +}); +TownList['Vermilion City'] = new Town('Vermilion City', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [VermilionCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Vermilion City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 6)], + npcs: [VermilionFanClubChairman, VermilionShardApprentice, VermilionEusine], +}); +TownList['Lavender Town'] = new Town('Lavender Town', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [LavenderTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Lavender Town']), new MoveToDungeon(dungeonList['Pokémon Tower'])], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Rock Tunnel'))], + npcs: [LavenderMrFuji, LavenderChanneler, LavenderShopper], +}); +TownList['Celadon City'] = new Town('Celadon City', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [CeladonDepartmentStoreShop, CeladonCityShop, new MoveToDungeon(dungeonList['Rocket Game Corner'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 7)], + npcs: [BigSpender, EggHuntErika, CandyMan], +}); +TownList['Saffron City'] = new Town('Saffron City', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [SaffronCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Saffron City']), new MoveToDungeon(dungeonList['Silph Co.']), TemporaryBattleList['Fighting Dojo'], TemporaryBattleList['Mime Interview']], { + requirements: [new OneFromManyRequirement([ + new GymBadgeRequirement(BadgeEnums.Rainbow), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Rocket Game Corner')), + ])], + npcs: [SaffronBattleItemRival, SaffronBreeder, Informant1, Informant2], +}); +TownList['Fuchsia City'] = new Town('Fuchsia City', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [FuchsiaCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Fuchsia City'])], { + requirements: [new OneFromManyRequirement([ + new RouteKillRequirement(10, GameConstants.Region.kanto, 18), + new RouteKillRequirement(10, GameConstants.Region.kanto, 15), + ])], + npcs: [FuchsiaKantoRoamerNPC, FuchsiaEusine], +}); +TownList['Safari Zone'] = new Town('Safari Zone', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new SafariTownContent()], { + requirements: [new CustomRequirement(ko.pureComputed(() => +App.game.keyItems.hasKeyItem(KeyItemType.Safari_ticket)), 1, 'Obtain the Safari Ticket')], + npcs: [BugCatcherPinsir], +}); +TownList['Cinnabar Island'] = new Town('Cinnabar Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [CinnabarIslandShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Cinnabar Island']), new MoveToDungeon(dungeonList['Pokémon Mansion'])], { + requirements: [new OneFromManyRequirement([ + new RouteKillRequirement(10, GameConstants.Region.kanto, 20), + new RouteKillRequirement(10, GameConstants.Region.kanto, 21), + ])], + npcs: [KantoFossilNpc, CinnabarIslandResearcher], +}); +TownList['Indigo Plateau Kanto'] = new Town('Indigo Plateau Kanto', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [GymList['Elite Lorelei'], GymList['Elite Bruno'], GymList['Elite Agatha'], GymList['Elite Lance'], GymList['Champion Blue'], pokeLeagueShop(), TemporaryBattleList['Unrivaled Red']], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 23), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Victory Road')), + ], + npcs: [SpeedyRunner], +}); +TownList['One Island'] = new Town('One Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [OneIslandShop, new DockTownContent()], { + requirements: [new GymBadgeRequirement(BadgeEnums.Volcano)], + npcs: [OneIslandCelio1, OneIslandCelio2, OneIslandCelio3, OneIslandCelio4, OneIslandCelio5, OneIslandCelio6, OneIslandCelio7, OneIslandYoungster], +}); +TownList['Mt. Ember'] = new Town('Mt. Ember', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [new MoveToDungeon(dungeonList['Mt. Ember Summit']), new MoveToDungeon(dungeonList['Ruby Path'], new MaxRegionRequirement(GameConstants.Region.hoenn)), TemporaryBattleList['Sevii Rocket Grunt 1'], TemporaryBattleList['Sevii Rocket Grunt 2']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 27)], + npcs: [SeviiRocketGrunts], +}); +TownList['Two Island'] = new Town('Two Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [TwoIslandShop], { + requirements: [new QuestLineStepCompletedRequirement('Bill\'s Errand', 0)], + npcs: [TwoIslandGameCornerOwner1, TwoIslandGameCornerOwner2], +}); +TownList['Three Island'] = new Town('Three Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [ThreeIslandShop, TemporaryBattleList['Biker Goon 1'], TemporaryBattleList['Biker Goon 2'], TemporaryBattleList['Biker Goon 3'], TemporaryBattleList['Cue Ball Paxton']], { + requirements: [new QuestLineStepCompletedRequirement('Bill\'s Errand', 1)], + npcs: [ThreeIslandBiker1, ThreeIslandBiker2, ThreeIslandBiker3], +}); +TownList['Professor Ivy\'s Lab'] = new Town('Professor Ivy\'s Lab', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [], { + requirements: [new QuestLineStepCompletedRequirement('Unfinished Business', 0)], + npcs: [CelebiProfIvy], +}); +TownList['Client Island'] = new Town('Client Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [ClientIslandShop], { + requirements: [new ClientRequirement(), new GymBadgeRequirement(BadgeEnums.Volcano)], + npcs: [ClientSignpost, RedSpearow], +}); +TownList['Four Island'] = new Town('Four Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [FourIslandShop, new MoveToDungeon(dungeonList['Icefall Cave'])], { + requirements: [new QuestLineStepCompletedRequirement('Celio\'s Errand', 5)], +}); +TownList['Five Island'] = new Town('Five Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [FiveIslandShop, new DockTownContent()], { + requirements: [new QuestLineStepCompletedRequirement('Celio\'s Errand', 5)], +}); +TownList['Rocket Warehouse'] = new Town('Rocket Warehouse', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [TemporaryBattleList['Sevii Rocket Grunt 3'], TemporaryBattleList['Sevii Rocket Grunt 4'], TemporaryBattleList['Sevii Rocket Grunt 5'], TemporaryBattleList['Sevii Rocket Ariana'], TemporaryBattleList['Sevii Rocket Archer'], TemporaryBattleList['Scientist Gideon']], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 30), + new QuestLineStepCompletedRequirement('Celio\'s Errand', 8), + ], +}); +TownList['Six Island'] = new Town('Six Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [SixIslandShop], { + requirements: [new QuestLineStepCompletedRequirement('Celio\'s Errand', 5)], + npcs: [SixIslandSeviiRoamerNPC], +}); +TownList['Dotted Hole'] = new Town('Dotted Hole', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 37)], + npcs: [SeviiGideon1, SeviiGideon2], +}); +TownList['Seven Island'] = new Town('Seven Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [SevenIslandShop], { + requirements: [new QuestLineStepCompletedRequirement('Celio\'s Errand', 5)], +}); +TownList['Mikan Island'] = new Town('Mikan Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [MikanIslandShop], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Tanoby Ruins'))], +}); +TownList['Navel Island'] = new Town('Navel Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [NavelIslandShop], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Lost Cave'))], +}); +TownList['Trovita Island'] = new Town('Trovita Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [TrovitaIslandShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 41)], +}); +TownList['Kumquat Island'] = new Town('Kumquat Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [KumquatIslandShop], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Icefall Cave'))], +}); +TownList['Pummelo Island'] = new Town('Pummelo Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [GymList['Supreme Gym Leader Drake'], pokeLeagueShop(), new BulletinBoard(GameConstants.BulletinBoards.Sevii4567)], { + requirements: [ + new GymBadgeRequirement(BadgeEnums['Coral-Eye']), + new GymBadgeRequirement(BadgeEnums.Sea_Ruby), + new GymBadgeRequirement(BadgeEnums.Spike_Shell), + new GymBadgeRequirement(BadgeEnums.Jade_Star), + ], +}); +TownList['Valencia Pokémon Center'] = new Town('Valencia Pokémon Center', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [ValenciaPokémonCenterShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 40)], + npcs: [ValenciaProfIvy], +}); +TownList['Pinkan Pokémon Reserve'] = new Town('Pinkan Pokémon Reserve', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [PinkanPokémonReserveShop, PinkanBerryMaster, TemporaryBattleList['Pinkan Jessie & James'], TemporaryBattleList['Pinkan Officer Jenny']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kanto, 42)], + npcs: [PinkanOfficerJenny1, PinkanOfficerJenny2, PinkanOfficerJenny3, ThemeparkTeamRocket1, ThemeparkTeamRocket2, ThemeparkTeamRocket3, ThemeparkTeamRocket4], +}); +//Kanto Dungeons +TownList['Viridian Forest'] = new DungeonTown('Viridian Forest', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new RouteKillRequirement(10, GameConstants.Region.kanto, 2)]); +TownList['Mt. Moon'] = new DungeonTown('Mt. Moon', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new RouteKillRequirement(10, GameConstants.Region.kanto, 3)], [TemporaryBattleList['Silver 6']]); +TownList['Diglett\'s Cave'] = new DungeonTown('Diglett\'s Cave', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new RouteKillRequirement(10, GameConstants.Region.kanto, 6)]); +TownList['Rock Tunnel'] = new DungeonTown('Rock Tunnel', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 10), + new GymBadgeRequirement(BadgeEnums.Cascade), +]); +TownList['Rocket Game Corner'] = new DungeonTown('Rocket Game Corner', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new RouteKillRequirement(10, GameConstants.Region.kanto, 7)]); +TownList['Pokémon Tower'] = new DungeonTown('Pokémon Tower', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 7), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Rocket Game Corner')), +], [TemporaryBattleList['Blue 4']]); +TownList['Silph Co.'] = new DungeonTown('Silph Co.', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new TemporaryBattleRequirement('Blue 4')], [TemporaryBattleList['Blue 5']], { + npcs: [LaprasGift], +}); +TownList['Power Plant'] = new DungeonTown('Power Plant', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 9), + new GymBadgeRequirement(BadgeEnums.Soul), +]); +TownList['Seafoam Islands'] = new DungeonTown('Seafoam Islands', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 19), + new GymBadgeRequirement(BadgeEnums.Rainbow), +]); +TownList['Pokémon Mansion'] = new DungeonTown('Pokémon Mansion', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new OneFromManyRequirement([ + new RouteKillRequirement(10, GameConstants.Region.kanto, 20), + new RouteKillRequirement(10, GameConstants.Region.kanto, 21), + ])]); +TownList['Mt. Ember Summit'] = new DungeonTown('Mt. Ember Summit', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [new RouteKillRequirement(10, GameConstants.Region.kanto, 27)]); +TownList['Berry Forest'] = new DungeonTown('Berry Forest', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [new RouteKillRequirement(10, GameConstants.Region.kanto, 29)]); +TownList['New Island'] = new DungeonTown('New Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new SpecialEventRequirement('Mewtwo strikes back!')], [TemporaryBattleList['Ash Ketchum New Island']], { + npcs: [NewIslandAsh1, NewIslandAsh2, NewIslandJessieAndJames], +}); +TownList['Victory Road'] = new DungeonTown('Victory Road', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new RouteKillRequirement(10, GameConstants.Region.kanto, 23)]); +TownList['Cerulean Cave'] = new DungeonTown('Cerulean Cave', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Kanto, [new GymBadgeRequirement(BadgeEnums.Elite_KantoChampion)], [TemporaryBattleList['Unrivaled Green']], { + npcs: [UnrivaledGreen1, UnrivaledGreen2, AnomalyMewtwo1], +}); +TownList['Ruby Path'] = new DungeonTown('Ruby Path', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii123, [new QuestLineStepCompletedRequirement('Celio\'s Errand', 2)], [], { + npcs: [SeviiRuby], +}); +TownList['Icefall Cave'] = new DungeonTown('Icefall Cave', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [new QuestLineStepCompletedRequirement('Celio\'s Errand', 5)], [], { + npcs: [SeviiLorelei], +}); +TownList['Sunburst Island'] = new DungeonTown('Sunburst Island', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [new RouteKillRequirement(10, GameConstants.Region.kanto, 31)], []); +TownList['Lost Cave'] = new DungeonTown('Lost Cave', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [new RouteKillRequirement(10, GameConstants.Region.kanto, 33)], []); +TownList['Pattern Bush'] = new DungeonTown('Pattern Bush', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [new RouteKillRequirement(10, GameConstants.Region.kanto, 34)], []); +TownList['Altering Cave'] = new DungeonTown('Altering Cave', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [new RouteKillRequirement(10, GameConstants.Region.kanto, 36)], [], { + npcs: [AlteringCaveRuinManiac1, AlteringCaveRuinManiac2], +}); +TownList['Tanoby Ruins'] = new DungeonTown('Tanoby Ruins', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [new RouteKillRequirement(10, GameConstants.Region.kanto, 39)], [TanobyRuinsShop], { + npcs: [TanobyProfIvy], +}); +TownList['Pinkan Mountain'] = new DungeonTown('Pinkan Mountain', GameConstants.Region.kanto, GameConstants.KantoSubRegions.Sevii4567, [ + new RouteKillRequirement(10, GameConstants.Region.kanto, 42), + new GymBadgeRequirement(BadgeEnums.Elite_OrangeChampion), +], []); +//Johto Shops +const CherrygroveCityShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.xClick, + ItemList.SmallRestore, +]); +const VioletCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Token_collector, + ItemList.Lucky_egg, + ItemList.MediumRestore, + ItemList.Mystery_egg, + ItemList.Wonder_Chest, + ItemList.Togepi, +]); +const AzaleaTownShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.Grass_egg, + ItemList.Leaf_stone, + ItemList.Kings_rock, +]); +const GoldenrodDepartmentStoreShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.xClick, + ItemList.Lucky_egg, + ItemList.Dowsing_machine, + ItemList.Token_collector, + ItemList.Lucky_incense, + ItemList.SmallRestore, + ItemList.MediumRestore, +], 'Department Store'); +const EcruteakCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Lucky_egg, + ItemList.Fire_egg, + ItemList.Fire_stone, + ItemList.Soothe_bell, +]); +const OlivineCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, + ItemList.Water_egg, + ItemList.Electric_egg, + ItemList.Water_stone, + ItemList.Thunder_stone, + ItemList.Metal_coat, + ItemList.HatcheryHelperCarey, +]); +const CianwoodCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xClick, + ItemList.Fighting_egg, + ItemList.Moon_stone, + ItemList.Sun_stone, +]); +const MahoganyTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Lucky_egg, + ItemList.Linking_cord, + ItemList.Upgrade, + ItemList.HatcheryHelperDakota, +]); +const BlackthornCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.LargeRestore, + ItemList.Dragon_egg, + ItemList.Dragon_scale, +]); +const JohtoBerryMaster = new BerryMasterShop(GameConstants.BerryTraderLocations['Goldenrod City'], [ + ItemList.Boost_Mulch, + ItemList.Rich_Mulch, + ItemList.Surprise_Mulch, + ItemList.Amaze_Mulch, + ItemList.Freeze_Mulch, + ItemList.Berry_Shovel, + ItemList.Mulch_Shovel, + ItemList.Squirtbottle, + ItemList.FarmHandBailey, + ItemList.ChopleBerry, + ItemList.KebiaBerry, + ItemList.ShucaBerry, + ItemList.ChartiBerry, +], 'Johto Berry Master'); +//Johto Contest Shop +const JohtoContestShop = new Shop([ + ItemList['Sudowoodo (Golden)'], +], 'Contest Shop'); +// Johto NPCs +const CherrygroveMrPokemon = new NPC('Mr. Pokémon', [ + 'Welcome to Johto! This is where the first ever Pokémon egg was found long ago.', + 'Astounding breakthroughs have been made since then. We can now store Pokémon eggs for longer and queue them up for breeding.', + 'This new technology only allows up to four stored eggs for now, though.', +], { image: 'assets/images/npcs/Mr. Pokémon.png' }); +const VioletEarlDervish = new NPC('Earl Dervish', [ + 'Earl, I am! Teach you, I will! To be a better trainer!', + 'Some Pokémon babies, only from Day Care they come! Hatch! Hatch! Hatch!', +]); +const VioletPrimo = new NPC('Primo', [ + 'You’re a trainer, right? It’s me, the Poké Dude! I’m the guy on Teachy TV!', + 'Your Item Bag has a bunch of nifty features! Take stuff in the Held Items pocket, for instance. You can use a Held Item to empower your Pokémon or acquire unique effects. How do you use it? Well, here’s how it works.', + 'Once you have obtained a Held Item, visit your Item Bag. They are most often found in Dungeons, but some, like the Wonder Chest, are for sale!', + 'From there, go into your Held Items pocket and once an item is selected, you can use it by choosing from the list of available Pokémon to hold it.', + 'Choose who you select carefully! Once you remove a Held Item from your Pokémon, the item will break!', + 'All righty, be seeing you!', +]); +const AzaleaElder = new NPC('Elder Li', [ + 'You want to know about Celebi? It hasn\'t been seen in a long time.', + 'I remember, back in the day, it was the Guardian of Ilex Forest. It was a playful Pokémon. It loved playing with children.', + 'It was especially close to a kid named Samuel Oak. When he suddenly moved to Kanto, Celebi was quite sad. He never even said goodbye! I wonder what became of that boy. Maybe he knows more of where Celebi is right now. They certainly have Unfinished Business.', + 'Celebi got over it very quick, playful as it is. There are always other kids to play with. Then, some time later, a strange figure went into the forest with a golden Poké Ball. The Guardian hasn\'t been seen since.', +], { image: 'assets/images/npcs/Elder Li.png' }); +const AzaleaHiker = new NPC('Hiker Daniel', [ + 'The PokéManiacs in Union Cave are restless. They have been ranting and raving about a weekly visitor.', + 'According to them, a strange Pokémon\'s cries can be heard from a lake deep inside the cave.', + 'I\'ve never heard it myself. Apparently it only happens on Fridays.', +], { + image: 'assets/images/npcs/Hiker.png', + requirement: new GymBadgeRequirement(BadgeEnums.Fog), +}); +const AzaleaCelebiKurt1 = new NPC('Kurt', [ + 'Those poor Slowpoke! I\'m not doing anything until those disgusting Rockets are gone!', +], { + image: 'assets/images/npcs/Kurt.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 2), new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Slowpoke Well'), GameConstants.AchievementOption.less)]), +}); +const AzaleaCelebiKurt2 = new NPC('Kurt', [ + 'Thank you for your help at the Slowpoke Well! You have something for me?', + 'So this is it then? The GS Ball. I can see why old Oak wants me to have a crack at it.', + 'I will need some time to figure this out. Please come back later.', +], { + image: 'assets/images/npcs/Kurt.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 2), new QuestLineStepCompletedRequirement('Unfinished Business', 3, GameConstants.AchievementOption.less), new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Slowpoke Well'))]), +}); +const AzaleaCelebiKurt3 = new NPC('Kurt', [ + 'Getting closer to the solution...', + 'I think I know what\'s in there... Better give Oak a call.', + 'What? Oh, I\'m just talking to myself. I\'m not done yet. Please come back later.', +], { + image: 'assets/images/npcs/Kurt.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 3), new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion, GameConstants.AchievementOption.less)]), +}); +const AzaleaCelebiKurt4 = new NPC('Kurt', [ + 'Welcome back Champ! I have good news and bad news.', + 'Bad news first. I didn\'t manage to open the ball. It\'s just stuck. No way to get in there. Better give up on it. This story ends here.', + 'Naah! Just kidding! Imagine though, how disappointing that would be. What an anticlimax!', + 'Good news first then, I managed to open the ball! And there was a Celebi inside! Bad news, the Celebi immediately left. It just flew away.', + 'Old Oak apparently had an encounter with this Celebi back when he was still young Oak. And he\'s here! He might know where the Celebi went, you should have a chat with him.', +], { + image: 'assets/images/npcs/Kurt.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 3), new QuestLineStepCompletedRequirement('Unfinished Business', 5, GameConstants.AchievementOption.less), new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion)]), +}); +const AzaleaCelebiOak1 = new NPC('Prof. Oak', [ + 'I knew it! I knew that Celebi was in there! Well, I didn\'t actually know. I had a feeling.', + 'That Celebi is an old friend of mine. Back in the day it liked to hang out at the old shrine in Ilex Forest. You should go check it out and try to catch Celebi.', + 'I can\'t think of a better trainer for this Celebi.', +], { + image: 'assets/images/npcs/Professor Oak.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 4), new QuestLineStepCompletedRequirement('Unfinished Business', 6, GameConstants.AchievementOption.less)]), +}); +const AzaleaCelebiOak2 = new NPC('Prof. Oak', [ + 'Celebi wasn\'t there? Strange, usually it loves to play with young people at the shrine.', + 'Wait. You saw a Pichu with a spiked ear?! We used to play with it at that shrine way back when! Looks like it hasn\'t aged a day!', + 'It sounds like you encountered a Time Distortion. Celebi is sensitive to time, it must be distressed. I have heard rumors of something similar going on at Tohjo Falls. Maybe if you clear up that Time Distortion, Celebi will want to come out to play?', +], { + image: 'assets/images/npcs/Professor Oak.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 7), new QuestLineStepCompletedRequirement('Unfinished Business', 9, GameConstants.AchievementOption.less)]), +}); +const AzaleaCelebiOak3 = new NPC('Prof. Oak', [ + 'So Giovanni was there at the Falls while you were dealing with that mess at the Radio Tower? If only we had known, we could have had him arrested right then and there.', + 'The Time Distortion seems to have cleared up. Celebi should be happy now. You should go check out the Shrine again.', +], { + image: 'assets/images/npcs/Professor Oak.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 10), new QuestLineStepCompletedRequirement('Unfinished Business', 12, GameConstants.AchievementOption.less)]), +}); +const AzaleaCelebiOak4 = new NPC('Prof. Oak', [ + 'What\'s that? Celebi went back into the forest? Well, follow it!', + 'If it wants to play I\'m sure a great trainer such as yourself can figure out a way that you can be friends and play all the time!', +], { + image: 'assets/images/npcs/Professor Oak.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 12), new QuestLineStepCompletedRequirement('Unfinished Business', 13, GameConstants.AchievementOption.less)]), +}); +const AzaleaCelebiOak5 = new NPC('Prof. Oak', [ + 'I\'m glad Celebi has been released from that wretched prison and has found a home with a great young trainer like yourself. I\'m going back to Kanto.', + '...', + 'Goodbye Celebi.', +], { + image: 'assets/images/npcs/Professor Oak.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 13), new QuestLineCompletedRequirement('Unfinished Business', GameConstants.AchievementOption.less)]), +}); +const IlexForestShrine1 = new NPC('Investigate the Shrine', [ + 'Something strange is going on here. The air seems to curve around itself. You feel like you\'re here, but also not here at the same time.', + 'No sign of Celebi, but you do see a strange looking Pichu approaching.', +], { + image: 'assets/images/npcs/other/Ilex Forest.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 5), new QuestLineStepCompletedRequirement('Unfinished Business', 7, GameConstants.AchievementOption.less)]), +}); +const IlexForestShrine2 = new NPC('Investigate the Shrine', [ + 'Everything is normal.', + 'Celebi is here! It seems to want to play with you, but every time you approach it backs off. It\'s luring you deeper into the forest!', + 'What would the professor do?', +], { + image: 'assets/images/npcs/other/Ilex Forest.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 11), new QuestLineStepCompletedRequirement('Unfinished Business', 13, GameConstants.AchievementOption.less)]), +}); +const IlexForestPichuFan = new NPC('Pichu-Fan', [ + 'I\'m looking for a strange Pichu, have you seen it? According to rumors, its favorite hiding spots are chests...', +], { + image: 'assets/images/npcs/Poké Kid.png', + requirement: new QuestLineStepCompletedRequirement('Unfinished Business', 7), +}); +const EcruteakBill = new NPC('Bill', [ + 'I traveled here all the way from Goldenrod to buy a Soothe Bell for my Eevee.', + 'When I use a Soothe Bell on Eevee it can evolve into Espeon or Umbreon. It depends on the time. Espeon during the day, Umbreon at night.', + 'I only brought enough Quest Points for one Soothe Bell. It\'s so hard to choose...', +], { image: 'assets/images/npcs/Bill.png' }); +const OlivineLighthouseJasmine1 = new NPC('Jasmine', [ + '...This Pokémon always kept the sea lit at night... But it suddenly got sick... It’s gasping for air...', + '...I understand that there is a wonderful Pharmacy in Cianwood... But that’s across the sea... And I can’t leave Amphy unattended...', + 'May I ask you to get some medicine for me? Please?', +], { + image: 'assets/images/npcs/Jasmine.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Sick Ampharos', 0), new QuestLineStepCompletedRequirement('The Sick Ampharos', 4, GameConstants.AchievementOption.less)]), +}); +const CianwoodCityPharmacist1 = new NPC('Pharmacist', [ + 'Huh? You need medicine? Your Pokémon appear to be fine. Is something worrying you?', + 'The Lighthouse Pokémon is in trouble? I\'ll prepare some medicine right now but it will take some time!', +], { + image: 'assets/images/npcs/Scientist (male).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Sick Ampharos', 1), new QuestLineStepCompletedRequirement('The Sick Ampharos', 3, GameConstants.AchievementOption.less)]), +}); +const CianwoodCityPharmacist2 = new NPC('Pharmacist', [ + 'I got it! This ought to do the trick.', + 'You got a \'Secret Potion\'', +], { + image: 'assets/images/npcs/Scientist (male).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Sick Ampharos', 3), new QuestLineStepCompletedRequirement('The Sick Ampharos', 4, GameConstants.AchievementOption.less)]), +}); +const OlivineLighthouseMedicineAmphy = new NPC('Give medicine to Amphy', [ + 'Palu! Palulu!', + 'Ampharos seems to feel better.', +], { + image: 'assets/images/pokemon/181.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Sick Ampharos', 4), new QuestLineStepCompletedRequirement('The Sick Ampharos', 5, GameConstants.AchievementOption.less)]), +}); +const OlivineLighthouseJasmine2 = new NPC('Jasmine', [ + ' ...Oh, I’m so relieved... This is just so wonderful... Thank you so very, very much.', + '...I will return to the Gym...', +], { + image: 'assets/images/npcs/Jasmine.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Sick Ampharos', 5), new QuestLineStepCompletedRequirement('The Sick Ampharos', 6, GameConstants.AchievementOption.less)]), +}); +const OlivineLighthouseAmphy = new NPC('Amphy', [ + 'Palu! Palulu!', +], { + image: 'assets/images/pokemon/181.png', + requirement: new QuestLineCompletedRequirement('The Sick Ampharos'), +}); +const EcruteakEusine = new NPC('Eusine', [ + 'Legends say that when the Brass Tower burned down and became the Burned Tower, three unnamed Pokémon perished in the flames...', + 'Ho-Oh came down from the Tin Tower and revived those Pokémon. They became the Legendary Beasts. Some say these Beasts still inhabit the basement of the Burned Tower.', + 'Could you please clear Burned Tower for me and see if this is true?', +], { + image: 'assets/images/npcs/Eusine.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Legendary Beasts'), new QuestLineStepCompletedRequirement('The Legendary Beasts', 2, GameConstants.AchievementOption.less)]), +}); +const EcruteakPokéfan = new NPC('Pokéfan Derek', [ + 'I saw it! Did you see it?! I saw you go in there! I don\'t know what you did in the Burned Tower, but three great Beasts came running out of there!', + 'It was a great sight to behold. They all went in different directions. I think they are just roaming the region now. My friend Trevor in Blackthorn City can tell you more.', + 'Eusine was here a second ago. He seemed very excited, but then he suddenly left. I don\'t know where he went, but he seemed to be particularly interested in the blue one.', +], { + image: 'assets/images/npcs/PokéManiac.png', + requirement: new QuestLineStepCompletedRequirement('The Legendary Beasts', 2), +}); +const Zuki = new NPC('Kimono Girl Zuki', [ + 'Professor Elm tells me you are a master trainer. Please, show me your skills by training your Pokémon.', +], { + image: 'assets/images/npcs/Kimono Girl.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Whirl Guardian'), new QuestLineStepCompletedRequirement('Whirl Guardian', 1, GameConstants.AchievementOption.less)]), +}); +const Naoko = new NPC('Kimono Girl Naoko', [ + 'I seem to have lost my way in the forest. Can you show me the way out?', +], { + image: 'assets/images/npcs/Kimono Girl.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Whirl Guardian', 1), new QuestLineStepCompletedRequirement('Whirl Guardian', 3, GameConstants.AchievementOption.less)]), +}); +const Miki = new NPC('Kimono Girl Miki', [ + 'My sisters Zuki and Naoko tell me you have helped them, and I thank you. Please help find my other two sisters, Sayo and Kuni. Please accept this as a token of my gratitude.', +], { + image: 'assets/images/npcs/Kimono Girl.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Whirl Guardian', 3), new QuestLineStepCompletedRequirement('Whirl Guardian', 5, GameConstants.AchievementOption.less)]), +}); +const Sayo = new NPC('Kimono Girl Sayo', [ + 'Excuse me! I\'m stuck out here on the ice, can you give me a quick push?', +], { + image: 'assets/images/npcs/Kimono Girl.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Whirl Guardian', 4), new QuestLineStepCompletedRequirement('Whirl Guardian', 6, GameConstants.AchievementOption.less)]), +}); +const Kuni = new NPC('Kimono Girl Kuni', [ + 'I\'m supposed to meet my sisters, but the streets here just aren\'t safe! Can you protect me from Team Rocket?', +], { + image: 'assets/images/npcs/Kimono Girl.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Whirl Guardian', 6), new QuestLineStepCompletedRequirement('Whirl Guardian', 8, GameConstants.AchievementOption.less)]), +}); +const KimonoGirlsWhirl = new NPC('Kimono Girls', [ + 'With the power of the Tidal Bell, we call to Lugia! Guardian of the Whirl Islands!', +], { + image: 'assets/images/npcs/Kimono Girl.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Whirl Guardian', 8), new QuestLineStepCompletedRequirement('Whirl Guardian', 10, GameConstants.AchievementOption.less)]), +}); +const KimonoGirlsEcruteak = new NPC('Kimono Girls', [ + 'We have been watching you, and see that you have tamed the three Pokémon revived by Ho-Oh in the Burned Tower. Show us your power and we shall give you the Clear Bell, which will call Ho-Oh to the Tin Tower.', +], { + image: 'assets/images/npcs/Kimono Girl.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Rainbow Guardian'), new QuestLineStepCompletedRequirement('Rainbow Guardian', 1, GameConstants.AchievementOption.less)]), +}); +const OlivineSSAquaCaptain = new NPC('S.S. Aqua Captain', [ + 'Aye! At this here dock you can travel to faraway regions! But only ones you’ve travelled to before; I’ve heard the Professor has his own vessel to take ye’ to new lands!', +], { image: 'assets/images/npcs/Sailor.png' }); +const CianwoodPhotographyAide = new NPC('Photography Aide', [ + 'Cameron the Photographer isn’t here right now; he’s off taking photos of Pokémon on Berry Farms. Did you know that some Berries can even attract rare Pokémon?', +]); +const CianwoodEusine = new NPC('Eusine', [ + 'Yo, wasn\'t that Suicune just now? I only caught a quick glimpse, but I thought I saw Suicune running on the waves.', + 'Suicune is beautiful and grand. And it races through towns and roads at simply awesome speeds. It\'s wonderful... I want to see Suicune up close....', + 'I\'ve decided. I\'ll battle you as a trainer to earn Suicune\'s respect! Come on! Let\'s battle now!', +], { + image: 'assets/images/npcs/Eusine.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eusine\'s Chase', 0), new QuestLineStepCompletedRequirement('Eusine\'s Chase', 2, GameConstants.AchievementOption.less)]), +}); +const MahoganySouvenirShopAttendant = new NPC('Souvenir Shop Attendant', [ + 'We’ve got stuff here nobody else has got! But keep any Dowsing Machines you have away from the merchandise… especially the RageCandyBars.', + 'Keep ‘em outside where they belong! I’ve heard those machines can attract Pokémon with Held Items more often, and even more so in Dungeons!', +]); +const MahoGanyOfficerJenny = new NPC('Officer Jenny', [ + 'You made it to Mahogany without troubles? Did you see anything suspicious?', + 'Some adventurers reported criminal activities on route 42. Team Rocket are allegedly attempting to steal newborn Phanpy...', +], { image: 'assets/images/npcs/Officer Jenny.png' }); +const MahoganyEusine = new NPC('Eusine', [ + 'Suicune... How brave it is! How refreshing it is! How beautiful it is! And how quickly it moves! It seems to be heading east.', + 'You seem to be around where Suicune would appear. Well, that\'s OK. My desire to search for Suicune is far beyond yours... My grandpa was...quite into myths. I\'ve heard so many stories about Suicune from him.', + 'Suicune... I won\'t stop following you until I\'ve found out what you\'re after... You hear me!', +], { + image: 'assets/images/npcs/Eusine.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eusine\'s Chase', 3), new QuestLineStepCompletedRequirement('Eusine\'s Chase', 5, GameConstants.AchievementOption.less)]), +}); +const BlackthornJohtoRoamerNPC = new RoamerNPC('Pokéfan Trevor', [ + 'On the news, they are getting more reports of roaming Pokémon appearing on {ROUTE_NAME}!', +], GameConstants.Region.johto, RoamingPokemonList.findGroup(GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto), 'assets/images/npcs/Pokéfan (male).png'); +const RedOldManJohtoNPC = new NPC('Old Man', [ + 'This young fellow comes here every day.', + 'He is a sore loser, poor boy. But he always comes back next day!', + 'But even though he is a sore loser, he will always give his opponent a shiny ball, as a reward for winning.', +], { + image: 'assets/images/npcs/Old Man.png', + requirement: new TemporaryBattleRequirement('Red'), +}); +const TohjoFallsCelebiTimeDistortion = new NPC('Investigate the Time Distortion', [ + 'You are experiencing that same feeling again. Like you\'re not really here.', + 'A man sits in the back of the cave. He is listening to a portable radio.', + '', + '...I don\'t know why you have come here. Anyway, I have to warn you that this is not a place for kids like you.', + 'You have a certain look... You\'re the kid who stood in front of me in Viridian City! I\'m on my way to Goldenrod City to answer the call and join my team. Are you going to get in my way?', +], { + image: 'assets/images/npcs/other/Tohjo Falls.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Unfinished Business', 8), new QuestLineStepCompletedRequirement('Unfinished Business', 10, GameConstants.AchievementOption.less), new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Tohjo Falls'))]), +}); +const Conductor = new NPC('Conductor', [ + 'We\'re working on construction of a Magnet Train line to shuttle people east to Kanto. Once it\'s completed, people will be able to get to Saffron City in record time!', +], { image: 'assets/images/npcs/Rail Staff.png' }); +const ProfElm = new ProfNPC('Prof. Elm', GameConstants.Region.johto, 'Oh, another regional Pokédex completed so soon?', 'Amazing! Next stop is Hoenn, enjoy the sunshine while you\'re there!', 'assets/images/npcs/Professor Elm.png'); +const searchForClues = new NPC('Search For Clues', [ + 'You look around the city in search of clues, and are set upon by a gang of angry Aipoms!', +], { + image: 'assets/images/npcs/specialNPCs/Aipom Alley.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Detective Pikachu'), new QuestLineStepCompletedRequirement('Detective Pikachu', 1, GameConstants.AchievementOption.less)]), +}); +const HowardClifford1 = new NPC('Howard Clifford', [ + 'I am Howard Clifford, CEO of Clifford Industries. I hear you have been investigating both my company, and a mysterious drug called R.', + 'I have reason to believe that a high ranking official in the company is manufacturing this drug, but have been unable to get to the bottom of it myself.', + 'There is a journalist in Hearthome City who may be able to help us both. Please make contact with her and report anything you find back to me.', +], { + image: 'assets/images/npcs/Howard Clifford.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 6), new QuestLineStepCompletedRequirement('Detective Pikachu', 8, GameConstants.AchievementOption.less)]), +}); +const HowardClifford2 = new NPC('Howard Clifford', [ + 'You are too late to stop me! The R drug puts Pokémon in a frenzied state, and allows us to control them with the right equipment! You led me straight to Mewtwo, and now I will take control of the most powerful Pokémon in the world!', + 'Howard puts on a headset and pushes a button. The energy sphere containing Mewtwo comes into view, and it has a crazed look in its eyes. Howard pushes a button on his headset and slumps back in his chair.', + 'Mewtwo makes eye contact with you, and you hear Howard\'s voice in your mind, laughing maniacally. An armed man comes into the room, and warns you not to move.', +], { + image: 'assets/images/npcs/Howard Clifford.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 11), new QuestLineStepCompletedRequirement('Detective Pikachu', 13, GameConstants.AchievementOption.less)]), +}); +const HowardClifford3 = new NPC('Howard Clifford', [ + 'UNLIMITED POWER! YOU\'LL NEVER STOP ME!', +], { + image: 'assets/images/npcs/Howard Clifford.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 13), new QuestLineStepCompletedRequirement('Detective Pikachu', 15, GameConstants.AchievementOption.less)]), +}); +const ParkAttendant = new NPC('Park Attendant', [ + 'Welcome to the National Park!', + 'Lots of people come through here to take a stroll, and some come from far away to participate in our Bug Catching Contest!', + 'All kinds of Bug Pokémon can be found in the park! Each one can be caught for Contest Tokens, and more powerful Pokémon are worth more Tokens!', +], { image: 'assets/images/npcs/Pokémon Ranger (male).png' }); +const ParkResearcher = new NPC('Researcher', [ + 'Welcome to the National Park!', + 'Thanks to recent breakthroughs in the field of alloying and electroplating, we have discovered a way to coat some Pokémon in metal!', + 'An experimental specimen can be bought here: A Sudowoodo that is no longer weak against Water attacks!', +], { image: 'assets/images/npcs/Scientist (male).png' }); +//Johto Towns +TownList['New Bark Town'] = new Town('New Bark Town', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new BulletinBoard(GameConstants.BulletinBoards.Johto)], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_KantoChampion)], + npcs: [ProfElm], +}); +TownList['Cherrygrove City'] = new Town('Cherrygrove City', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [CherrygroveCityShop, TemporaryBattleList['Youngster Joey']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.johto, 29)], + npcs: [CherrygroveMrPokemon], +}); +TownList['Violet City'] = new Town('Violet City', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [VioletCityShop, new MoveToDungeon(dungeonList['Sprout Tower'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.johto, 31)], + npcs: [VioletPrimo, VioletEarlDervish, Zuki], +}); +TownList['Azalea Town'] = new Town('Azalea Town', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [AzaleaTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Azalea Town']), new MoveToDungeon(dungeonList['Slowpoke Well'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.johto, 33)], + npcs: [AzaleaElder, AzaleaHiker, AzaleaCelebiKurt1, AzaleaCelebiKurt2, AzaleaCelebiKurt3, AzaleaCelebiKurt4, AzaleaCelebiOak1, AzaleaCelebiOak2, AzaleaCelebiOak3, AzaleaCelebiOak4, AzaleaCelebiOak5], +}); +TownList['Goldenrod City'] = new Town('Goldenrod City', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [GoldenrodDepartmentStoreShop, JohtoBerryMaster, new MoveToDungeon(dungeonList['Radio Tower']), TemporaryBattleList['Silver 4'], TemporaryBattleList['Aipom Alley'], TemporaryBattleList.Imposter, TemporaryBattleList['Possessed Mewtwo']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.johto, 34)], + npcs: [Conductor, searchForClues, HowardClifford1, HowardClifford2, HowardClifford3, Kuni], +}); +TownList['Ecruteak City'] = new Town('Ecruteak City', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [EcruteakCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Ecruteak City']), new MoveToDungeon(dungeonList['Burned Tower']), new MoveToDungeon(dungeonList['Tin Tower']), TemporaryBattleList['Kimono Girls']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.johto, 37)], + npcs: [EcruteakBill, EcruteakEusine, EcruteakPokéfan, Miki, KimonoGirlsEcruteak], +}); +TownList['Olivine City'] = new Town('Olivine City', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [OlivineCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Olivine City']), new MoveToDungeon(dungeonList['Olivine Lighthouse'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.johto, 39)], + npcs: [OlivineSSAquaCaptain], +}); +TownList['Cianwood City'] = new Town('Cianwood City', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [CianwoodCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Cianwood City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.johto, 41)], + npcs: [CianwoodPhotographyAide, CianwoodEusine, CianwoodCityPharmacist1, CianwoodCityPharmacist2], +}); +TownList['Mahogany Town'] = new Town('Mahogany Town', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [MahoganyTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Mahogany Town']), new MoveToDungeon(dungeonList['Team Rocket\'s Hideout'])], { + requirements: [new OneFromManyRequirement([ + new RouteKillRequirement(10, GameConstants.Region.johto, 42), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Mt. Mortar')), + ])], + npcs: [MahoganySouvenirShopAttendant, MahoganyEusine, MahoGanyOfficerJenny], +}); +TownList['Blackthorn City'] = new Town('Blackthorn City', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [BlackthornCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Blackthorn City'])], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Ice Path'))], + npcs: [BlackthornJohtoRoamerNPC], +}); +TownList['Indigo Plateau Johto'] = new Town('Indigo Plateau Johto', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [TemporaryBattleList['Silver 7'], GymList['Elite Will'], GymList['Elite Koga'], GymList['Elite Bruno2'], GymList['Elite Karen'], GymList['Champion Lance'], pokeLeagueShop()], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.johto, 26), + new TemporaryBattleRequirement('Silver 5'), + ], +}); +TownList['National Park'] = new Town('National Park', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new SafariTownContent('Bug Catching Contest'), JohtoContestShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.johto, 35)], + npcs: [ParkAttendant, ParkResearcher], +}); +//Johto Dungeons +TownList['Sprout Tower'] = new DungeonTown('Sprout Tower', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 31)]); +TownList['Ruins of Alph'] = new DungeonTown('Ruins of Alph', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 32)]); +TownList['Union Cave'] = new DungeonTown('Union Cave', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 32)]); +TownList['Slowpoke Well'] = new DungeonTown('Slowpoke Well', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 33)]); +TownList['Ilex Forest'] = new DungeonTown('Ilex Forest', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [ + new GymBadgeRequirement(BadgeEnums.Hive), + new TemporaryBattleRequirement('Silver 2'), +], [TemporaryBattleList['Spiky-eared Pichu']], { + npcs: [IlexForestShrine1, IlexForestShrine2, IlexForestPichuFan, Naoko], +}); +TownList['Burned Tower'] = new DungeonTown('Burned Tower', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new QuestLineStepCompletedRequirement('The Legendary Beasts', 0)], [TemporaryBattleList['Silver 3']]); +TownList['Olivine Lighthouse'] = new DungeonTown('Olivine Lighthouse', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 39)], [], { + npcs: [OlivineLighthouseJasmine1, OlivineLighthouseJasmine2, OlivineLighthouseMedicineAmphy, OlivineLighthouseAmphy], +}); +TownList['Tin Tower'] = new DungeonTown('Tin Tower', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Radio Tower'))]); +TownList['Whirl Islands'] = new DungeonTown('Whirl Islands', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Radio Tower'))], [], { + npcs: [KimonoGirlsWhirl], +}); +TownList['Mt. Mortar'] = new DungeonTown('Mt. Mortar', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 37)]); +TownList['Team Rocket\'s Hideout'] = new DungeonTown('Team Rocket\'s Hideout', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new TemporaryBattleRequirement('Red Gyarados')]); +TownList['Radio Tower'] = new DungeonTown('Radio Tower', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new TemporaryBattleRequirement('Silver 4')]); +TownList['Ice Path'] = new DungeonTown('Ice Path', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 44)], [], { + npcs: [Sayo], +}); +TownList['Dark Cave'] = new DungeonTown('Dark Cave', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 45)]); +TownList['Tohjo Falls'] = new DungeonTown('Tohjo Falls', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new GymBadgeRequirement(BadgeEnums.Rising)], [TemporaryBattleList['Rocket Boss Giovanni']], { + npcs: [TohjoFallsCelebiTimeDistortion], +}); +TownList['Victory Road Johto'] = new DungeonTown('Victory Road Johto', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 26)]); +TownList['Mt. Silver'] = new DungeonTown('Mt. Silver', GameConstants.Region.johto, GameConstants.JohtoSubRegions.Johto, [new RouteKillRequirement(10, GameConstants.Region.johto, 28)], [], { + npcs: [RedOldManJohtoNPC], +}); +//Hoenn Shops +const OldaleTownShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.xClick, + ItemList.SmallRestore, +]); +const PetalburgCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Token_collector, + ItemList.Lucky_egg, + ItemList.Kings_rock, +]); +const RustboroCityShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.Mystery_egg, + ItemList.Wonder_Chest, +]); +const DewfordTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Lucky_egg, + ItemList.Fighting_egg, +]); +const SlateportCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, + ItemList.MediumRestore, + ItemList.Water_egg, + ItemList.Linking_cord, +]); +const MauvilleCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xClick, + ItemList.Electric_egg, + ItemList.Thunder_stone, + ItemList.Metal_coat, + ItemList.HatcheryHelperJasmine, +]); +const VerdanturfTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Lucky_egg, + ItemList.Grass_egg, + ItemList.Soothe_bell, +]); +const FallarborTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Token_collector, + ItemList.Moon_stone, + ItemList.Sun_stone, +]); +const LavaridgeTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xAttack, + ItemList.Lucky_incense, + ItemList.Fire_egg, + ItemList.Fire_stone, +]); +const RoadsideStandShop = new Shop([ + ItemList['Probably Feebas'], +], 'Shady Deal'); +const FortreeCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xClick, + ItemList.Dowsing_machine, + ItemList.LargeRestore, + ItemList.Leaf_stone, +]); +const WindChimeShop = new Shop([ + ItemList['Probably Chimecho'], +], 'Shady Deal'); +const MossdeepCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.Upgrade, + ItemList.Prism_scale, + ItemList.Beldum, +]); +const SootopolisCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Lucky_egg, + ItemList.Lucky_incense, + ItemList.Water_stone, +]); +const PacifidlogTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.Dowsing_machine, + ItemList.Deepsea_tooth, + ItemList.Deepsea_scale, +]); +const EverGrandeCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.xClick, + ItemList.Dragon_egg, + ItemList.Dragon_scale, +]); +const BattleFrontierShop = new Shop([ + new PokeballItem(GameConstants.Pokeball.Ultraball, 1, GameConstants.Currency.battlePoint, undefined, 'Ultra Ball'), + new PokeballItem(GameConstants.Pokeball.Masterball, 500, GameConstants.Currency.battlePoint, { multiplier: 1.35, multiplierDecrease: false, saveName: `${GameConstants.Pokeball[GameConstants.Pokeball.Masterball]}|${GameConstants.Currency[GameConstants.Currency.battlePoint]}` }, 'Master Ball'), + new EnergyRestore(GameConstants.EnergyRestoreSize.SmallRestore, 10, GameConstants.Currency.battlePoint, 'Small Restore'), + new EnergyRestore(GameConstants.EnergyRestoreSize.MediumRestore, 20, GameConstants.Currency.battlePoint, 'Medium Restore'), + new EnergyRestore(GameConstants.EnergyRestoreSize.LargeRestore, 40, GameConstants.Currency.battlePoint, 'Large Restore'), + ItemList.FarmHandJamie, + ItemList.HatcheryHelperNoel, + ItemList.Muscle_Band, +]); +const OutskirtStandShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.SmallRestore, + ItemList.MediumRestore, + ItemList.LargeRestore, + ItemList.Wonder_Chest, +]); +const PhenacCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.xClick, + ItemList.Lucky_egg, + ItemList.Wonder_Chest, +]); +const AgateVillageShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Lucky_incense, + ItemList.Token_collector, + ItemList.Dowsing_machine, + ItemList.Wonder_Chest, +]); +const GateonPortShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.xClick, + ItemList.Lucky_incense, + ItemList.Miracle_Chest, +]); +//Hoenn Berry Master +const HoennBerryMaster = new BerryMasterShop(GameConstants.BerryTraderLocations['Mauville City'], [ + ItemList.Boost_Mulch, + ItemList.Rich_Mulch, + ItemList.Surprise_Mulch, + ItemList.Amaze_Mulch, + ItemList.Freeze_Mulch, + ItemList.Berry_Shovel, + ItemList.Mulch_Shovel, + ItemList.Sprinklotad, + ItemList.FarmHandKerry, + ItemList.HatcheryHelperCameron, +], 'Hoenn Berry Master'); +//Hoenn Contest Shop +const HoennContestShop = new Shop([ + ItemList['Tangela (Pom-pom)'], + ItemList['Goldeen (Diva)'], + ItemList['Weepinbell (Fancy)'], + ItemList['Onix (Rocker)'], + ItemList['Dugtrio (Punk)'], + ItemList['Gengar (Punk)'], + new PokeballItem(GameConstants.Pokeball.Ultraball, 20, GameConstants.Currency.contestToken, undefined, 'Ultra Ball'), + new EnergyRestore(GameConstants.EnergyRestoreSize.SmallRestore, 5, GameConstants.Currency.contestToken, 'Small Restore'), + new EnergyRestore(GameConstants.EnergyRestoreSize.MediumRestore, 10, GameConstants.Currency.contestToken, 'Medium Restore'), + new EnergyRestore(GameConstants.EnergyRestoreSize.LargeRestore, 30, GameConstants.Currency.contestToken, 'Large Restore'), +], 'Contest Shop', [PokemonContestController.requirements]); +//Hoenn Flute Master +const HoennFluteMaster = new GemMasterShop(GameConstants.GemShops.HoennFluteMaster); +const HoennStoneSalesman = new GemMasterShop(GameConstants.GemShops.HoennStoneSalesman, 'Stone Salesman', [new TemporaryBattleRequirement('Hoenn Stone Salesman')], true); +//Hoenn NPCs +const LittlerootAide = new NPC('Professor Birch\'s Aide', [ + 'We have received word from Mr. Pokémon in Johto! He has made another breakthrough.', + 'You can now store an additional four eggs in the queue! His research has really gained speed.', + 'He wants you to know that he will have an additional eight slots ready by the time you reach Sinnoh.', +]); +const OldaleTrackingScientist = new NPC('Tracking Scientist', [ + 'Hey trainer, look at these footprints! Huh, I’ve never seen footprints like these before… They look like they came from two different Pokémon, and I saw two blurs, one red and one blue, quickly fly away just as I exited the Pokémon Center.', + 'They were flying really fast, I bet Pokémon that fast will only challenge trainers who have proven they are as strong as Champion Wallace...', +]); +const HoennFossilNpc = new NPC('Laid-Back Angler', [ + 'Every so often, I\'ll snag an old fossil from the seafloor. It weirds me out to think of all the Pokémon that used to crawl around the ocean so many years ago, but it also reminds me that life is fleeting and precious.', + 'So far I\'ve found two that I relate to, a kind of flower-looking thing and one that looks like a bug pincer.', + 'I wonder what you\'ll feel the next time you find one.', +], { image: 'assets/images/npcs/Fisherman.png' }); +const SlateportHoennRoamerNPC = new RoamerNPC('Reporter Gabby', [ + 'Our sources indicate that roaming Pokémon are gathering on {ROUTE_NAME}!', +], GameConstants.Region.hoenn, RoamingPokemonList.findGroup(GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn), 'assets/images/npcs/Reporter.png'); +const SkepticalFisherman = new NPC('Skeptical Fisherman', [ + 'There\'s some salesman offering rare fish east of New Mauville, out on the water.', + 'I\'m a bit skeptical of his wares, especially since his shop isn\'t on any maps.', +], { image: 'assets/images/npcs/Fisherman.png' }); +const FallarborProfessorCozmo = new NPC('Prof. Cozmo', [ + 'Oh! Welcome, welcome. Do you by any chance have any Meteorites? No? Ah well, I’m studying the Pokémon Deoxys and I’ve heard that a Meteorite can cause it to change forms!', + 'I’ve also heard that the Battle Frontier may have some secrets relevant to Deoxys and its forms… but I’m not strong enough to find out...' +], { requirement: new QuestLineStartedRequirement('The Delta Episode', GameConstants.AchievementOption.less), +}); +const LavaridgeSootCollector = new NPC('Soot Collector', [ + 'Blegh! I\'ve taken three soaks in the hot springs and I can still taste the soot!', + 'The Flute Trader in Fallarbor Town has been paying me to go collect soot to make Flutes, but I\'m sick of it.', + 'People say they have truly mystical powers, but that they require Gems of different types to use. Also, using more Flutes at the same time costs more Gems to use.', +]); +const RoadsideStandShadySalesman = new NPC('Shady Salesman', [ + 'Have I got a deal just for you!', + 'I have spent weeks finding the perfect fishing spot for Feebas, and finally got some! For a special low price, I\'ll sell you one!', + 'All sales are final!', +], { image: 'assets/images/npcs/ShadySalesman.png' }); +const FortreeWeatherman = new NPC('Weatherman', [ + 'Castform is a very finicky Pokémon.', + 'It changes forms when the weather is drastically different.', + 'If you want to collect them all, wait for the weather to change.', +]); +const FortreeRanger = new NPC('Pokémon Ranger Catherine', [ + 'Have you seen this? It\'s horrific. Absolutely despicable.', + 'Disposable Dowsing Machines! Who even came up with this?! People leave these everywhere. It\'s absolutely terrible for the environment. Some poor innocent Pokémon could choke on it!', + 'Please recycle your used Dowsing Machines.', +], { image: 'assets/images/npcs/Pokemon Ranger (female).png' }); +const WindChimeShopShadySalesman = new NPC('Shady Salesman', [ + 'Step right up! Get your Chimecho while they last! Chimecho, a very rare Pokémon indeed, with a voice that\'s both beautiful and powerful. Look closer! I see it bringing a smile to your face, just gazing into those loving eyes! They say these are the most gentle, healing eyes in the Pokémon kingdom.', + 'That\'s not all! Just look at the way Chimecho\'s tail swings and sways with the wind, like a weeping willow in a summer breeze. In really hot weather, it will act like a fan to help you cool off. And when it\'s cold outside, your Chimecho can wrap itself around your neck like a scarf, to keep you warm.', + 'And one more thing. It\'s not widely known, but it\'s a true fact; Chimecho are able to choose winning lottery tickets! Soo you see, my friend, just having a Chimecho with you, is a sure-fire ticket to happiness and success. Let Chimecho give you total peace and happiness, for a good price!', +], { image: 'assets/images/npcs/ShadySalesman.png' }); +const Steven1 = new NPC('Steven', [ + 'I have been investigating the behavior of Kecleon, the Color Swap Pokémon.', + 'There are a few hidden near the city. If you can find them all, I will give you a wonderful prize!' +], { requirement: new TemporaryBattleRequirement('Kecleon 3', 1, GameConstants.AchievementOption.less), +}); +const Steven2 = new NPC('Steven', [ + 'Thank you for finding the hidden Kecleons for me! Please accept this picture of a camouflaged Kecleon as your reward.', +], { image: 'assets/images/npcs/other/KecleonDrawing.png', + requirement: new TemporaryBattleRequirement('Kecleon 3'), +}); +const MossdeepAstronomer = new NPC('Astronomer', [ + 'Hey did you know about the Millennium Comet? We can see it in the sky right now, and it only comes around once every thousand years!', + 'There’s a legend that a mythical Wish Pokémon awakens when it passes over us. If you’re as strong as the Champion, maybe you’ll find it roaming around Hoenn granting wishes!', +]); +const PacifidlogDiver = new NPC('Diver', [ + 'Yo! Find any cool stuff in chests lately?', + 'I\'ve heard that if you beat a Dungeon a lot then the stuff you find in chests gets even more awesome.', +]); +const Wallace1 = new NPC('Gym Leader Wallace', [ + 'Ah, so you are the new trainer in the region? I\'ve heard tales of your exploits. My name is Wallace. I was once the Gym Leader of Sootopolis, but something came up. So now, I\'ve entrusted my mentor Juan with the Gym\'s operation.', + 'Groudon and Kyogre, the two Pokémon wreaking havoc in Sootopolis City, are considered to be Super-Ancient Pokémon. But there aren\'t just two Super-Ancient Pokémon. Somewhere, there is a Super-Ancient Pokémon named Rayquaza. It\'s said that it was Rayquaza that becalmed the two combatants in the distant past.', + 'I have heard that Rayquaza once lived high atop the Sky Pillar, maybe that\'s where it is now?', +], { image: 'assets/images/npcs/Wallace.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Weather Trio', 1), new QuestLineStepCompletedRequirement('The Weather Trio', 3, GameConstants.AchievementOption.less)]), +}); +const Wallace2 = new NPC('Gym Leader Wallace', [ + 'My eyes didn\'t deceive me. Thanks to your help, Sootopolis...', + 'No, all of Hoenn was saved. On behalf of the people, I thank you.', + 'Now that their battle is over, the Super-Ancient Pokémon have retreated to rest and recuperate. You will likely find Rayquaza back in the Sky Pillar.', + 'Kyogre and Groudon are rumored to live deep within this very cave, but they are unlikely to show themselves to any normal trainer. Maybe the champion of Hoenn could earn their respect.', +], { image: 'assets/images/npcs/Wallace.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Weather Trio', 4), new QuestLineStepCompletedRequirement('The Weather Trio', 6, GameConstants.AchievementOption.less)]), +}); +const WeatherBattle1 = new NPC('The Super-Ancient Pokémon Clash', [ + 'Groudon and Kyogre have been awakened by the efforts of Team Magma and Team Aqua! They are engaged in a fierce battle which threatens to destroy Sootopolis City... and more!', + 'The locals in Sootopolis City take shelter from the raging battle. Some say that this sort of thing would never happen if Wallace was still around.', +], { image: 'assets/images/npcs/other/WeatherBattle1.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Weather Trio'), new QuestLineStepCompletedRequirement('The Weather Trio', 1, GameConstants.AchievementOption.less)]), +}); +const WeatherBattle2 = new NPC('The Super-Ancient Pokémon Clash', [ + 'Rayquaza appears above Kyogre and Groudon and utters a single intimidating roar. The battling Super-Ancient Pokémon stop their attacks, and a tense standoff ensues.', + 'After what seems like an eternity, the three Super-Ancient Pokémon seem to have come to an understanding. They each depart the city, and peace is restored.', +], { image: 'assets/images/npcs/other/WeatherBattle2.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Weather Trio', 3), new QuestLineStepCompletedRequirement('The Weather Trio', 5, GameConstants.AchievementOption.less)]), +}); +const MillenniumFest = new NPC('The Millennium Festival', [ + 'The Millennium Comet is about to make its long-awaited appearance in the sky again, supposedly granting the wishes of all those who see it in the skies above them.', + 'A festival celebrating the arrival of this comet is being held with rides, carnival games, and even a magic show by the Great Butler!', + 'The magic show features many exciting tricks performed by humans and Pokémon, but it looks like someone is crashing the party!', +], { image: 'assets/images/npcs/other/Millennium Festival.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Wish Maker'), new QuestLineStepCompletedRequirement('Wish Maker', 1, GameConstants.AchievementOption.less)]), +}); +const Butler1 = new NPC('Butler', [ + 'I, the Great Butler, thank you for dealing with Team Rocket!', + 'I have been preparing for the Millennium Festival my whole life, and have big plans for the wish-granting powers it possesses.', + 'I have found what appears to be a crystalline cocoon that contains Jirachi, the Wish Pokémon! I would be honored if you would take this cocoon as thanks for helping me. Legend has it that Jirachi will appear for a trainer who is pure of heart and grant them a wish!', + 'Butler gives you a crystalline cocoon containing Jirachi.', +], { image: 'assets/images/npcs/Butler.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Wish Maker', 1), new QuestLineStepCompletedRequirement('Wish Maker', 3, GameConstants.AchievementOption.less)]), +}); +const CocoonHatch = new NPC('Examine the Crystalline Cocoon', [ + 'The cocoon shifts, shimmers, and hatches to reveal Jirachi!', +], { image: 'assets/images/npcs/other/Cocoon.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Wish Maker', 4), new QuestLineStepCompletedRequirement('Wish Maker', 6, GameConstants.AchievementOption.less)]), +}); +const Butler2 = new NPC('Butler', [ + 'I, the Great Butler, thank you for saving me from the wrath of Meta Groudon.', + 'My wish was to resurrect Groudon for Team Magma, but it proved too difficult, and you have showed me that it would be irresponsible to put that much power in the hands of evil doers.', + 'I can try the experiment again using what was learned from the previous failure, but I will need your help. If we are successful, I will give you the opportunity to catch the resulting Meta Groudon to you.', + 'To rebuild my machine, I will need a hundred power-generating Pokémon to run the machine, shiny pokemon to stabilize the energy matrix, and to conduct a new dig for fossilized Groudon materials. After that, I will need to calibrate the machine using DNA from Groudon itself.', +], { image: 'assets/images/npcs/Butler.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('A Meta Discovery'), new QuestLineStepCompletedRequirement('A Meta Discovery', 1, GameConstants.AchievementOption.less)]), +}); +const Butler3 = new NPC('Butler', [ + 'I, the Great Butler, thank you for all of your help in fulfilling my greatest wish!', + 'Meta Groudon has been revived! It is safely contained in this crater. Catch it whenever you are ready!', +], { image: 'assets/images/npcs/Butler.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Meta Discovery', 2), new QuestLineCompletedRequirement('A Meta Discovery', GameConstants.AchievementOption.less)]), +}); +const ProfBirch = new ProfNPC('Prof. Birch', GameConstants.Region.hoenn, 'That\'s another regional Pokédex completed! Fantastic.', 'I really appreciate being able to see your outstanding progress, thank you! Sinnoh is next up.', 'assets/images/npcs/Professor Birch.png'); +const CoolTrainerDillan = new NPC('Cool Trainer Dillan', [ + 'Hey newcomer! I see you are the Hoenn Champion. You must be an amazing Trainer!', + 'At the Battle Frontier, you can test your skills against Trainers from all over the world.', + 'Since some of these Trainers come from far away, you may see Pokémon that you might not be able to catch yet.', + 'But don\'t worry, catching them all is only a matter of time. Just keep exploring and having fun and you\'ll encounter lots of different Pokémon, either in form, color, or even evolutions!', +], { image: 'assets/images/npcs/Cooltrainer (male).png', +}); +const EasterEggHunter = new NPC('Egg Hunter', [ + 'My eggs! They ran away!', + 'Can you help me get them back? They have most likely fleed to a dungeon in Kanto, Hoenn or Johto.', + 'But be careful! If you defeat them, they will run away again!', +], { + image: 'assets/images/npcs/Egg Hunter.png', + requirement: new MultiRequirement([ + new QuestLineStepCompletedRequirement('Egg Hunt', 2, GameConstants.AchievementOption.more), + new OneFromManyRequirement([ + new QuestLineCompletedRequirement('Egg Hunt', GameConstants.AchievementOption.less), + new SpecialEventRequirement('Easter'), + ]), + ]), +}); +const SCEntrance = new NPC('Strange Markings', [ + 'These strange markings seem to spell something out. The nearby Braille Enthusiast may know more.', +], { image: 'assets/images/npcs/other/Regi Entrance.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 0), new QuestLineStepCompletedRequirement('The Three Golems', 1, GameConstants.AchievementOption.less)]), +}); +const MazeHintLeft = new NPC('Room Engraving', [ + 'These strange markings seem to spell something out. The nearby Braille Enthusiast may know more.', +], { image: 'assets/images/npcs/other/LeftBraille.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 1), new QuestLineStepCompletedRequirement('The Three Golems', 3, GameConstants.AchievementOption.less)]), +}); +const SCMazeLeft = new NPC('Go Left', [ + 'You turn left and proceed to the next room.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 1), new QuestLineStepCompletedRequirement('The Three Golems', 3, GameConstants.AchievementOption.less)]), +}); +const SCMazeLeftWrong = new NPC('Go Left', [ + 'You turn left, but it is a dead end.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 3), new QuestLineStepCompletedRequirement('The Three Golems', 6, GameConstants.AchievementOption.less)]), +}); +const MazeHintRight = new NPC('Room Engraving', [ + 'These strange markings seem to spell something out. The nearby Braille Enthusiast may know more.', +], { image: 'assets/images/npcs/other/RightBraille.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 5), new QuestLineStepCompletedRequirement('The Three Golems', 6, GameConstants.AchievementOption.less)]), +}); +const SCMazeRight = new NPC('Go Right', [ + 'You turn right and proceed to the next room.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 5), new QuestLineStepCompletedRequirement('The Three Golems', 6, GameConstants.AchievementOption.less)]), +}); +const SCMazeRightWrong = new NPC('Go Right', [ + 'You turn right, but it is a dead end.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 1), new QuestLineStepCompletedRequirement('The Three Golems', 5, GameConstants.AchievementOption.less)]), +}); +const MazeHintStraight = new NPC('Room Engraving', [ + 'These strange markings seem to spell something out. The nearby Braille Enthusiast may know more.', +], { image: 'assets/images/npcs/other/StraightBraille.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 3), new QuestLineStepCompletedRequirement('The Three Golems', 5, GameConstants.AchievementOption.less)]), +}); +const SCMazeStraight = new NPC('Go Straight', [ + 'You go straight and proceed to the next room.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 3), new QuestLineStepCompletedRequirement('The Three Golems', 5, GameConstants.AchievementOption.less)]), +}); +const SCMazeStraightWrong = new NPC('Go Straight', [ + 'You go straight, but it is a dead end.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 1), new QuestLineStepCompletedRequirement('The Three Golems', 3, GameConstants.AchievementOption.less)]), +}); +const SCHints = new NPC('Hidden Message', [ + 'These strange markings seem to spell something out. The nearby Braille Enthusiast may know more.', +], { image: 'assets/images/npcs/other/Regi Hints.png', + requirement: new QuestLineStepCompletedRequirement('The Three Golems', 6), +}); +const BrailleEnthusiast1 = new NPC('Braille Enthusiast', [ + 'The markings at the entrance to the Sealed Chamber seem to say that some sort of secret is inside. Try to find more braille messages, and I can decode them for you!', +], { image: 'assets/images/npcs/Ruin Maniac gen3.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 0), new QuestLineStepCompletedRequirement('The Three Golems', 1, GameConstants.AchievementOption.less)]), +}); +const BrailleEnthusiast2 = new NPC('Braille Enthusiast', [ + 'There are a few carvings inside this maze. The carving with five dots on the top row says "LEFT".', + 'The carving with nine dots on the top row says "STRAIGHT".', + 'The carving with six dots on the top row says "RIGHT".', + 'If you get totally lost, just wander around. You will find the right path eventually.', +], { image: 'assets/images/npcs/Ruin Maniac gen3.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Three Golems', 1), new QuestLineStepCompletedRequirement('The Three Golems', 6, GameConstants.AchievementOption.less)]), +}); +const BrailleEnthusiast3 = new NPC('Braille Enthusiast', [ + 'The first carving says DESERT. There is a desert near Route 111, right?', + 'The second carving says ISLAND. There are a lot of islands on Route 105.', + 'The third carving says ANCIENT. I remember seeing some ancient ruins on Route 120.', +], { image: 'assets/images/npcs/Ruin Maniac gen3.png', + requirement: new QuestLineStepCompletedRequirement('The Three Golems', 6), +}); +const Television1 = new NPC('Watch Television', [ + 'Reports are coming in from across Hoenn that two fast-moving Pokémon have appeared!', + 'These elusive Pokémon are Blue and Red and White all over, and our reporters will give you the latest updates as we try to discern their identity and location!', +], { requirement: new MultiRequirement([new QuestLineStartedRequirement('The Eon Duo'), new QuestLineStepCompletedRequirement('The Eon Duo', 1, GameConstants.AchievementOption.less)]), +}); +const Television2 = new NPC('Watch More Television', [ + 'A hot new vacation spot is waiting for you!', + 'Come to the Hoenn Pokémon League to claim your free Eon Ticket today!', + 'Supplies are limited, reserve your spot on a cruise to the Southern Island!', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Eon Duo', 0), new QuestLineStepCompletedRequirement('The Eon Duo', 2, GameConstants.AchievementOption.less)]), +}); +const TicketClaim = new NPC('Contest Attendant', [ + 'Thank you for reserving your Eon Ticket!', + 'To claim the ticket, all you have to do is go to your Start Menu, select "Save", and enter the following code in the "Enter Code..." box:', + 'EON-TICKET', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Eon Duo', 1), new QuestLineStepCompletedRequirement('The Eon Duo', 3, GameConstants.AchievementOption.less)]), +}); +const SurferDave = new NPC('Surfer Dave', [ + 'What\'s up? I got here using my Eon Ticket, what about you?' +]); +const SeaMauvilleRocket1 = new NPC('Rocket Grunt', [ + 'The boss said to take a look around here and call him if I found anything cool!', +], { + image: 'assets/images/npcs/Team Rocket Grunt (male).png', + requirement: new TemporaryBattleRequirement('Delta Giovanni', 1, GameConstants.AchievementOption.less), +}); +const SeaMauvilleRocket2 = new NPC('Rocket Grunt', [ + 'I can\'t believe you beat up the boss! Better get out of here before he comes back!', +], { + image: 'assets/images/npcs/Team Rocket Grunt (male).png', + requirement: new TemporaryBattleRequirement('Delta Giovanni'), +}); +const SouthernIsland1 = new NPC('Explore the Southern Island', [ + 'The Southern Island is a small but lush forest. The clearing near the center of the island is the perfect place for a tired Pokémon to rest.', + 'Latios and Latias are resting in the clearing. You can approach one of them, but the other will probably flee.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Eon Duo', 2), new QuestLineStepCompletedRequirement('The Eon Duo', 3, GameConstants.AchievementOption.less)]), +}); +const Cozmo1 = new NPC('Dr. Cozmo', [ + 'Reports are coming in from the Mossdeep Space Center that a meteor is headed our way!', + 'It\'s on a collision course with an island north of Route 131. I\'ve been tasked with finding a way to stop this meteor.', + '$playername$, can you go to that island and look for anything that might be able to help us?', +], { image: 'assets/images/npcs/Dr Cozmo.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Delta Episode'), new QuestLineStepCompletedRequirement('The Delta Episode', 1, GameConstants.AchievementOption.less)]), +}); +const Zinnia1 = new NPC('Mysterious Figure', [ + 'You must be $playername$, the trainer Wa... People are talking about.', + 'If you\'re here, it means you\'ve heard the same news that I have: a meteor is headed towards this island.', + 'Who am I? My name is Zinnia, nice to meet you. I have a certain.... connection to the Pokémon of this region, but we can get into that later.', + 'For now, I think we can help each other out. I need you to introduce me to your rival, May. If you do that, I\'ll tell you my plan to stop the meteor.', +], { image: 'assets/images/npcs/Zinnia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 0), new QuestLineStepCompletedRequirement('The Delta Episode', 2, GameConstants.AchievementOption.less)]), +}); +const DeltaMay1 = new NPC('May', [ + 'Funny meeting you here, $playername$! I was just going to meet up with Professor Birch to discuss this weird stone I found. It seems to have a powerful energy hidden inside. I wonder if it\'s one of the Key Stones I\'ve heard let Pokémon Mega Evolve?', + 'Who\'s this? You have a new friend? Zinnia is her name? Nice to meet you!', + 'Tell you what, I\'ll show Zinnia around town for a little bit, you should go see the Professor. He had some interesting news.', + 'Zinnia and May head off to May\'s house, discussing Pokémon.', +], { image: 'assets/images/npcs/May.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 1), new QuestLineStepCompletedRequirement('The Delta Episode', 3, GameConstants.AchievementOption.less)]), +}); +const NewsBirch = new NPC('Discuss the news with Professor Birch', [ + 'Hello again, $playername$! It\'s been a while since you last visited!', + 'There\'s been a lot of hubbub and excitement in the region since the Mossdeep Space Center announced that a meteor was headed our way. This has lead to a lot of new faces in Hoenn.', + 'Some of them have been carrying small but powerful items known as Key Stones. These have the power to let Pokémon Mega Evolve! You may have experienced something like that in Kalos, but it\'s new to us here.', + 'Keep an eye out for new faces in familiar places!', +], { image: 'assets/images/npcs/Professor Birch.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 2), new QuestLineStepCompletedRequirement('The Delta Episode', 4, GameConstants.AchievementOption.less)]), +}); +const DeltaMay2 = new NPC('May', [ + 'What\s the big idea, $playername$?!?', + 'Your new friend waited until my back was turned, stole my Key Stone, and skipped town!', + 'She was headed towards Petalburg City. You better help me get my Key Stone back!', +], { image: 'assets/images/npcs/May.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 3), new QuestLineStepCompletedRequirement('The Delta Episode', 5, GameConstants.AchievementOption.less)]), +}); +const DeltaSteven1 = new NPC('Ringing Holo Caster', [ + 'Hello? Is that you, $playername$? It\'s me. Steven. Have you been doing well?', + 'I imagine you must be quite shocked. This is a communication mode that Devon is still currently developing. It comes installed on every Holo Caster. I thought I would only use it if I needed to contact you urgently.', + 'But it looks as though that time has already come. I\'m sorry to ask this of you, but I need your help getting some materials for Devon Corporation\'s new rocket project. We think we can help Dr. Cozmo stop the incoming meteor.', + 'Our company\'s records indicate that a meteor landed in Granite Cave thousands of years ago. Can you search the area for fragments of that meteor?', + 'Oh, and my father was asking about you. Look out for him in Rustboro City.', +], { image: 'assets/images/npcs/Steven.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 5), new QuestLineStepCompletedRequirement('The Delta Episode', 7, GameConstants.AchievementOption.less)]), +}); +const DeltaWally1 = new NPC('Wally', [ + 'Thank you so much, $playername$... those strange people suddenly attacked me, demanding that I hand over my Key Stone! The truth is that I couldn\'t give it to them even if I wanted to.', + 'My Key Stone is gone. I left it in the house when I went out, and it just disappeared. What in the world is going on? If someone like that ever shows up again... I\'ve gotta protect my mom and dad. You be careful, too!', +], { image: 'assets/images/npcs/Wally.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 5), new QuestLineStepCompletedRequirement('The Delta Episode', 7, GameConstants.AchievementOption.less)]), +}); +const Zinnia2 = new NPC('Zinnia', [ + 'Hm, hm, hm. Well, seems like it\'s true. It really is just like the wall painting there. This one shows Primal Reversion... While that one shows Mega Evolution... I guess that proves it once and for all.', + 'Our great ancestors once lived here, too. The ancestors who passed down through me the knowledge of how to protect the world... How to avert the threat that will appear from space, as long was foretold... From a place higher even than the heavens...', + 'What is it, Aster? Oh?', + 'We do seem to meet an awful lot, $playername$. Are you also interested in this old painting? Or are you here for something else? For one of the Meteorite Shards that can serve as a source of power for the Legendary Pokémon that lives in the heavens above.', + 'Either way... You know I adore you. That\'s it! I can\'t help it! I have to battle you! I\'ll play nice, though, and ask first... You\'re ready to battle me, right?', +], { image: 'assets/images/npcs/Zinnia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 7), new QuestLineStepCompletedRequirement('The Delta Episode', 9, GameConstants.AchievementOption.less)]), +}); +const Zinnia3 = new NPC('Zinnia', [ + 'That glittering Meteorite that you\'ve got there... Hmm... It\'s sure giving off some vibes. I\'d keep a tight hold on it if I were you, along with that shard I just gave you.', + 'Hey... The actions that you\'re taking now... Are they based on the ideals you cling to? Or are they based on actual truths? And if they are... How much of the truth do you think you know?', +], { image: 'assets/images/npcs/Zinnia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 9), new QuestLineStepCompletedRequirement('The Delta Episode', 11, GameConstants.AchievementOption.less)]), +}); +const Cozmo2 = new NPC('Dr. Cozmo', [ + 'WHAT? Recheck the data! Update the course calculations and confirm the new trajectory! But changing trajectories midflight... It\'s almost like it\'s alive.', + 'Oh, $playername$, I didn\'t see you there. And you brought the Meteorite Shard with you. Well done!', + 'Thank you for bringing it, this will really help our plan to stop the meteor. Our current plan involves using the Infinity Energy within our rocket, combined with the life energy of humans found in Key Stones.', + 'We will start off by artificially replicating the massive energy that is triggered at the time of Mega Evolution! We will fire the energy produced from our rocket into space... And create a "warp hole".', + 'By creating a warp hole in the path of the incoming meteoroid, we hope to be able to transport it somewhere far away from here....', + 'Zinnia bursts into the room and interrupts Dr. Cozmo!', +], { image: 'assets/images/npcs/Dr Cozmo.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 10), new QuestLineStepCompletedRequirement('The Delta Episode', 12, GameConstants.AchievementOption.less)]), +}); +const Zinnia4 = new NPC('Zinnia', [ + 'So this is what has come of human technology and of hope and blood and sweat and tears and... Well, the list gets kinda long and boring.', + 'But it contains everything, huh? I know all about it. About just what kinda energy you\'re using to fuel this rocket thing... The abominable technology humanity first thought up 3,000 years ago!', + 'So you\'re once again planning to claim that this is best for humanity, or best for the whole darn world? It\'s a snap of your fingers to repeat the sins of the past.', + 'Worse, if what I overheard is true then this time, you\'re about to commit an error more abominable than before!', + 'Instead of trying to make something outta nothing, you\'d rather repeat the mistakes of the past, straight up? No, you\'re gonna add new mistakes on top—that really takes the cake. You guys need some imagination.', + 'Zinnia storms out of the building.', +], { image: 'assets/images/npcs/Zinnia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 11), new QuestLineStepCompletedRequirement('The Delta Episode', 13, GameConstants.AchievementOption.less)]), +}); +const Cozmo3 = new NPC('Dr. Cozmo', [ + 'That was.... quite the interruption.', + 'But there\'s no need to worry. Based on our theory, we can at least guarantee that we will be sending the meteor away from our planet if the plan is successful. Not sure where it will go.', + 'However, we\'ve realized that we will need more energy than originally anticipated to control the process properly... I\'m sorry to ask this of you, but we will need one more Meteorite Shard. There should be one at Meteor Falls.', +], { image: 'assets/images/npcs/Dr Cozmo.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 12), new QuestLineStepCompletedRequirement('The Delta Episode', 14, GameConstants.AchievementOption.less)]), +}); +const DraconidElder1 = new NPC('Draconid Elder', [ + 'Yes, I am one of the Draconid people. One of those ancient folk tasked with passing down the knowledge of Mega Evolution—with the great lore of Lord Rayquaza, who was the beginning of all.', + 'Since times long gone, Hoenn has repeatedly suffered great disasters. At times, the destruction took the form of a huge meteoroid, which fell upon our land from distant space.', + 'At other times, the Primal Reversion of our own super-ancient Pokémon brought us to the brink of destruction. Each time, Lord Rayquaza has saved us from doom.', + 'The chosen Lorekeeper, standing before a stone that shone with rainbow light, offered up a wish to the great one. And Lord Rayquaza\'s body was suffused with a brilliant light and transformed.', + 'In its transformed state, Rayquaza\'s power was more devastating than ever before, overcoming even the super-ancient Pokémon with all their primal power.', + 'I want to tell you more, but first you must prove you are worthy.', +], { image: 'assets/images/npcs/Draconid Elder.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 14), new QuestLineStepCompletedRequirement('The Delta Episode', 16, GameConstants.AchievementOption.less)]), +}); +const DraconidElder2 = new NPC('Draconid Elder', [ + 'Zinnia is the current Lorekeeper of our people, who has inherited the knowledge and power to summon Lord Rayquaza when disaster imperils the world.', + 'She has long known about the meteor approaching the planet, and has been trying to draw out the power of Rayquaza. Part of this plan was working with Teams Aqua and Magma to revive the Super-Ancient Pokémon.', + 'She taught them the secrets needed to bring back these threats and summon the great Dragon itself. And now it seems she travels the land, scouring the world for Key Stones.', + 'I do not know what you plan to do, but Zinnia will continue to follow her convictions to the very end. This may cost her her life, but she is dedicated. Please, help her if you can.', + 'Take this Meteorite Shard, and please hurry! After you have helped Zinnia, please come back here and find me.', +], { image: 'assets/images/npcs/Draconid Elder.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 16), new QuestLineStepCompletedRequirement('The Delta Episode', 18, GameConstants.AchievementOption.less)]), +}); +const DraconidElder3 = new NPC('Draconid Elder', [ + 'Thank you for everything you\'ve done for the Draconid people, Hoenn, and me personally.', + 'You will forever be a friend of the Draconid people.', +], { image: 'assets/images/npcs/Draconid Elder.png', + requirement: new TemporaryBattleRequirement('Mega Draconid Elder'), +}); +const Zinnia5 = new NPC('Zinnia', [ + 'Thank you, dear. Now then... That is an impressive machine. Snap your fingers, the asteroid vanishes, and we all live happily ever after? It\'s a good thing you saved it from those Aqua and Magma thugs.', + 'This thing is the best hope we have of saving this planet and everything on it. But you know... It could also be the worst tragedy imaginable for some other world and everything on it.', + 'My people have passed down a story of another world, much like our own. In this other world, the world took a different path. The war in Kalos 3000 years ago never happened, and Mega Evolution is not known there.', + 'If a meteor appeared in that world because of the use of this warp hole technology, they would be unable to save themselves! We can\'t do that to the other world! We have to solve this problem a different way!', + 'Zinnia smashes the complex machines Dr. Cozmo has been working on and flees.', +], { image: 'assets/images/npcs/Zinnia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 19), new QuestLineStepCompletedRequirement('The Delta Episode', 21, GameConstants.AchievementOption.less)]), +}); +const Archie = new NPC('Archie', [ + 'Baah, what\'s the use in fighting you?', + 'That Dragon twerp stole my Key Stone, there\'s no way I can win without it. Looks like you\'re after her too, huh?', + 'Last I saw, she was headed towards Mt. Chimney. Hopefully she messes up Maxie\'s day too! At least she didn\'t take the.... uuh...', + 'Never you mind that, get outta here!', +], { image: 'assets/images/npcs/Aqua Leader.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 21), new QuestLineStepCompletedRequirement('The Delta Episode', 23, GameConstants.AchievementOption.less)]), +}); +const Maxie = new NPC('Maxie', [ + 'There\'s no way I can beat you!', + 'Zinnia.... I thought I could trust her after she found the Red Orb for me, but I guess not. She stole my Key Stone!', + 'Oh uh... forget I said that. Zinnia\'s already gone. I have no idea where she went, but another Draconid or even an ancient Sootopolitan might know. Maybe try talking to Wallace?', +], { image: 'assets/images/npcs/Magma Leader.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 23), new QuestLineStepCompletedRequirement('The Delta Episode', 25, GameConstants.AchievementOption.less)]), +}); +const Wallace3 = new NPC('Gym Leader Wallace', [ + 'Hello again, $playername$. I can see by the look on your face that this is not just a social call.', + '....Yes I do know about Zinnia, she is a Draconid and this generation\'s Lorekeeper. She may be acting in ways you disagree with, but everything she\'s doing is for a reason.', + 'I do know where she is, but I can\'t just tell you. If you can defeat me, you may be worthy of knowing.', +], { image: 'assets/images/npcs/Wallace.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 24), new QuestLineStepCompletedRequirement('The Delta Episode', 26, GameConstants.AchievementOption.less)]), +}); +const Zinnia6 = new NPC('Zinnia', [ + 'Your Rayquaza approaches Zinnia.', + 'Yes! Finally! The moment I have been waiting for! I have gathered enough Key Stones to draw out the latent power in Rayquaza and stop the impending disaster!', + 'Huh?! H-how can this be? I did everything I was supposed to, and you\'re not changing! Come on! Do it! Mega Evolve! Why?!', + 'Is it... you\'re not here for me? You\'re here for $playername$? That\'s no fair! I\'m the chosen one!', + 'You notice the Meteorite Shards you have been carrying have fused together and are emitting a powerful glow.
    ', +], { image: 'assets/images/npcs/other/RayquazaEncounter.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 28), new QuestLineStepCompletedRequirement('The Delta Episode', 30, GameConstants.AchievementOption.less)]), +}); +const Zinnia7 = new NPC('Zinnia', [ + 'You did it! Your bond with Rayquaza is strong enough to bring out its Mega Evolution!', + 'Here, take this space suit! I put it together from parts I... Er... Borrowed from the Aqua and Magma Hideouts. It should keep you safe while you accompany Mega Rayquaza into space.', +], { image: 'assets/images/npcs/Zinnia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Delta Episode', 30), new QuestLineStepCompletedRequirement('The Delta Episode', 32, GameConstants.AchievementOption.less)]), +}); +const Cozmo4 = new NPC('Dr. Cozmo', [ + 'You did it! You saved Hoenn and maybe the whole planet by destroying the meteor!', + 'We have been working on repairing all the damage your... friend did when she was here last. The rocket system here at the Space Center should be able to take you up to the debris field the meteor left behind any time you want!', +], { image: 'assets/images/npcs/Dr Cozmo.png', + requirement: new QuestLineStepCompletedRequirement('The Delta Episode', 32), +}); +const ShoalFisherman1 = new NPC('Shoal Fisherman', [ + 'Hi! I\'m collecting shells while I fish. There\'s a lot of neat stuff lying around here.', +], { + image: 'assets/images/npcs/Fisherman.png', + requirement: new TemporaryBattleRequirement('Shoal Fisherman', 1, GameConstants.AchievementOption.less), +}); +const ShoalFisherman2 = new NPC('Shoal Fisherman', [ + 'Oh well. Back to fishin\'.', +], { + image: 'assets/images/npcs/Fisherman.png', + requirement: new TemporaryBattleRequirement('Shoal Fisherman'), +}); +const GraniteCamper1 = new NPC('Camper', [ + 'This is a prime camping spot! Gem and mineral hunters come from all over the world to explore here!', +], { + image: 'assets/images/npcs/Camper.png', + requirement: new TemporaryBattleRequirement('Delta Brock', 1, GameConstants.AchievementOption.less), +}); +const GraniteCamper2 = new NPC('Camper', [ + 'Wow! I can\'t believe THE Kanto Gym Leader Brock came all this way! What an honor to meet him!', +], { + image: 'assets/images/npcs/Camper.png', + requirement: new TemporaryBattleRequirement('Delta Brock'), +}); +const IcyBoulder = new NPC('Icy Boulder', [ + 'A large, icy boulder sits in the corner of the cave. Maybe you can move it when you\'re stronger?', +], { + requirement: new TemporaryBattleRequirement('Icy Boulder', 1, GameConstants.AchievementOption.less), +}); +const DeltaSteven2 = new NPC('Steven', [ + 'You\'re a rather impressive trainer $playername$, but there\'s no way you can beat me. Come back when you\'re stronger.', +], { + image: 'assets/images/npcs/Steven.png', + requirement: new TemporaryBattleRequirement('Delta Steven', 1, GameConstants.AchievementOption.less), +}); +const DeltaSteven3 = new NPC('Steven', [ + 'Heh... You know, this experience really brought it home for me again that there is still so much about this world that I do not know. Thank you, $playername$ for all your help.', +], { + image: 'assets/images/npcs/Steven.png', + requirement: new TemporaryBattleRequirement('Delta Steven'), +}); +const HoennStoneSalesman1 = new NPC('Stone Salesman', [ + 'I\'m hunting for rare stones! If I find any extras, I\'ll sell you some!', +], { + requirement: new TemporaryBattleRequirement('Hoenn Stone Salesman', 1, GameConstants.AchievementOption.less), +}); +const HoennStoneSalesman2 = new NPC('Stone Salesman', [ + 'I\'m selling some unusual stones for gems. Let me know if any of them strike your fancy!', +], { + requirement: new TemporaryBattleRequirement('Hoenn Stone Salesman'), +}); +const MrStone1 = new NPC('Mr. Stone', [ + 'Hello, $playername$! It\'s good to see you again, but I have some dire news.', + 'Despite Zinnia having stolen their leaders\ Key Stones, Team Aqua and Team Magma seem to be at it again, cooking up a scheme involving something called "Primal Reversion".', + 'My researchers tell me that there is a mural carved into the wall of Granite Cave that has some information about "Primal Reversion". Can you find it, and report back?', +], { image: 'assets/images/npcs/Mr Stone.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Primal Reversion'), new QuestLineStepCompletedRequirement('Primal Reversion', 1, GameConstants.AchievementOption.less)]), +}); +const PrimalMural1 = new NPC('Groudon Mural', [ + 'A large mural depicting some sort of fire-spewing lizard Pokémon. It seems to be engaged in a battle.', +], { image: 'assets/images/npcs/other/GroudonMural.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 1), new QuestLineStepCompletedRequirement('Primal Reversion', 3, GameConstants.AchievementOption.less)]), +}); +const PrimalMural2 = new NPC('Kyogre Mural', [ + 'A large mural depicting some sort of oceanic whale-like Pokémon. It seems to be engaged in a battle.', + 'You see someone else looking at the mural: Steven Stone!', +], { image: 'assets/images/npcs/other/KyogreMural.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 1), new QuestLineStepCompletedRequirement('Primal Reversion', 3, GameConstants.AchievementOption.less)]), +}); +const PrimalSteven = new NPC('Steven', [ + 'Hello again, $playername$! I see you\'re interested in these murals as well? They seem to be about Groudon and Kyogre.', + 'So in the ancient world, their primal forms once held this much power…? The super-ancient Pokémon… What terrible strength… But this appearance here… It seems somehow different from Mega Evolution, but somehow related.', + 'If you don\'t mind me asking… Do you feel anything in particular when you look up at this wall? A primal world, lost thousands of years in the past… A Legendary Pokémon of tremendous power became humanity\'s greatest threat…', + 'The terror aroused by that power is clear to see in this ancient artwork. You know who might know more about this? Captain Stern, a sailor who works for my father.', + 'He\'s usually out to sea, but you can find him in Sea Mauville if the weather is too stormy to sail.', +], { image: 'assets/images/npcs/Steven.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 2), new QuestLineStepCompletedRequirement('Primal Reversion', 4, GameConstants.AchievementOption.less)]), +}); +const Stern1 = new NPC('Captain Stern', [ + 'Ahoy! What brings you to this port?', + 'On the search for mysteries of the sea, eh? Well then I have one whale of a tale for you! But are yeh worthy?', +], { image: 'assets/images/npcs/Sailor.png', + requirement: new MultiRequirement([new WeatherRequirement([WeatherType.Thunderstorm]), new QuestLineStepCompletedRequirement('Primal Reversion', 3), new QuestLineStepCompletedRequirement('Primal Reversion', 5, GameConstants.AchievementOption.less)]), +}); +const SternSubstitute = new NPC('Deck Swabber', [ + 'Hoy thar, matey! What\'s that? You lookin\' for Cap\'n Stern, are ya? That ol\' Jack Tar! A loose cannon \'e is! You\'ll only see \'im ashore in a Thunderstorm. \'E\'ll say it\'s all due to protocol but the trut\' is lightnin\' scares \'im stem to stern! Didn\' \'ear that from me \'ough...', + '', + 'If ya feel like meetin\' \'im, the fine folks at the Weather Insitute can tell you when the next storm\'s brewin\'.', +], { image: 'assets/images/npcs/Janitor.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 3), new QuestLineStepCompletedRequirement('Primal Reversion', 5, GameConstants.AchievementOption.less)]), +}); +const Stern2 = new NPC('Captain Stern', [ + 'I see you can be trusted with the mysteries of the sea!', + 'I have been seeing a lot of strange activity around the Seafloor Cavern recently. Whirlpools, thunderstorms, and all nature of strange beasts.', + 'There\'s an old submarine around here that I\'ve been working on upgrading to go explore the lowest parts of that cavern, but need some help getting the parts.', + 'The hull needs some new Metal Coating, the ballast tanks need filled with Mystic Water, and some Heat Rocks are needed for a dive that deep.', +], { image: 'assets/images/npcs/Sailor.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 5), new QuestLineStepCompletedRequirement('Primal Reversion', 7, GameConstants.AchievementOption.less)]), +}); +const Stern3 = new NPC('Captain Stern', [ + 'Thanks for getting all the supplies together, $playername$!', + 'We\'re ready to set sail to the Seafloor Cavern!', +], { image: 'assets/images/npcs/Sailor.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 7), new QuestLineStepCompletedRequirement('Primal Reversion', 9, GameConstants.AchievementOption.less)]), +}); +const WeatherScan = new NPC('Scan for unusual weather', [ + 'Pressure readings are indicating that a huge storm is brewing in Hoenn. All instruments point to Mt. Pyre as the center of the disturbance.', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 11), new QuestLineStepCompletedRequirement('Primal Reversion', 13, GameConstants.AchievementOption.less)]), +}); +const PrimalArchie = new NPC('Archie', [ + 'Bwahahahaha! At last… AT LAST! I\'ve finally done it!!! It hasn\'t even finished reversion, and it still has this much power!!! With this I can return everything to its natural beginning! It\'s time at last!', + 'Is that crew outside?', + 'What is it…? Oh? So the great deluge has begun… Bwahahahaha! But of course it has! That is exactly what I have―', + 'What…? What do you mean far more than we thought?! It can\'t be… Then if it completes its Primal Reversion… N-never mind that! Just keep an eye on it!', + 'All that matters is… That I have used the Blue Orb to awaken Kyogre… And now… I will return this world to its natural state… The state that is best for Pokémon!', +], { image: 'assets/images/npcs/Aqua Leader.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 13), new QuestLineStepCompletedRequirement('Primal Reversion', 15, GameConstants.AchievementOption.less)]), +}); +const PrimalMaxie = new NPC('Maxie', [ + '... Hm? A message from our members outside? What is it? So the sun has turned mercilessly fierce in its heat. I should expect so. That is what I have long—', + 'No, what WE have long wished for. What?! The heat is greater than simulations predicted? It will be a risk to our own safety if it continues?! That cannot be...', + 'It has only just awoken... Where is it getting so much power from? And how much more will it gain when it does undergo Primal Reversion... C-continue your readings! Then report back!', + 'All that matters is... That I have used the red orb to awaken Groudon. And now... I will transform this planet to a land ideal for humanity.', +], { image: 'assets/images/npcs/Magma Leader.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Primal Reversion', 13), new QuestLineStepCompletedRequirement('Primal Reversion', 15, GameConstants.AchievementOption.less)]), +}); +const MrStone2 = new NPC('Mr. Stone', [ + 'Thank you, $playername$! Your heroics have saved Hoenn once again!', + 'My researchers tell me that since their defeat, Groudon and Kyogre have been reverting to their primal forms in the Cave of Origin during Harsh Sunlight and Rainy weather.', + 'They are certainly very dangerous, but it doesn\'t seem like they are a threat to the region anymore.', +], { image: 'assets/images/npcs/Mr Stone.png', + requirement: new QuestLineStepCompletedRequirement('Primal Reversion', 15), +}); +const ZinniaOrigin = new NPC('Zinnia', [ + 'Wow, $playername$! You\'ve been busy!', + 'Now that things are calmer in Hoenn, I\'ve decided to keep an eye on Kyogre and Groudon and make sure they don\'t cause any more trouble.', + 'Groudon reverts to its Primal form when the sun is harsh, and Kyogre reverts to its Primal form in the rain.', + 'Archie and Maxie are still lurking somewhere in Hoenn, but without the Orbs I think they\'re mostly harmless. If you need some help smacking em down again, come get me!', +], { image: 'assets/images/npcs/Zinnia.png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('The Delta Episode'), new QuestLineCompletedRequirement('Primal Reversion')]), +}); +const ExploreStand = new NPC('Explore the Outskirt Stand', [ + 'You look around the Outskirt Stand, and see two shady figures shuffling off into the horizon. As you move to get a closer look, some guy steps in your way.', + 'Hey there! You\'re a fresh face \'round these parts, aren\'tcha!', + 'You\'ll have to let me welcome you with a battle, or my name ain\'t Willie!', +], { image: 'assets/images/npcs/Willie.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Shadows in the Desert'), new QuestLineStepCompletedRequirement('Shadows in the Desert', 1, GameConstants.AchievementOption.less)]), +}); +const Willie = new NPC('Willie', [ + 'Well partner, that was some dang fancy fighting, I\'ll tell you what.', + 'I dunno what your plans are round these parts, but you\'d best keep an eye out for some of them dang ole Shadow Pokémon. Give a stranger enough of a whooping an\' ya might see yourself face to face with one in a dungeon next time!', + 'I hear they are weaker than normal Pokémon but can hold a fancy incense. If you manage to purify their souls, they\'ll get a wee bit stronger!', +], { image: 'assets/images/npcs/Willie.png', + requirement: new QuestLineStepCompletedRequirement('Shadows in the Desert', 1), +}); +const Sack = new NPC('Check the sack', [ + 'You open the sack and a girl pops out!', + 'Thanks for letting me out! I thought I was done for!', + 'My name is Rui, by the way. I\'m a psychic of sorts, on a mission to save Pokémon who have had their souls corrupted by some evil folks in Orre.', + 'There\'s a few in this city that need help. Can you come with me though? I\'m worried more shady guys will show up.', + 'I can point out which Pokémon have been corrupted, or turned into "Shadow Pokémon", and you can confiscate them from evildoers using your Pokéballs.', + 'You can adjust your Catch Filters to catch any Shadow Pokémon now too.', +], { image: 'assets/images/npcs/Rui.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 2), new QuestLineStepCompletedRequirement('Shadows in the Desert', 4, GameConstants.AchievementOption.less)]), +}); +const EsCade1 = new NPC('Mayor Es Cade', [ + 'Ah, you must be travelers! Welcome to Phenac City! I am Es Cade, the Mayor. Now, you wanted to see me? Is there something that I may be able to assist you with?', + 'O-o-o-oh, my! Shadow Pokémon? And they attack people?! Now if that were true, that would be truly frightening. However, that is a little hard to believe.', + 'I understand your concern, though. I will order an investigation at once.', + 'I promise you, we will obtain useful information about those sinister Pokémon. While we do so, I heartily recommend that you visit our Stadium, the symbol of our civic pride!', +], { image: 'assets/images/npcs/Es Cade.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 4), new QuestLineStepCompletedRequirement('Shadows in the Desert', 6, GameConstants.AchievementOption.less)]), +}); +const Rui1 = new NPC('Rui', [ + 'There\'s something suspicious going on here, but I\'m not sure what our next move is here.', + 'The Stadium here isn\'t even open yet, I think the Mayor was just trying to get rid of us.', + 'Let\'s see if we can find out more in Pyrite Town.', +], { image: 'assets/images/npcs/Rui.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 5), new QuestLineStepCompletedRequirement('Shadows in the Desert', 7, GameConstants.AchievementOption.less)]), +}); +const Duking1 = new NPC('Duking', [ + 'Grr....', + 'Those masked trainers went and kidnapped my beloved Plusle! How dare they!', + 'They told me that I had to let them have free reign in town, or there would be trouble. They\'re out at the Colosseum causing trouble.', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 7), new QuestLineStepCompletedRequirement('Shadows in the Desert', 9, GameConstants.AchievementOption.less)]), +}); +const Doken1 = new NPC('Doken', [ + 'Yow! You\'re too tough!', + 'I know the Plusle you\'re looking for, it got taken by the infamous dance machine, Miror B.', + 'You don\'t want to mess with him, I promise! Oh? You do?', + 'Well, his hideout is in the Pyrite Cave. But you shouldn\'t go there.', +], { image: 'assets/images/npcs/Hunter (male).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 10), new QuestLineStepCompletedRequirement('Shadows in the Desert', 12, GameConstants.AchievementOption.less)]), +}); +const FreePlusle = new NPC('Free Duking\'s Plusle', [ + 'Miror B. flees, leaving Plusle behind. Plusle runs off in the direction of Pyrite Town.', +], { image: 'assets/images/pokemon/311.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 12), new QuestLineStepCompletedRequirement('Shadows in the Desert', 14, GameConstants.AchievementOption.less)]), +}); +const Rui2 = new NPC('Rui', [ + 'You did a good thing, freeing that Plusle from those goons. I think they were all part of the evil organization I\'ve been hearing about: Team Cipher!', + 'My grandfather might know more about them, he\'s a smart guy. Let\'s go see him in Agate Village!', +], { image: 'assets/images/npcs/Rui.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 13), new QuestLineStepCompletedRequirement('Shadows in the Desert', 15, GameConstants.AchievementOption.less)]), +}); +const GrandpaEagun1 = new NPC('Grandpa Eagun', [ + 'Rui! And you are? $playername$? Nice to meet you!', + 'Thank you both for saving me from those goons. They were disrupting the peace and tranquility of this whole area.', + '$playername$, if you ever have troubled or downright evil Pokémon, take them to the nearby Relic Stone. Its power, combined with the power of friendship you share with your Pokémon, may purify their souls.', +], { image: 'assets/images/npcs/Old Man.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 16), new QuestLineStepCompletedRequirement('Shadows in the Desert', 18, GameConstants.AchievementOption.less)]), +}); +const Rui3 = new NPC('Rui', [ + 'Have you seen this crazy broadcast on TV?', + 'Rui shows you a TV broadcast coming out of a dark room underground, in which a beautiful woman is encouraging her minions to steal Pokémon.', +], { image: 'assets/images/npcs/Rui.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 18), new QuestLineStepCompletedRequirement('Shadows in the Desert', 20, GameConstants.AchievementOption.less)]), +}); +const SearchTheStudio = new NPC('Search The Studio', [ + 'Scripts litter Venus\' desk, as well as other, more suspicious files addressing what trainers in town have which Pokémon. There are also several letters labeled "Mayor\'s Office".', + 'Rui calls to you from across the room:', + 'Hey $playername$! I found a button! I\'m gonna press it!', + 'An explosion rocks the room, revealing a tunnel out of a secret entrance. The scripts and letters are scattered all over the studio, making them impossible to sort out.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 20), new QuestLineStepCompletedRequirement('Shadows in the Desert', 22, GameConstants.AchievementOption.less)]) }); +const EsCade2 = new NPC('Mayor Es Cade', [ + 'My, my. That certainly was a battle worth seeing. I must be honest with you. I never imagined that you would get this far.', + 'Oh, dear me. Do you fail to understand still? You\'re such an innocent child. At times, I am the affable mayor of Phenac... And at others, I am the secret boss of the criminal syndicate Cipher!', + 'I am Evice, and I shall rule the world!', + 'The Mayor changes before your eyes, taking on a much more sinister appearance.', +], { image: 'assets/images/npcs/Es Cade.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 23), new QuestLineStepCompletedRequirement('Shadows in the Desert', 25, GameConstants.AchievementOption.less)]), +}); +const EviceEscape = new NPC('Watch Evice Escape', [ + 'Before the helicopter can land, a fireball shoots across the sky, blowing it up!', + 'A Ho-oh flies low, screeching a thanks to you for stopping the evil Team Cipher.', + '
    ', +], { image: 'assets/images/npcs/other/EviceHelicopter.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Shadows in the Desert', 25), new QuestLineCompletedRequirement('Shadows in the Desert', GameConstants.AchievementOption.less)]), +}); +const PhenacRoller = new NPC('Cool Dude', [ + 'There\'s been a lot of crime around here recently. But nothing I can\'t handle!', + 'Some folks have been corrupting their Pokémon and making them commit totally jank acts.', + 'Those Pokémon would be better off in the hands of a radical trainer who knows how to use Catch Filters, like me!', +], { image: 'assets/images/npcs/Roller Boy.png' }); +const OrreRoamerNPC = new RoamerNPC('Fateen\'s Fortune Telling', [ + 'I sense the presence of rare Pokémon at the {ROUTE_NAME}! Hurry, before the fates intervene!', +], GameConstants.Region.hoenn, RoamingPokemonList.findGroup(GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre), 'assets/images/npcs/Psychic (female).png'); +const AgateAthlete = new NPC('Jogger', [ + 'This town is pretty quiet. Most folks here are retired trainers.', + 'We\'re always happy to help out any young folks who come through though!', + 'Our only real tourist attraction is the Relic Stone north of town. Just passing by it is enough to make you feel calmer.', +], { image: 'assets/images/npcs/Athlete (male).png' }); +const RelicSage = new NPC('Relic Stone Sage', [ + 'This stone has the power to cleanse and purify the spirits of Pokémon.', + 'If you train with your Pokémon, you will gain spiritual energy, or "Flow". You can use this Flow to purify your Pokémon.', + 'Purification will take more flow with each Pokémon you purify.', + ' ', +], { image: 'assets/images/npcs/Sage.png' }); +const GateonSailor = new NPC('Sailor', [ + 'I\'ve been waiting for the S. S. Libra to come into port for HOURS!', + 'Rumor has it that some giant Pokémon picked it up and flew away with it, but that has to be impossible.', + 'If such a Pokémon existed, Professor Krane at the Pokémon HQ Lab would know about it.', +], { image: 'assets/images/npcs/Sailor.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Gale of Darkness'), new QuestLineStepCompletedRequirement('Gale of Darkness', 1, GameConstants.AchievementOption.less)]), +}); +const Chobin1 = new NPC('Chobin', [ + 'Chobin has heard all about the Shadow Pokémon from Dr. Kaminko!', + 'There is a stone near Agate Village that can purify the souls of Pokémon, yes indeed.', +], { image: 'assets/images/npcs/Chobin.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 3), new QuestLineStepCompletedRequirement('Gale of Darkness', 5, GameConstants.AchievementOption.less)]), +}); +const Eagun2 = new NPC('Grandpa Eagun', [ + 'Ah, $playername$! It\'s good to see you again, though I wish it was under better circumstances.', + 'Yes, I heard that Professor Krane was kidnapped from the Pokémon HQ Lab. There\'s some shady characters up on Mount Battle who might know more.', +], { image: 'assets/images/npcs/Old Man.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 4), new QuestLineStepCompletedRequirement('Gale of Darkness', 6, GameConstants.AchievementOption.less)]), +}); +const Lovrina = new NPC('Cipher Admin Lovrina', [ + 'Ooh, I so hate to say this! I can\'t beat you right now. Master Greevil will so be cross with me but… But that\'s okay.', + 'I\'ll let you owe me this one time. But you have to promise you will think of my plan next time. If you see XD001 you will so want to help me. I\'ll so be waiting for you!', + 'And don\'t bother looking for Professor Krane here, he\'s like long gone.', +], { image: 'assets/images/npcs/Cipher Admin Lovrina.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 7), new QuestLineStepCompletedRequirement('Gale of Darkness', 9, GameConstants.AchievementOption.less)]), +}); +const Exol = new NPC('Cipher Commander Exol', [ + 'Your victory doesn\'t matter, we got what we came for!', + 'Exol shouts to his assembled peons:', + 'Troops, move out! On to Phenac!', +], { image: 'assets/images/npcs/Cipher (commander).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 11), new QuestLineStepCompletedRequirement('Gale of Darkness', 13, GameConstants.AchievementOption.less)]), +}); +const Snattle = new NPC('Cipher Admin Snattle', [ + 'How is this possible?! I\'ve never seen a trainer so strong! But, no matter! Surely I\'ve bought Gorigan enough time.', + 'His precious recovery operation must be finished by now. Today, we will leave quietly. But don\'t you forget us!', +], { image: 'assets/images/npcs/Cipher Admin Snattle.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 14), new QuestLineStepCompletedRequirement('Gale of Darkness', 16, GameConstants.AchievementOption.less)]), +}); +const Trest = new NPC('Mayor Trest', [ + 'Thank you, $playername$, for saving our town from Team Cipher once again.', + 'I haven\'t seen Professor Krane around here, but hopefully this will be of some use to you.', +], { image: 'assets/images/npcs/Office Worker (male).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 15), new QuestLineStepCompletedRequirement('Gale of Darkness', 17, GameConstants.AchievementOption.less)]), +}); +const Verich = new NPC('Mr. Verich', [ + 'Hohoho! You must be the $playername$ I\'m hearing so much about you from my.... employees.', + 'There\'s a lot of rumors buzzing around about the S. S. Libra, but if you ask me, it\'s long gone and may never be found.', + 'You\'d have to be as crazy as Kaminko to go looking for it.', +], { image: 'assets/images/npcs/Grand Master Greevil.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 16), new QuestLineStepCompletedRequirement('Gale of Darkness', 18, GameConstants.AchievementOption.less)]), +}); +const Chobin2 = new NPC('Chobin', [ + 'Dr. Kaminko and Chobin have invented this most wonderful device! The Robo Groudon!', + 'With this robot, we can explore the deserts of Orre! Surely Chobin and $playername$ will find something interesting!', +], { image: 'assets/images/npcs/Robo Groudon.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 18), new QuestLineStepCompletedRequirement('Gale of Darkness', 20, GameConstants.AchievementOption.less)]), +}); +const SearchLibra = new NPC('Search the S. S. Libra', [ + 'You rummage around in the wreckage of the S. S. Libra, and find evidence of a recent battle. It looks like something very strong beat up a lot of weaker Pokémon', + 'Deep in the wreckage, you find a box that was left behind on accident.', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 20), new QuestLineStepCompletedRequirement('Gale of Darkness', 22, GameConstants.AchievementOption.less)]), +}); +const ProfKrane = new NPC('Professor Krane', [ + '$playername$! Thank you for rescuing me from those fiends!', + 'In my time in captivity, I learned that the new Grand Master of Team Cipher has used a powerful Shadow Pokémon to kidnap all the trainers and Pokémon from the S. S. Libra and has taken them to Citadark Island!', + 'Snagging this powerful Shadow Pokémon will be hard, take this Master Ball!', +], { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Gale of Darkness', 25), new QuestLineStepCompletedRequirement('Gale of Darkness', 27, GameConstants.AchievementOption.less)]), +}); +const DrKaminko = new NPC('Dr. Kaminko', [ + 'Leave me alone! I\'m WORKING!' +]); +const OrreColosseumSpectator = new NPC('Colosseum Spectator', [ + 'Only the toughest trainers in Orre are allowed to fight here! I\'m just watching until I get stronger.' +]); +// For Leafeon and Glaceon. Show up in Hoenn too +const MossRock = new NPC('Moss Rock', [ + 'The rock is covered in moss. It feels pleasantly cool.', +], { + image: 'assets/images/npcs/other/Moss Rock.png', + requirement: new MaxRegionRequirement(GameConstants.Region.sinnoh), +}); +const IceRock = new NPC('Ice Rock', [ + 'The rock is encrusted in ice. It is freezing to touch.', +], { image: 'assets/images/npcs/other/Ice Rock.png', + requirement: new MaxRegionRequirement(GameConstants.Region.sinnoh), +}); +//Hoenn Towns +TownList['Littleroot Town'] = new Town('Littleroot Town', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new BulletinBoard(GameConstants.BulletinBoards.Hoenn)], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_JohtoChampion)], + npcs: [ProfBirch, LittlerootAide, Television1, Television2, DeltaMay1, NewsBirch, DeltaMay2], +}); +TownList['Oldale Town'] = new Town('Oldale Town', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [OldaleTownShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 101)], + npcs: [OldaleTrackingScientist], +}); +TownList['Petalburg City'] = new Town('Petalburg City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [PetalburgCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Petalburg City']), TemporaryBattleList['Courtney 1'], TemporaryBattleList['Matt 1']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 102)], + npcs: [DeltaSteven1, DeltaWally1], +}); +TownList['Rustboro City'] = new Town('Rustboro City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [RustboroCityShop, TemporaryBattleList['Mr. Stone']], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Petalburg Woods'))], +}); +TownList['Dewford Town'] = new Town('Dewford Town', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [DewfordTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Dewford Town'])], { + requirements: [new TemporaryBattleRequirement('May 2')], + npcs: [HoennFossilNpc], +}); +TownList['Slateport City'] = new Town('Slateport City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [SlateportCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Slateport City'])], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Granite Cave'))], + npcs: [SlateportHoennRoamerNPC, MrStone1, MrStone2], +}); +TownList['Mauville City'] = new Town('Mauville City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [MauvilleCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Mauville City']), HoennBerryMaster], { + requirements: [new TemporaryBattleRequirement('May 3')], + npcs: [SkepticalFisherman], +}); +TownList['Sea Mauville'] = new Town('Sea Mauville', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [TemporaryBattleList['Delta Giovanni'], TemporaryBattleList['Captain Stern']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 109)], + npcs: [SeaMauvilleRocket1, SeaMauvilleRocket2, Stern1, SternSubstitute, Stern2, Stern3], +}); +TownList['Verdanturf Town'] = new Town('Verdanturf Town', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [VerdanturfTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Verdanturf Town'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 117)], +}); +TownList['Mt. Chimney'] = new Town('Mt. Chimney', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new MoveToDungeon(dungeonList['Fiery Path']), new MoveToDungeon(dungeonList['Mt. Chimney Crater']), new MoveToDungeon(dungeonList['Jagged Pass']), new MoveToDungeon(dungeonList['Magma Hideout'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 112)], +}); +TownList['Fallarbor Town'] = new Town('Fallarbor Town', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [FallarborTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Fallarbor Town']), HoennFluteMaster, HoennStoneSalesman, TemporaryBattleList['Hoenn Stone Salesman']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 113)], + npcs: [FallarborProfessorCozmo, Cozmo1, HoennStoneSalesman1, HoennStoneSalesman2], +}); +TownList['Lavaridge Town'] = new Town('Lavaridge Town', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [LavaridgeTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Lavaridge Town']), TemporaryBattleList['Clown Jessie & James']], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Jagged Pass'))], + npcs: [MillenniumFest, Butler1], +}); +TownList['Fish Shop'] = new Town('Fish Shop', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [RoadsideStandShop], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.hoenn, 118), + ], + npcs: [RoadsideStandShadySalesman], + ignoreAreaStatus: true, +}); +TownList['Fortree City'] = new Town('Fortree City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [FortreeCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Fortree City'])], { + requirements: [new TemporaryBattleRequirement('May 4')], + npcs: [FortreeWeatherman, FortreeRanger, Steven1, Steven2], +}); +TownList['Wind Chime Shop'] = new Town('Wind Chime Shop', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [WindChimeShop], { + requirements: [new TemporaryBattleRequirement('May 4')], + npcs: [WindChimeShopShadySalesman], + ignoreAreaStatus: true, +}); +TownList['Lilycove City'] = new Town('Lilycove City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [DepartmentStoreShop], +//[new PokemonContestTownContent(), DepartmentStoreShop, HoennContestShop], +{ + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 121)], +}); +TownList['Mossdeep City'] = new Town('Mossdeep City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [MossdeepCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Mossdeep City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 125)], + npcs: [MossdeepAstronomer], +}); +TownList['Mossdeep Space Center'] = new Town('Mossdeep Space Center', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [TemporaryBattleList['Aqua Grunt'], TemporaryBattleList['Magma Grunt'], TemporaryBattleList['Courtney 2'], TemporaryBattleList['Matt 2'], TemporaryBattleList['Dr Cozmo'], new MoveToDungeon(dungeonList['Near Space'])], { + requirements: [new GymBadgeRequirement(BadgeEnums.Mind)], + npcs: [Cozmo2, Zinnia4, Cozmo3, Zinnia5, Cozmo4], +}); +TownList['Pacifidlog Town'] = new Town('Pacifidlog Town', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [PacifidlogTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Pacifidlog Town']), TemporaryBattleList['Underground Fighting Ring']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 131)], + npcs: [PacifidlogDiver], +}); +TownList['Sootopolis City'] = new Town('Sootopolis City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [SootopolisCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Sootopolis City']), TemporaryBattleList['Delta Wallace']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.hoenn, 126), new GymBadgeRequirement(BadgeEnums.Mind)], + npcs: [WeatherBattle1, WeatherBattle2, Wallace3], +}); +TownList['Ever Grande City'] = new Town('Ever Grande City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [EverGrandeCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Ever Grande City'])], { + requirements: [new GymBadgeRequirement(BadgeEnums.Rain)], +}); +TownList['Battle Frontier'] = new Town('Battle Frontier', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [BattleFrontierShop, new BattleFrontierTownContent()], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion)], + npcs: [CoolTrainerDillan], +}); +TownList['Pokémon League Hoenn'] = new Town('Pokémon League Hoenn', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [GymList['Elite Sidney'], GymList['Elite Phoebe'], GymList['Elite Glacia'], GymList['Elite Drake'], GymList['Champion Wallace'], pokeLeagueShop(), TemporaryBattleList['Delta Steven']], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.hoenn, 128), + new TemporaryBattleRequirement('Wally 2'), + ], + npcs: [TicketClaim, DeltaSteven2, DeltaSteven3], +}); +TownList['Southern Island'] = new Town('Southern Island', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [TemporaryBattleList.Latios, TemporaryBattleList.Latias, TemporaryBattleList['Matt 3'], TemporaryBattleList['Courtney 3']], { + requirements: [new CustomRequirement(ko.pureComputed(() => +App.game.keyItems.hasKeyItem(KeyItemType.Eon_ticket)), 1, 'Obtain an Eon Ticket')], + npcs: [SurferDave, SouthernIsland1], +}); +TownList['Outskirt Stand'] = new Town('Outskirt Stand', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [OutskirtStandShop, TemporaryBattleList.Willie, TemporaryBattleList['Miror B. 2']], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion), new QuestLineStartedRequirement('Shadows in the Desert')], + npcs: [ExploreStand, Willie], +}); +TownList['Phenac City'] = new Town('Phenac City', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [PhenacCityShop, new MoveToDungeon(dungeonList['Phenac Stadium']), new MoveToDungeon(dungeonList['Phenac City Battles']), TemporaryBattleList.Folly], { + requirements: [new QuestLineStepCompletedRequirement('Shadows in the Desert', 1)], + npcs: [PhenacRoller, Sack, EsCade1, Rui1, Trest], +}); +TownList['Pyrite Town'] = new Town('Pyrite Town', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [GymList['Cipher Admin Miror B.'], new MoveToDungeon(dungeonList['Pyrite Colosseum']), new MoveToDungeon(dungeonList['The Under']), new MoveToDungeon(dungeonList['Pyrite Town Battles']), new MoveToDungeon(dungeonList['Deep Colosseum']), new MoveToDungeon(dungeonList['Under Colosseum'])], { + requirements: [new QuestLineStepCompletedRequirement('Shadows in the Desert', 6)], + npcs: [OrreRoamerNPC, Duking1], +}); +TownList['Agate Village'] = new Town('Agate Village', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [AgateVillageShop, new MoveToTown('Relic Stone'), new MoveToDungeon(dungeonList['Relic Cave']), TemporaryBattleList['Cipher Peon Doven'], TemporaryBattleList['Cipher Peon Silton'], TemporaryBattleList['Cipher Peon Kass']], { + requirements: [new QuestLineStepCompletedRequirement('Shadows in the Desert', 14)], + npcs: [AgateAthlete], +}); +TownList['Relic Stone'] = new Town('Relic Stone', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [new MoveToTown('Agate Village', undefined, false), new MoveToDungeon(dungeonList['Relic Cave']), new PurifyChamberTownContent()], { + requirements: [new QuestLineStepCompletedRequirement('Shadows in the Desert', 17)], + npcs: [RelicSage, Eagun2], +}); +TownList['Realgam Tower'] = new Town('Realgam Tower', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [new MoveToDungeon(dungeonList['Realgam Tower Battles']), new MoveToDungeon(dungeonList['Realgam Colosseum'])], { + requirements: [new QuestLineStepCompletedRequirement('Shadows in the Desert', 22)], + npcs: [EsCade2], +}); +TownList['Gateon Port'] = new Town('Gateon Port', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [GateonPortShop, new MoveToDungeon(dungeonList['Gateon Port Battles']), new DockTownContent()], { + requirements: [new QuestLineStartedRequirement('Shadows in the Desert')], + npcs: [GateonSailor, Verich], +}); +TownList['Pokemon HQ Lab'] = new Town('Pokemon HQ Lab', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [new ShardTraderShop(GameConstants.ShardTraderLocations['Pokemon HQ Lab']), TemporaryBattleList['Cipher Peon Naps']], { + requirements: [new QuestLineStepCompletedRequirement('Gale of Darkness', 0)], + npcs: [ProfKrane], +}); +TownList['Kaminko\'s Manor'] = new Town('Kaminko\'s Manor', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [TemporaryBattleList['Chobin 1'], TemporaryBattleList['Chobin 2']], { + requirements: [new QuestLineStepCompletedRequirement('Gale of Darkness', 2)], + npcs: [DrKaminko, Chobin1, Chobin2], +}); +TownList['S. S. Libra'] = new Town('S. S. Libra', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [TemporaryBattleList['Cipher Peon Smarton']], { + requirements: [new QuestLineStepCompletedRequirement('Gale of Darkness', 19)], + npcs: [SearchLibra], +}); +TownList['Orre Colosseum'] = new Town('Orre Colosseum', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [GymList['Cipher Admin Lovrina'], GymList['Cipher Admin Snattle'], GymList['Cipher Admin Gorigan'], GymList['Cipher Admin Ardos'], GymList['Cipher Admin Eldes']], { + requirements: [new QuestLineCompletedRequirement('Gale of Darkness')], + npcs: [OrreColosseumSpectator], +}); +//Hoenn Dungeons +TownList['Petalburg Woods'] = new DungeonTown('Petalburg Woods', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new RouteKillRequirement(10, GameConstants.Region.hoenn, 104)], [], { npcs: [MossRock, EasterEggHunter] }); +TownList['Rusturf Tunnel'] = new DungeonTown('Rusturf Tunnel', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [ + new RouteKillRequirement(10, GameConstants.Region.hoenn, 116), + new GymBadgeRequirement(BadgeEnums.Stone), +]); +TownList['Granite Cave'] = new DungeonTown('Granite Cave', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new TemporaryBattleRequirement('May 2')], [TemporaryBattleList['Zinnia 1'], TemporaryBattleList['Delta Brock']], { + npcs: [Zinnia2, Zinnia3, GraniteCamper1, GraniteCamper2, PrimalMural1, PrimalMural2, PrimalSteven], +}); +TownList['Fiery Path'] = new DungeonTown('Fiery Path', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new RouteKillRequirement(10, GameConstants.Region.hoenn, 112)]); +TownList['Meteor Falls'] = new DungeonTown('Meteor Falls', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new RouteKillRequirement(10, GameConstants.Region.hoenn, 114)], [TemporaryBattleList['Draconid Elder'], TemporaryBattleList['Mega Draconid Elder']], { + npcs: [DraconidElder1, DraconidElder2, DraconidElder3], +}); +TownList['Mt. Chimney Crater'] = new DungeonTown('Mt. Chimney Crater', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Meteor Falls'))], [TemporaryBattleList['Butler 1']], { + npcs: [CocoonHatch, Butler3], +}); +TownList['Jagged Pass'] = new DungeonTown('Jagged Pass', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Mt. Chimney Crater'))], [TemporaryBattleList['Butler 2']], { + npcs: [Butler2], +}); +TownList['New Mauville'] = new DungeonTown('New Mauville', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new GymBadgeRequirement(BadgeEnums.Balance)]); +TownList['Weather Institute'] = new DungeonTown('Weather Institute', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new RouteKillRequirement(10, GameConstants.Region.hoenn, 119)], [new WeatherAppTownContent()], { + npcs: [WeatherScan], +}); +TownList['Mt. Pyre'] = new DungeonTown('Mt. Pyre', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new RouteKillRequirement(10, GameConstants.Region.hoenn, 122)], [], { + npcs: [PrimalArchie, PrimalMaxie], +}); +TownList['Magma Hideout'] = new DungeonTown('Magma Hideout', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Mt. Pyre'))], [TemporaryBattleList['Delta Tabitha']], { + npcs: [Maxie], +}); +TownList['Aqua Hideout'] = new DungeonTown('Aqua Hideout', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Magma Hideout'))], [TemporaryBattleList['Delta Shelly']], { + npcs: [Archie], +}); +TownList['Shoal Cave'] = new DungeonTown('Shoal Cave', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new RouteKillRequirement(10, GameConstants.Region.hoenn, 125)], [TemporaryBattleList['Shoal Fisherman'], TemporaryBattleList['Icy Boulder']], { + npcs: [IceRock, ShoalFisherman1, ShoalFisherman2, IcyBoulder], +}); +TownList['Cave of Origin'] = new DungeonTown('Cave of Origin', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [ + new RouteKillRequirement(10, GameConstants.Region.hoenn, 126), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Seafloor Cavern')), +], [], { + npcs: [Wallace1, Wallace2, ZinniaOrigin], +}); +TownList['Seafloor Cavern'] = new DungeonTown('Seafloor Cavern', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [ + new RouteKillRequirement(10, GameConstants.Region.hoenn, 128), + new GymBadgeRequirement(BadgeEnums.Mind), +], [TemporaryBattleList['Archie Primal'], TemporaryBattleList['Maxie Primal']], { + npcs: [], +}); +TownList['Sky Pillar'] = new DungeonTown('Sky Pillar', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [ + new RouteKillRequirement(10, GameConstants.Region.hoenn, 131), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Cave of Origin')) +], [TemporaryBattleList['Zinnia 2'], TemporaryBattleList.Deoxys], { + npcs: [Zinnia1, Zinnia6, Zinnia7], +}); +TownList['Victory Road Hoenn'] = new DungeonTown('Victory Road Hoenn', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [new GymBadgeRequirement(BadgeEnums.Rain)], [TemporaryBattleList['Wally 2']]); +TownList['Sealed Chamber'] = new DungeonTown('Sealed Chamber', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [ + new RouteKillRequirement(10, GameConstants.Region.hoenn, 134), + new GymBadgeRequirement(BadgeEnums.Mind) +], [], { + npcs: [SCEntrance, MazeHintLeft, MazeHintRight, MazeHintStraight, SCMazeLeft, SCMazeLeftWrong, SCMazeRight, SCMazeRightWrong, SCMazeStraight, SCMazeStraightWrong, SCHints, BrailleEnthusiast1, BrailleEnthusiast2, BrailleEnthusiast3], +}); +TownList['Near Space'] = new DungeonTown('Near Space', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Hoenn, [ + new QuestLineCompletedRequirement('The Delta Episode'), +]); +TownList['Phenac City Battles'] = new DungeonTown('Phenac City Battles', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 3), +]); +TownList['Pyrite Town Battles'] = new DungeonTown('Pyrite Town Battles', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 6), +]); +TownList['Pyrite Colosseum'] = new DungeonTown('Pyrite Colosseum', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 8), +], [], { + npcs: [Rui2], +}); +TownList['Pyrite Building'] = new DungeonTown('Pyrite Building', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 9), +], [], { + npcs: [Doken1, Exol], +}); +TownList['Pyrite Cave'] = new DungeonTown('Pyrite Cave', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 11), +], [], { + npcs: [FreePlusle], +}); +TownList['Relic Cave'] = new DungeonTown('Relic Cave', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 15), +], [], { + npcs: [GrandpaEagun1], +}); +TownList['Mt. Battle'] = new DungeonTown('Mt. Battle', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 17), +], [GymList['Cipher Admin Dakim']], { + npcs: [Rui3], +}); +TownList['The Under'] = new DungeonTown('The Under', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 19), +], [GymList['Cipher Admin Venus']], { + npcs: [SearchTheStudio], +}); +TownList['Cipher Lab'] = new DungeonTown('Cipher Lab', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 21), +], [GymList['Cipher Admin Ein']], { + npcs: [Lovrina], +}); +TownList['Realgam Tower Battles'] = new DungeonTown('Realgam Tower Battles', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 22), +]); +TownList['Realgam Colosseum'] = new DungeonTown('Realgam Colosseum', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineStepCompletedRequirement('Shadows in the Desert', 24), +], [], { + npcs: [EviceEscape], +}); +TownList['Snagem Hideout'] = new DungeonTown('Snagem Hideout', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineCompletedRequirement('Shadows in the Desert'), +]); +TownList['Deep Colosseum'] = new DungeonTown('Deep Colosseum', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineCompletedRequirement('Shadows in the Desert'), +]); +TownList['Phenac Stadium'] = new DungeonTown('Phenac Stadium', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineCompletedRequirement('Shadows in the Desert'), +], [], { + npcs: [Snattle], +}); +TownList['Under Colosseum'] = new DungeonTown('Under Colosseum', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [ + new QuestLineCompletedRequirement('Shadows in the Desert'), +]); +TownList['Gateon Port Battles'] = new DungeonTown('Gateon Port Battles', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [new QuestLineStepCompletedRequirement('Gale of Darkness', 1)]); +TownList['Cipher Key Lair'] = new DungeonTown('Cipher Key Lair', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [new QuestLineStepCompletedRequirement('Gale of Darkness', 24)]); +TownList['Citadark Isle'] = new DungeonTown('Citadark Isle', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [new QuestLineStepCompletedRequirement('Gale of Darkness', 26)]); +TownList['Citadark Isle Dome'] = new DungeonTown('Citadark Isle Dome', GameConstants.Region.hoenn, GameConstants.HoennSubRegions.Orre, [new QuestLineStepCompletedRequirement('Gale of Darkness', 27)]); +//Sinnoh Shops +const SandgemTownShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.xClick, + ItemList.SmallRestore, +]); +const JubilifeCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Token_collector, + ItemList.Lucky_egg, + ItemList.Mystery_egg, + ItemList.Wonder_Chest, +]); +const OreburghCityShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.Moon_stone, + ItemList.Sun_stone, +]); +const FloaromaTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Lucky_egg, + ItemList.Linking_cord, + ItemList.Kings_rock, +]); +const EternaCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, + ItemList.Grass_egg, + ItemList.Leaf_stone, +]); +const HearthomeCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xClick, + ItemList.MediumRestore, + ItemList.Fire_egg, + ItemList.Fire_stone, + ItemList.Soothe_bell, +]); +const SolaceonTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Lucky_egg, + ItemList.Shiny_stone, + ItemList.Dusk_stone, + ItemList.Dawn_stone, +]); +const PastoriaShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.LargeRestore, + ItemList.Water_egg, + ItemList.Water_stone, + ItemList.Prism_scale, +]); +const CelesticTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.Lucky_incense, + ItemList.Dragon_egg, + ItemList.Dragon_scale, +]); +const CanalaveCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xClick, + ItemList.Dowsing_machine, + ItemList.Fighting_egg, + ItemList.Metal_coat, +]); +const PalParkShop = new Shop([ + ItemList.Razor_claw, + ItemList.Razor_fang, + ItemList.Combee, + ItemList['Burmy (Plant)'], + ItemList.Cherubi, +]); +const SnowpointCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.Upgrade, +]); +const SunyshoreCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Lucky_egg, + ItemList.Lucky_incense, + ItemList.Electric_egg, + ItemList.Thunder_stone, + ItemList.Deepsea_tooth, + ItemList.Deepsea_scale, +]); +const FightAreaShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Macho_Brace, +]); +const SurvivalAreaShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Electirizer, + ItemList.Magmarizer, +]); +const ResortAreaShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Protector, + ItemList.Dubious_disc, + ItemList.Reaper_cloth, +]); +//Sinnoh Berry Master +const SinnohBerryMaster = new BerryMasterShop(GameConstants.BerryTraderLocations['Hearthome City'], [ + ItemList.Boost_Mulch, + ItemList.Rich_Mulch, + ItemList.Surprise_Mulch, + ItemList.Amaze_Mulch, + ItemList.Freeze_Mulch, + ItemList.Berry_Shovel, + ItemList.Mulch_Shovel, + ItemList.FarmHandRiley, +], 'Sinnoh Berry Master'); +const SecretBerryMaster = new BerryMasterShop(GameConstants.BerryTraderLocations['Secret Berry Shop'], [ + ItemList.Freeze_Mulch, + ItemList.Gooey_Mulch, + ItemList.Berry_Shovel, + ItemList.Mulch_Shovel, +], 'Secret Berry Shop'); +//Sinnoh NPCs +const TwinleafContestChampion = new NPC('Contest Champion', [ + 'Welcome to Sinnoh! There are many legends and myths here. For example, it is said that trainers that conquer the Lake nearby, Lake Verity, will meet a mythical Pokémon known for Emotion roaming around the region. It sure would have been awesome to partner with that Pokémon in one of my routines!', +], { image: 'assets/images/npcs/Contest Champion (Johanna).png' }); +const SandgemBeachcomber = new NPC('Beachcomber', [ + 'Hmmm… Oh! Sorry, I didn’t see you there! Sometimes the strangest things wash up on this beach, so I just got caught up in the search.', + 'Just last week a weird blue stone with a red center showed up. A rather slow-looking guy with a slowpoke found it first, and took it to the Pokémon Lab.', + 'I think I\'ve seen that stone before - it was on a book of an old legend about the sea.', + 'I think it went something like... "When the Prince of the Seas is born, all of his kin will come to this region to celebrate."', + 'Does that mean when this Prince comes, Pokémon like him will start roaming the region?', +]); +const SinnohFossilNpc = new NPC('Gossiper', [ + 'Did you know?! The Gym Leaders of Canalave and Oreburgh are father and son! And what\'s more- there\'s a third person in the mix! Apparently he\'s such a dedicated digger he travelled all the way to Kanto to set up shop selling Explorer Kits! Talk about a family tradition!', + 'Too bad there are only two new fossils in the Sinnoh region. If there was one more, maybe he could be a Gym Leader too!', + 'What? Oh you didn\'t know? The ace Pokémon of Gym Leaders Byron and Roark are resurrected from fossils!', +], { image: 'assets/images/npcs/Aroma Lady.png' }); +const FloaromaFlowerGirl = new NPC('Flower Girl', [ + 'Something amazing just happened!', + 'My friend was taking their Eevee on a walk through Eterna Forest, and it suddenly evolved!', + 'Can you believe that?', +], { image: 'assets/images/npcs/Aroma Lady.png' }); +const EternaLassCaroline = new NPC('Lass Caroline', [ + 'Oh, you came from the Forest! That Old Chateau is so creepy, isn’t it? I’ve heard that trainers that catch the weird ghost in the TV have found ghosts in other appliances. Even lawnmowers!', +], { image: 'assets/images/npcs/Lass.png' }); +const OreburghConstructionWorker = new NPC('Construction Worker', [ + 'I was doing some exploring in Mt. Coronet last week, and my Nosepass gained a lot of levels.', + 'I had a big suprise when he reached level 20 though!', +], { image: 'assets/images/npcs/Worker (male).png' }); +const HearthomeContestFan = new NPC('Contest Fan', [ + 'My favourite contestant had a big reveal for us this week!', + 'Their prized Magneton had evolved into a Magnezone!', + 'I\'m so happy for them, all of that training in Mt. Coronet must have paid off!', +]); +const CelesticGrandma = new NPC('Cynthia\'s Grandmother', [ + 'Hello young one, have you come here to learn of Sinnoh’s mysteries?', + 'Did you know that in Johto they don’t see Pokémon like Mamoswine? It’s strange too, because you don’t even need a stone to evolve Piloswine… maybe they should try the Day Care?', +]); +const PalParkWarden = new NPC('Pal Park Warden', [ + 'Hey, welcome to the Pal Park! Have you been to my Dad’s Safari Zone in Kanto? We don’t have as many Pokémon here, but I’ve heard that a flower Pokémon found here can bloom when it’s sunny outside!', +]); +const PalParkBurglar = new NPC('Burglar', [ + 'A lot of scary stuff can happen at night. For example, I only see people using Razor Claw and Razor Fang at night.', + 'I wonder why that is? Maybe it doesn\'t work during the day?', +], { image: 'assets/images/npcs/Burglar.png' }); +const CanalaveRiley = new NPC('Riley', [ + 'My partner Lucario evolved from a Riolu during daytime when I used a Soothe Bell.', +], { image: 'assets/images/npcs/Riley.png' }); +const CanalaveYoungBoy = new NPC('Young Boy', [ + 'Oh, hello! Say, have you ever heard of Cresselia? Once when I was really little I had a really bad dream I couldn’t wake up from, but then a kind trainer went to an island near here and got help from Cresselia to cure me!', + 'Maybe if you can prove yourself by conquering that island, you could find Cresselia roaming around the region...', +]); +const CanalaveSinnohMyth = new NPC('Sinnoh\'s Myth', [ + 'Three Pokémon there were.', + 'Into the lakes they dove.', + 'Deep, deep, drawing no breath.', + 'Deeper, deeper they dove.', + 'Into suffocating depths they dove.', + 'Deeper, then deepest they alight.', + 'From the lake floor they rise.', + 'Bearing with them the power to make vast lands, they rise again.', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Zero\'s Ambition', 0), new QuestLineStepCompletedRequirement('Zero\'s Ambition', 2, GameConstants.AchievementOption.less)]) +}); +const VerityMesprit = new NPC('Mesprit', [ + 'You are the trainer looking for the Distortion World, right?', + 'We can help you in your mission, but we will need a few materials.', + 'Collect 10 Purple Shards in dungeons from the Johto region and then visit my two siblings. They will also help you in your quest.', +], { + image: 'assets/images/pokemon/481.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Zero\'s Ambition', 2), new QuestLineStepCompletedRequirement('Zero\'s Ambition', 4, GameConstants.AchievementOption.less)]) +}); +const ValorAzelf = new NPC('Azelf', [ + 'Mesprit told me you would come.', + 'In order to enter the Distortion World, we need to open a gate to it. The materials you gathered for Mesprit are only a third of the ones needed to open such gate.', + 'Obtain 10 Ochre Shards and then visit Uxie at Lake Acuity. These Shards can be found in a few dungeons from the Hoenn region.', +], { + image: 'assets/images/pokemon/482.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Zero\'s Ambition', 4), new QuestLineStepCompletedRequirement('Zero\'s Ambition', 6, GameConstants.AchievementOption.less)]) +}); +const SnowpointYoungGirl = new NPC('Young Girl', [ + 'Someone told me that training an Eevee on Route 217 will make it evolve.', + 'They must be lying, how can that be true?!', +]); +const MindyFriend = new NPC('Mindy\'s Friend', [ + 'I recently traded with my friend Mindy expecting to get a Gengar. Instead, her Haunter came with this useless rock! I can\'t believe she would do this to me!', + 'Here, you can have MINDY\'S-GIFT for all I care! I pity whoever decides to trade with her in the future.', +]); +const AcuityUxie = new NPC('Uxie', [ + 'My siblings had informed me of your arrival.', + 'Looks like you have already gathered more than half of the necessary materials. The only materials left to make the key are 10 Crimson Shards, which can be found in various Sinnoh Dungeons.', + 'We will be waiting at Sendoff Spring, meet us there after you have collected the shards.', +], { + image: 'assets/images/pokemon/480.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Zero\'s Ambition', 6), new QuestLineStepCompletedRequirement('Zero\'s Ambition', 8, GameConstants.AchievementOption.less)]) +}); +const SunyshoreRibbonerJulia = new NPC('Ribboner Julia', [ + 'Oh! I don’t get visitors often. My husband is a sailor who visits faraway lands… he always tells me these fantastic things.', + 'One time he came back and his Wailmer looked funny. We took it to the Pokécenter and they said it had caught some weird virus called Pokérus!', + 'They said that it is a virus that can spread in the Pokémon Day Care. They said that Pokémon can only spread or catch the virus if they aren’t ready to hatch yet, and that they need to share a type with one another.', + 'If you have a Pokémon with Pokérus, try catching more of that type of Pokémon. When he got back from his next trip, oddly enough Wailmer seemed stronger than ever!', +], { image: 'assets/images/npcs/Beauty.png' }); +const FightAreaAceTrainer = new NPC('Ace Trainer Quinn', [ + 'Something amazing happened on top of Mt. Coronet. We could see it all the way from here. I\'m sure everyone in the entire region saw it.', + 'What? You were there? What happened? What was that purple thing?', + 'The Distortion World? Hold on, I think I\'ve heard that name before, there was a guy around here named Zero looking for a way to enter that place.', + 'I doubt he\'d be interested in talking to you unless you could help him find a way to get there... Can\'t the lake guardians help you with that?', +], { image: 'assets/images/npcs/Ace Trainer (male).png' }); +const FightAreaZero1 = new NPC('Zero', [ + 'You\'re the Champion, right? I need your help on a small errand.', + 'My old friend Newton used to study the Distortion World, he was working on opening a gate to it. I\'ve heard that you were able to enter the Distortion World from a portal at the top of Mt. Coronet, so I was wondering if you could help me open a new portal to fulfill my friend\'s wish.', + 'An old book about Sinnoh\'s history was recently discovered at the Canalave City Library, it may have useful information.', +], { + image: 'assets/images/npcs/Zero.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Zero\'s Ambition'), new QuestLineStepCompletedRequirement('Zero\'s Ambition', 1, GameConstants.AchievementOption.less)]), +}); +const FightAreaZero2 = new NPC('Zero', [ + 'What was in that book? Did you find any information on the Distortion World?', + 'It didn\'t mention it once? That\'s a shame.', + 'Wait, you said the book mentioned the Lake Trio, right? Legends say they have existed since the creation of the world, they may know how to enter the Distortion World.', +], { + image: 'assets/images/npcs/Zero.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Zero\'s Ambition', 1), new QuestLineStepCompletedRequirement('Zero\'s Ambition', 2, GameConstants.AchievementOption.less)]), +}); +const SurvivalAreaSinnohRoamerNPC = new RoamerNPC('Hiker Kevin', [ + 'I spotted a bunch of roaming Pokémon on {ROUTE_NAME}!', +], GameConstants.Region.sinnoh, RoamingPokemonList.findGroup(GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh), 'assets/images/npcs/Hiker.png'); +const SendoffSpringLakeTrio = new NPC('Lake Trio', [ + 'You are finally here.', + 'We have been able to create a key to the Distortion World using the materials you collected, but it is unable to work in its current state.', + 'We bestow it upon you, charge it with the ghostly energy of the Distortion World.', + 'In order to do so, you must collect Ghost gems by defeating Ghost type Pokémon and find a Spooky Plate. There should be some in this dungeon, we can sense their energy.', +], { + image: 'assets/images/npcs/specialNPCs/Lake Trio.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Zero\'s Ambition', 9), new QuestLineStepCompletedRequirement('Zero\'s Ambition', 11, GameConstants.AchievementOption.less)]) +}); +const SendoffSpringZero1 = new NPC('Zero', [ + 'I couldn\'t wait anymore for you to report about your progress, so I asked around and discovered you were coming here.', + 'Wait, is that the key to the Distortion World? With that, I could open the gate myself.', + 'You know what? You are fired, I no longer need you. Now, give me the key to the Distortion World or I will take it by force!', +], { + image: 'assets/images/npcs/Zero.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Zero\'s Ambition', 11), new QuestLineStepCompletedRequirement('Zero\'s Ambition', 12, GameConstants.AchievementOption.less)]), +}); +const SendoffSpringZero2 = new NPC('Zero', [ + 'Seems like you have managed to catch the Pokémon that rules the Distortion World.', + 'But this doesn\'t look like the Renegade Pokémon from legend, it seems like some sort of altered form.', + 'I once read that, deep within the Distortion World, there is an object capable of carrying the realm\'s power. Maybe, if you train Giratina while it has such object equipped, it can turn into its true form.', +], { + image: 'assets/images/npcs/Zero.png', + requirement: new QuestLineStepCompletedRequirement('Zero\'s Ambition', 14), +}); +const ProfRowan = new ProfNPC('Prof. Rowan', GameConstants.Region.sinnoh, 'Congratulations, you\'re more than half-way completed on the national Pokédex!', 'Next stop is Unova! I\'ve always wanted to visit Castelia City, personally...', 'assets/images/npcs/Professor Rowan.png'); +const LucyStevens1 = new NPC('Lucy Stevens', [ + 'Who sent you to talk to me? Howard Clifford himself? That\'s a little suspicious, but you seem trustworthy enough.', + 'I\'ve been doing some research on this R compound, and have reason to believe it is being manufactured or used in research at the P2 Lab in Unova.', + 'We should investigate!', +], { + image: 'assets/images/npcs/Lucy Stevens.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Detective Pikachu', 7), new QuestLineStepCompletedRequirement('Detective Pikachu', 9, GameConstants.AchievementOption.less)]), +}); +const ManaphyHastings1 = new NPC('Professor Hastings', [ + 'Ah, are you a strong trainer? I\'d like to leave this to a Pokémon Ranger, but the ones in this region are far away, and the crooks could escape by the time they caught up!', + 'I was robbed of a precious Pokémon Egg by the Go-Rock Squad! The egg was coloured a transparent blue... Like the colour of the sea!', + 'The Go-Rock Squad were troublemakers the Pokémon Rangers dealt with in my home region. I don\'t know why they took it, but the Go-Rock Squad is trying to regroup!', + 'I was robbed in the forest to the north. Please, you have to hurry!', +], { + image: 'assets/images/npcs/Professor Hastings.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Recover the Precious Egg!'), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 2, GameConstants.AchievementOption.less)]), +}); +const ManaphyHastings2 = new NPC('Professor Hastings', [ + 'Thanks for retrieving the Egg!', + 'The Go-Rock Squad was already beaten once. That was probably their very last gasp of trouble-making.', + 'While you were gone I discovered that the egg belongs to Manaphy! No wonder the Go-Rock Squad was after it.', + 'Canalave\'s Library has several books detailing the legends of Manaphy. Perhaps one of them can help us find out how to hatch this egg.', + 'No time to waste - I\'ll see you at the Canalave Library!', +], { + image: 'assets/images/npcs/Professor Hastings.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 10), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 11, GameConstants.AchievementOption.less)]), +}); +const ManaphyHastings3 = new NPC('Professor Hastings', [ + 'Trainer, there\'s trouble afoot!', + 'The egg was stolen again - this time by a Happiny who belongs to a little girl here. It went eastward at top speed - it\'s probably left this city far behind it now.', + 'We must retrieve that egg at all costs! Please, you have to chase down the egg-napper!', +], { + image: 'assets/images/npcs/Professor Hastings.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 11), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 25, GameConstants.AchievementOption.less)]), +}); +const ManaphyHastings4 = new NPC('Professor Hastings', [ + 'Ah, Manaphy hatched, did it? Looks like all that running around you and Happiny did incubated it enough to hatch it.', + 'There is something I\'ve discovered researching the Manaphy stories here. Apparently, Manaphy can be bred to produce an entirely different species of Pokémon!', + 'Quite frankly, it\'s probably for the best if Manaphy stays with you. Apparently many things want to take that Pokémon for themselves, and I don\'t have the strength to fend them off.', +], { + image: 'assets/images/npcs/Professor Hastings.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 25), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 26, GameConstants.AchievementOption.less)]), +}); +const ManaphyBoulders = new NPC('Strange Boulders', [ + 'One of the pathways into the forest is blocked by a trio of large boulders.', + 'However, all three of the boulders look very similar... and they almost seem to have arms, as well.', + 'Perhaps these aren\'t boulders after all... and if they are what you think they are, a good soaking should settle the matter.', +], { + image: 'assets/images/npcs/specialNPCs/Strange Boulders.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 0), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 2, GameConstants.AchievementOption.less)]), +}); +const ManaphyGoRockCommander = new NPC('Go-Rock Commander', [ + 'You... are you a Pokémon Ranger? ...No? Well, no matter.', + 'Allow me to explain something to you. This egg is meaningful only if we possess it.', + 'We\'re going to hatch Manaphy from this egg and get it to guide us to its Sea Temple.', + 'With the power contained within, I will become the King of the Sea - far stronger than the old fool guiding us before!', + 'The Commander flees into the forest, with the Go-Rock Grunts covering his escape!', +], { + image: 'assets/images/npcs/Go-Rock Squad Commander.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 3), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 5, GameConstants.AchievementOption.less)]), +}); +const ManaphyGoRock = new NPC('Go-Rock Grunt', [ + 'Huff... huff... we should have been out of the forest by now!', + 'The plan was so simple. One of our grunts pre-planted a bunch of big red mushrooms with yellow spots to make a path out of the forest and to our hideout.', + 'But it feels like we\'ve been going in circles! The only reason I know we aren\'t is because every time we reach a similar crossroads, the mushrooms are in different places.', + 'Unless... the mushrooms are moving somehow?', + 'What she\'s describing... could it be they\'re using Parasect? It\'s never a good idea to use living landmarks.', + 'If you can take out a few of the Parasect, that should quickly corner them.', +], { + image: 'assets/images/npcs/Go-Rock Squad Grunt (female).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 6), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 8, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness1 = new NPC('Black Belt', [ + 'A Happiny with a blue egg?', + 'I did see a Happiny like that. They were heading north, across Route 204.', +], { + image: 'assets/images/npcs/Black Belt.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 12), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 14, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness2 = new NPC('Lady', [ + 'A Happiny with a blue egg? Are you its trainer?', + 'I was just minding my own business, when a little pink thing knocked me right over! By the time I got up, it was long gone, racing for the Eterna Forest.', + 'I was worried its trainer had lost it, so I came here to ask around. I hope you catch up to it soon.', + 'If it has a better sense of direction than the Go-Rock Squad, it\'ll probably pop out at Eterna City.', +], { + image: 'assets/images/npcs/Lady.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 13), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 15, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness3 = new NPC('Cyclist', [ + 'A Happiny with a blue egg? Ah yeah, I saw it.', + 'It ran right through here and went across Route 211, straight for Mt. Coronet.', + 'Did the Happiny really leave Eterna and brave Mt. Coronet with the egg in tow? Maybe it\'s reached the other side by now.', +], { + image: 'assets/images/npcs/Cyclist (female).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 14), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 16, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness4 = new NPC('Waitress', [ + 'I was just finishing up my shift at the Café Cabin when a little pink puffball ran past! It was heading south, for the ruins down there.', + '...Eh, it was a Happiny? ...That\'s one fast Happiny, then, isn\'t it?', +], { + image: 'assets/images/npcs/Waitress.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 15), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 17, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness5 = new NPC('Pokémon Ranger', [ + 'Ah, you\'re the one chasing after that Happiny? You look a bit puffed, are you okay?', + 'I tried to capture it, but it barrelled right through my Capture Disc\'s trail! It went for Hearthome City. It wasn\'t showing any signs of slowing down yet.', +], { + image: 'assets/images/npcs/Pokemon Ranger (female).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 16), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 18, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness6 = new NPC('Murph', [ + 'Me and my buddy Slowpoke are trying to catch a Happiny that just went running into Mt. Coronet.', + 'It had a blue egg on its belly - I\'ve definitely seen an egg like that before, back in Fiore.', + 'My Slowpoke\'s gone ahead, I hope I can catch up to them soon.', +], { + image: 'assets/images/npcs/Murph.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 17), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 19, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness7 = new NPC('Cyclist', [ + 'Oh hey! Still chasing that Happiny, huh?', + 'When I saw it still running, I tried to catch up to it, but it got into the Oreburgh Tunnel and I lost track of it.', + '...Say, are you alright? You look a little... bug-eyed.', + '...This annoying little twerp has been taking you in one big loop, hasn\'t it...', +], { + image: 'assets/images/npcs/Cyclist (female).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 18), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 20, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness8 = new NPC('Bug Catcher', [ + 'Some guy in a weird white outfit was chasing a Happiny!', + 'They were heading south, towards Professor Rowan\'s lab!', + 'You\'re chasing after them too, right? Good luck catching up to them!', +], { + image: 'assets/images/npcs/Bug Catcher.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 19), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 21, GameConstants.AchievementOption.less)]), +}); +const HappinyWitness9 = new NPC('Go-Rock Pincher', [ + 'Damn, that Happiny got away. Just when I had it cornered, a Pichu and a Glameow came out and attacked me.', + '...Hey, I recognize you! You pinched the egg we pinched in Eterna Forest!', + 'I\'m gonna pinch that Pokémon first, so if you want to try and stop me, you\'ll have to get through my Pokémon!', +], { + image: 'assets/images/npcs/Go-Rock Squad Grunt (male).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 20), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 22, GameConstants.AchievementOption.less)]), +}); +const HappinyBoulders = new NPC('Strange Boulders', [ + 'You\'ve seen \'boulders\' like this before.', + 'According to the murmuring crowd around them, a Happiny ran this way and threw the boulders behind it to block any pursuers.', + 'You spray the boulders with your water types, and they... don\'t move. Huh, guess they really are boulders this time.', + 'Well, that just means that you can get some fighting-types and crush them with no regrets.', +], { + image: 'assets/images/npcs/specialNPCs/Strange Boulders.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 22), new QuestLineStepCompletedRequirement('Recover the Precious Egg!', 24, GameConstants.AchievementOption.less)]), +}); +const SnoverBreeder = new NPC('Snover Breeder', [ + 'I\'ve been finding ways to grow Snover Berries using humane methods.', + 'Snover are happy to let you pick their berries. They then wander away into the wilderness. Please be kind to them!', +], { image: 'assets/images/npcs/Pokémon Breeder (female).png' }); +const GrotleAcornParty = new NPC('Grotle and Friends', [ + 'Several friendly Pokémon are snacking on a Grotle\'s acorns.', +], { + image: 'assets/images/npcs/specialNPCs/Grotle Acorn Party.png', + requirement: new ObtainedPokemonRequirement('Grotle (Acorn)'), +}); +//Sinnoh Towns +TownList['Twinleaf Town'] = new Town('Twinleaf Town', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new BulletinBoard(GameConstants.BulletinBoards.Sinnoh)], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_HoennChampion)], + npcs: [TwinleafContestChampion], +}); +TownList['Sandgem Town'] = new Town('Sandgem Town', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [SandgemTownShop, TemporaryBattleList['Manaphy Go-Rock Pincher'], new ShardTraderShop(GameConstants.ShardTraderLocations['Sandgem Town'], 'Santa\'s Secret Daycare', true, 'Plates')], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 201)], + npcs: [ProfRowan, SandgemBeachcomber, ManaphyHastings1, ManaphyHastings2, HappinyWitness9], +}); +TownList['Jubilife City'] = new Town('Jubilife City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [JubilifeCityShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 202)], + npcs: [SinnohFossilNpc, HappinyWitness1, HappinyWitness8], +}); +TownList['Oreburgh City'] = new Town('Oreburgh City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [OreburghCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Oreburgh City'])], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Oreburgh Gate'))], + npcs: [OreburghConstructionWorker, HappinyWitness7], +}); +TownList['Floaroma Town'] = new Town('Floaroma Town', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [FloaromaTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Floaroma Town'])], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 204), + new GymBadgeRequirement(BadgeEnums.Coal), + ], + npcs: [FloaromaFlowerGirl, HappinyWitness2], +}); +TownList['Eterna City'] = new Town('Eterna City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [EternaCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Eterna City']), new MoveToDungeon(dungeonList['Team Galactic Eterna Building'])], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Eterna Forest'))], + npcs: [EternaLassCaroline, HappinyWitness3], +}); +TownList['Mt. Coronet'] = new Town('Mt. Coronet', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new MoveToDungeon(dungeonList['Mt. Coronet South']), new MoveToDungeon(dungeonList['Mt. Coronet North']), new MoveToDungeon(dungeonList['Spear Pillar']), new MoveToDungeon(dungeonList['Hall of Origin'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 207)], +}); +TownList['Hearthome City'] = new Town('Hearthome City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [HearthomeCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Hearthome City']), SinnohBerryMaster], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 208)], + npcs: [HearthomeContestFan, LucyStevens1, HappinyWitness6], +}); +TownList['Solaceon Town'] = new Town('Solaceon Town', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [SolaceonTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Solaceon Town'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 209)], + npcs: [HappinyWitness5], +}); +TownList['Veilstone City'] = new Town('Veilstone City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [DepartmentStoreShop, new MoveToDungeon(dungeonList['Team Galactic HQ'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 215)], + npcs: [], +}); +TownList['Pastoria City'] = new Town('Pastoria City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [PastoriaShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Pastoria City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 213)], +}); +TownList['Celestic Town'] = new Town('Celestic Town', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [CelesticTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Celestic Town']), TemporaryBattleList['Galactic Boss Cyrus']], { + requirements: [new GymBadgeRequirement(BadgeEnums.Fen)], + npcs: [CelesticGrandma, HappinyWitness4], +}); +TownList['Pal Park'] = new Town('Pal Park', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [PalParkShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Pal Park']), TemporaryBattleList['Manaphy Egg Protectors']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 221)], + npcs: [PalParkWarden, PalParkBurglar, HappinyBoulders], +}); +TownList['Canalave City'] = new Town('Canalave City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [CanalaveCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Canalave City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 218)], + npcs: [CanalaveRiley, CanalaveYoungBoy, CanalaveSinnohMyth, ManaphyHastings3, ManaphyHastings4], +}); +TownList['Great Marsh'] = new Town('Great Marsh', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new SafariTownContent()], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 218)], + npcs: [], +}); +TownList['Snowpoint City'] = new Town('Snowpoint City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [SnowpointCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Snowpoint City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 217)], + npcs: [SnowpointYoungGirl, MindyFriend], +}); +TownList['Secret Berry Shop'] = new Town('Secret Berry Shop', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [SecretBerryMaster], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 217), + ], + npcs: [SnoverBreeder, GrotleAcornParty], + ignoreAreaStatus: true, +}); +TownList['Sunyshore City'] = new Town('Sunyshore City', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [SunyshoreCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Sunyshore City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 222)], + npcs: [SunyshoreRibbonerJulia], +}); +TownList['Fight Area'] = new Town('Fight Area', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [FightAreaShop], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion)], + npcs: [FightAreaAceTrainer, FightAreaZero1, FightAreaZero2], +}); +TownList['Survival Area'] = new Town('Survival Area', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [TemporaryBattleList['Barry 7'], SurvivalAreaShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Survival Area'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 225)], + npcs: [SurvivalAreaSinnohRoamerNPC], +}); +TownList['Resort Area'] = new Town('Resort Area', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [ResortAreaShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Resort Area'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 229)], +}); +TownList['Pokémon League Sinnoh'] = new Town('Pokémon League Sinnoh', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [GymList['Elite Aaron'], GymList['Elite Bertha'], GymList['Elite Flint'], GymList['Elite Lucian'], GymList['Champion Cynthia'], pokeLeagueShop()], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 223), + new TemporaryBattleRequirement('Barry 6'), + ], +}); +//Sinnoh Dungeons +TownList['Oreburgh Gate'] = new DungeonTown('Oreburgh Gate', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 203)]); +TownList['Valley Windworks'] = new DungeonTown('Valley Windworks', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [ + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 204), + new GymBadgeRequirement(BadgeEnums.Coal), +]); +TownList['Eterna Forest'] = new DungeonTown('Eterna Forest', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [ + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 205), + new GymBadgeRequirement(BadgeEnums.Coal), +], [TemporaryBattleList['Manaphy Go-Rock MGrunt 1'], TemporaryBattleList['Manaphy Go-Rock MGrunt 2'], TemporaryBattleList['Manaphy Go-Rock MGrunt 3'], TemporaryBattleList['Manaphy Go-Rock MGrunt 4'], TemporaryBattleList['Manaphy Go-Rock FGrunt 1'], TemporaryBattleList['Manaphy Go-Rock FGrunt 2']], { + npcs: [MossRock, ManaphyGoRock, ManaphyGoRockCommander, ManaphyBoulders], +}); +TownList['Old Chateau'] = new DungeonTown('Old Chateau', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [ + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 205), + new GymBadgeRequirement(BadgeEnums.Forest), +], [TemporaryBattleList['Manaphy Go-Rock Commander']]); +TownList['Team Galactic Eterna Building'] = new DungeonTown('Team Galactic Eterna Building', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new GymBadgeRequirement(BadgeEnums.Forest)]); +TownList['Wayward Cave'] = new DungeonTown('Wayward Cave', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 206)]); +TownList['Mt. Coronet South'] = new DungeonTown('Mt. Coronet South', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 207)]); +TownList['Solaceon Ruins'] = new DungeonTown('Solaceon Ruins', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 209)]); +TownList['Iron Island'] = new DungeonTown('Iron Island', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 218)]); +TownList['Lake Valor'] = new DungeonTown('Lake Valor', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new GymBadgeRequirement(BadgeEnums.Mine)], [], { + npcs: [ValorAzelf], +}); +TownList['Lake Verity'] = new DungeonTown('Lake Verity', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Lake Valor'))], [], { + npcs: [VerityMesprit], +}); +TownList['Mt. Coronet North'] = new DungeonTown('Mt. Coronet North', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [ + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 211), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Lake Verity')), +]); +TownList['Lake Acuity'] = new DungeonTown('Lake Acuity', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new GymBadgeRequirement(BadgeEnums.Icicle)], [], { + npcs: [IceRock, AcuityUxie], +}); +TownList['Team Galactic HQ'] = new DungeonTown('Team Galactic HQ', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Lake Acuity'))]); +TownList['Spear Pillar'] = new DungeonTown('Spear Pillar', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Team Galactic HQ'))]); +TownList['Distortion World'] = new DungeonTown('Distortion World', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [ + new OneFromManyRequirement([ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('A New World', 9), + new QuestLineStepCompletedRequirement('A New World', 10, GameConstants.AchievementOption.less), + ]), + new TemporaryBattleRequirement('Zero'), + ]), +]); +TownList['Victory Road Sinnoh'] = new DungeonTown('Victory Road Sinnoh', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 223)]); +TownList['Sendoff Spring'] = new DungeonTown('Sendoff Spring', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new QuestLineStepCompletedRequirement('Zero\'s Ambition', 8)], [TemporaryBattleList.Zero], { + npcs: [SendoffSpringLakeTrio, SendoffSpringZero1, SendoffSpringZero2], +}); +TownList['Hall of Origin'] = new DungeonTown('Hall of Origin', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion)]); +TownList['Fullmoon Island'] = new DungeonTown('Fullmoon Island', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion)]); +TownList['Newmoon Island'] = new DungeonTown('Newmoon Island', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion)]); +TownList['Flower Paradise'] = new DungeonTown('Flower Paradise', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [ + new RouteKillRequirement(10, GameConstants.Region.sinnoh, 224), + new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion), +]); +TownList['Stark Mountain'] = new DungeonTown('Stark Mountain', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new RouteKillRequirement(10, GameConstants.Region.sinnoh, 227)]); +TownList['Snowpoint Temple'] = new DungeonTown('Snowpoint Temple', GameConstants.Region.sinnoh, GameConstants.SinnohSubRegions.Sinnoh, [new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion)]); +//Unova Shops +const FloccesyTownShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.xClick, + ItemList.SmallRestore, + ItemList.Mystery_egg, + ItemList.Wonder_Chest, + ItemList.Miracle_Chest, +]); +const VirbankCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Token_collector, + ItemList.Lucky_egg, + ItemList.MediumRestore, +]); +const CasteliaCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xAttack, + ItemList.Water_egg, + ItemList.Linking_cord, + ItemList.Kings_rock, +]); +const NimbasaCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Lucky_egg, + ItemList.Grass_egg, + ItemList.Electric_egg, + ItemList.Metal_coat, +]); +const DriftveilCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, + ItemList.Razor_claw, + ItemList.Razor_fang, + ItemList.Zorua, +]); +const MistraltonCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xClick, + ItemList.LargeRestore, + ItemList.Thunder_stone, + ItemList.Upgrade, +]); +const LentimasTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Lucky_egg, + ItemList.Fire_egg, +]); +const UndellaTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.Deepsea_tooth, + ItemList.Deepsea_scale, +]); +const LacunosaTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.Lucky_incense, + ItemList.Fighting_egg, +]); +const OpelucidCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xClick, + ItemList.Dowsing_machine, + ItemList.Dragon_egg, + ItemList.Dragon_scale, +]); +const HumilauCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.Prism_scale, +]); +const IcirrusCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Protector, + ItemList.Dubious_disc, + ItemList.Reaper_cloth, +]); +const BlackAndWhiteParkShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Moon_stone, + ItemList.Sun_stone, +]); +const NacreneCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Soothe_bell, +]); +const StriatonCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Leaf_stone, + ItemList.Fire_stone, + ItemList.Water_stone, +]); +const AccumulaTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Shiny_stone, + ItemList.Dusk_stone, + ItemList.Dawn_stone, +]); +const NuvemaTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Electirizer, + ItemList.Magmarizer, +]); +const AnvilleTownShop = new Shop([ + ItemList['Meloetta (Pirouette)'], +]); +//Unova Gem Master +const UnovaFluteMaster = new GemMasterShop(GameConstants.GemShops.UnovaFluteMaster); +//Unova Berry Master +const DriftveilBerryMaster = new BerryMasterShop(GameConstants.BerryTraderLocations['Driftveil City'], [ + ItemList.Boost_Mulch, + ItemList.Rich_Mulch, + ItemList.Surprise_Mulch, + ItemList.Amaze_Mulch, + ItemList.Freeze_Mulch, + ItemList.Gooey_Mulch, + ItemList.Berry_Shovel, + ItemList.Mulch_Shovel, +], 'Unova Berry Master'); +//Unova NPCs +const ExcitedChild = new NPC('Excited Child', [ + 'Did you hear? Did you see? It was on TV!', + 'I was just watching my favorite show, The National Gymquirer. It was a live segment! Some hot shot trainer from Kanto defeated Drayden! It was amazing! That trainer is so cool! Drayden is like unbeatable.', + 'Then my programme got interrupted by an emergency broadcast. A report on the first confirmed sightings of Tornadus and Thundurus in over twenty-five years! I\'ve read so much about them, they are my favorites.', + 'Last time they were spotted they just roamed around, causing all kinds of mischief. According to my books anyway. I\'m sure that amazing trainer from the TV will want to catch these mighty forces of nature.', +], { image: 'assets/images/npcs/School Kid (female).png' }); +const CasteliaMusician = new NPC('Musician', [ + 'Sup. Ya like jazz? No? Well then you should check out me and my band at the Sonata Cafe where we never play Jazz.', + 'Sometimes a cool singing Pokémon shows up and joins in on our set. I’ve heard that trainers as strong as the Champion have found it roaming around the region looking for Pokémon battles… but even I wouldn’t challenge it to a Music battle.', +], { image: 'assets/images/npcs/Musician.png' }); +const PlasmaGrunt1 = new NPC('Team Plasma Grunt', [ + 'Why hello there. Nothing strange going on here. Please move along.', + 'Oh that business in the sewers? Yes, we should not have gone in there. Very unfortunate situation. A complete misunderstanding. We were just curious about what was down there.', + 'Bye now.', +], { image: 'assets/images/npcs/Team Plasma Grunt (male).png' }); +const RelicCastleRuinmaniac = new NPC('Ruin Maniac', [ + 'I\'ve heard tell of a secret room in this ruin. A room that supposedly contains a very rare Pokémon.', + 'Apparently this secret room is only accessible via a secret entrance in Relic Passage. Relic Passage runs from Driftveil City all the way under the river to Relic Castle. It\'s very impressive. Once I\'m done investigating this part of the ruin I\'m definitely going to check it out!', +], { image: 'assets/images/npcs/Ruin Maniac.png' }); +const NimbasaExplorer = new NPC('Explorer', [ + 'Whew! The desert is rough out there, glad you\'ve made it all the way to Nimbasa.', + 'Sometimes I find some weird stuff out in the sand, sometimes even Pokémon hiding in Chests. Like this one time in Relic Castle, I found a Pokémon that looks like a statue that I\'ve never seen before!', +], { image: 'assets/images/npcs/Backpacker (male).png' }); +const PlasmaGrunt2 = new NPC('Team Plasma Grunt', [ + 'I told you. There\'s nothing suspicious going on here. We aren\'t stealing any Pokémon.', + 'If you won\'t leave, we\'ll have to remove you.', +], { + image: 'assets/images/npcs/Team Plasma Grunt (male).png', + requirement: new OneFromManyRequirement([new TemporaryBattleRequirement('Team Plasma Grunt 4', 1, GameConstants.AchievementOption.less), new TemporaryBattleRequirement('Team Plasma Grunt 5', 1, GameConstants.AchievementOption.less), new TemporaryBattleRequirement('Team Plasma Grunts 1', 1, GameConstants.AchievementOption.less), new TemporaryBattleRequirement('Team Plasma Grunts 2', 1, GameConstants.AchievementOption.less)]), +}); +const DriftveilZinzolin = new NPC('Zinzolin', [ + 'YOU!', + 'Once again we will use the legendary Dragon-type Pokémon and we will rule the Unova region!', + 'Curious Trainers, we shall not let you run around as you please!', + 'Shadow Triad! Get them out of here!', +], { + image: 'assets/images/npcs/Team Plasma (zinzolin).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 6), new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 7, GameConstants.AchievementOption.less)]), +}); +const PlasmaGrunt3 = new NPC('Team Plasma Grunt', [ + 'Remember when I told you that there was nothing suspicious about this frigate? I was lying, of course.', + 'But truth be told, I didn\'t know that this thing could fly. I was not prepared for this.', + 'I\'m gonna be sick...', +], { image: 'assets/images/npcs/Team Plasma Grunt (male).png' }); +const GiantChasmColress = new NPC('Colress', [ + 'Welcome! I was asked by an acquaintance to help with his research. What I desire is to bring out the entirety in Pokémon potential! If I can accomplish that, I don\'t care what it takes!', + 'If it means the strength must be brought out by the interactions between Pokémon and Trainers, then so be it! If it means you have to use a merciless approach, like Team Plasma\'s, and force out all of the Pokémon\'s power, then so be it! And yes, if the entire world is destroyed as a result, then so be it...', + 'That aside! The reason I have been traveling all over Unova and battling many Pokémon Trainers is because I was testing the viability of this approach to bringing out the full strength of Pokémon. In that respect, you\'ve done an amazing job.', + 'Well now! Tell me if you have the answer I desire or not! If you\'re ready, come at me!', +], { + image: 'assets/images/npcs/Team Plasma (colress).png', + requirement: new MultiRequirement([new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Giant Chasm')), new TemporaryBattleRequirement('Plasma Shadow 1'), new TemporaryBattleRequirement('Colress 3', 1, GameConstants.AchievementOption.less)]), +}); +const GiantChasmShadowTriad = new NPC('Shadow Triad', [ + 'Listen well! We swore to be loyal to Lord Ghetsis since he saved us! The only thing we want is the world Lord Ghetsis desires! Even if we lose, Lord Ghetsis simply has to win...', + 'The only thing you can do is watch Lord Ghetsis use Kyurem to freeze Unova solid. That\'s all...', +], { + image: 'assets/images/npcs/specialNPCs/Shadow Triad.png', + requirement: new MultiRequirement([new TemporaryBattleRequirement('Colress 3'), new TemporaryBattleRequirement('Ghetsis 1', 1, GameConstants.AchievementOption.less)]), +}); +const IcirrusFanClubChairman = new NPC('Fan Club Chairman', [ + 'Legends say Kyurem is missing a part of itself. It is waiting for a hero to fill in the missing parts of its body with Truth or Ideals.', + 'The legendary dragons of Dragonspiral Tower are said to embody these very concepts. They sometimes leave a piece of their DNA behind after a battle.', + 'If you have DNA splicers, perhaps you can make Kyurem whole again.', + 'I\'ve never seen it, but supposedly it works just like any other evolution item.', +], { image: 'assets/images/npcs/Gentleman.png' }); +const P2LaboratoryColress = new NPC('Colress', [ + 'So you defeated Ghetsis. Interesting. You must be a very strong trainer.', + 'A rare Pokémon is hiding somewhere inside this abandoned laboratory. You can catch it if you want. I have no interest in it.', + 'However, I do have an interest in you! I want to taste your power. Defeat me, and I\'ll let you search for the rare Pokémon.', + 'I\'ll be waiting for you inside.', +], { + image: 'assets/images/npcs/Team Plasma (colress).png', + requirement: new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('P2 Laboratory'), GameConstants.AchievementOption.less), +}); +const UnovaRoamerNPC = new RoamerNPC('Professor Juniper\'s Aide', [ + 'Our research indicates a higher concentration of roaming Pokémon on {ROUTE_NAME}!', +], GameConstants.Region.unova, RoamingPokemonList.findGroup(GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova)); +const ProfJuniper = new ProfNPC('Prof. Juniper', GameConstants.Region.unova, 'Let me see your progress...Ah, fantastic, as usual!', 'Allow me some time to arrange tickets for your next destination.', 'assets/images/npcs/Professor Juniper.png'); +const ProfBurnet = new NPC('Professor Burnet', [ + 'Welcome to my laboratory, trainer! I am working here to understand the mysterious Interdream Zone.', + 'My laboratory equipment can convert the energy of dreams you experience while sleeping, or "Offline" into orbs. We can then open these orbs and see what your mind experienced in the Interdream Zone.', + 'A trainer like you surely dreams of rare Pokémon. The more rare Pokémon you find from the Interdream Zone, the more we can explore to find others!', +], { + image: 'assets/images/npcs/Professor Burnet.png', +}); +const DreamResearcher1 = new NPC('Dream Researcher', [ + 'I have been helping Professor Burnet explore the Interdream Zone with the help of my Audino.', + 'Audino\'s excellent hearing lets it pick up even the quietest hints from Dream Orbs. If you can help the professor advance her research, I may be able to help you in return.', +], { + image: 'assets/images/npcs/Scientist (female).png', + requirement: new TemporaryBattleRequirement('Dream Researcher', 1, GameConstants.AchievementOption.less), +}); +const DreamResearcher2 = new NPC('Dream Researcher', [ + 'What a battle! That Audinite will let you Mega Evolve your Audino, under certain circumstances.', +], { + image: 'assets/images/npcs/Scientist (female).png', + requirement: new TemporaryBattleRequirement('Dream Researcher'), +}); +const VitaminRefundCode = new NPC('Pokémon Breeder', [ + 'I used to have my Pokémon maxed out on Protein, but then I found out about the new Vitamins!', + 'I swapped out some of my Proteins for the new Vitamins, but then I was left with a bunch of extra Protein I couldn\'t use.', + 'Luckily I was able to use the code REFUND-VITAMINS to get my money back! Too bad it only has one use though...', + 'It will also only refund Vitamins you bought after hitting the price cap.', +]); +const UnovaFossilNpc = new NPC('Friendly Waitress', [ + 'Hello! Would you like a seat indoors or on the patio? We have a lovely view of the museum, it used to double as a Gym you know! Business may have slowed down since the new Normal Gym moved to Aspertia, but our ex-Gym Leader Lenora is still at it with her husband restoring fossils!', + 'Just last week they had an exhibit on a prehistoric bird and turtle! There was quite the crowd!', + '... Do you think they\'re hiring?', +], { image: 'assets/images/npcs/Waitress.png' }); +// Swords of Justice Quest Npcs +const OldManSwords = new NPC('Old Man', [ + 'Hello kiddo. You must be $playername$, nice to meet you.', + 'You might\'ve heard about the Swords of Justice. They seem to be really worried recently and that also worries me, but you seem to be a really nice fellow so I\'ll tell you how to find their leader, Cobalion.', + 'It usually lurks around the deepest layers of Mistralton Cave so you might be able to find it by exploring around here.', +], { + image: 'assets/images/npcs/Old Man.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Swords of Justice'), new QuestLineStepCompletedRequirement('Swords of Justice', 1, GameConstants.AchievementOption.less)]), +}); +const Cobalion1 = new NPC('Cobalion', [ + 'Greetings, may I ask who are you? Oh, you\'re a friend of the Old Man? That\'s great, and he sent you here to find me, I assume.', + 'Well, since he told you to find me, there must be a reason. Unless you\'re here to help me re-form the Swords of Justice? If so, then thank you for your aid. Meet me in the Moor of Icirrus after you find them. You should look for Terrakion first, somewhere in the depths of the Unova Victory Road. Good luck, Trainer.', +], { + image: 'assets/images/pokemon/638.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 1, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 3, GameConstants.AchievementOption.less)]), +}); +const Terrakion1 = new NPC('Terrakion', [ + 'How did you find me? Cobalion told me this place was well hidden! Anyways, what do you want from me? Cobalion wants to reunite the Swords of Justice? Do you think I\'m dumb enough to fall for lies of a human?', + 'I\'ll consider your worth only if you prove your strength and can beat me in battle!', +], { + image: 'assets/images/pokemon/639.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 3, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 5, GameConstants.AchievementOption.less)]), +}); +const Cobalion2 = new NPC('Cobalion', [ + 'Thank you, $playername$. Your assistance with reuniting the Swords of Justice is greatly appreciated.', + 'Now that you\'ve found and brought back Terrakion, you should probably look for Virizion. Virizion usually likes to meditate to the sound of nature, so Pinwheel Forest might be a good place to search in. Good luck, and report back once you\'ve found each other.', +], { + image: 'assets/images/pokemon/638.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 5, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 7, GameConstants.AchievementOption.less)]), +}); +const Virizion1 = new NPC('Virizion', [ + 'Hello, who are you, may I ask? You say you were sent here by Cobalion to reunite the Swords of Justice? I\'m sorry dear, you\'ll have to create a much more believable lie to deceive me. I\'m not so easily fooled.', + 'To earn my trust, you need to prove your patience to me. If you can gather 5,000 Grass Gems and bring them to me, then I\'ll trust your word. If you cannot handle such a task, do not return.', +], { + image: 'assets/images/pokemon/640.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 7, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 9, GameConstants.AchievementOption.less)]), +}); +const Virizion2 = new NPC('Virizion', [ + 'Oh, you\'re back? And you\'ve brought the 5,000 Grass Gems. I\'m impressed. Very well, you\'ve earned my trust. So, Cobalion wants us to meet at the Moor of Icirrus to reunite the Swords of Justice? Sounds just like the old Cobalion I remember. I\'ll make my way there now, you should come too. I\'m sure your assistance is still desired.', +], { + image: 'assets/images/pokemon/640.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 9, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 10, GameConstants.AchievementOption.less)]), +}); +const Cobalion3 = new NPC('Cobalion', [ + 'Welcome back, $playername$! I can see you\'ve brought back Virizion. Thank you for your assistance towards reuniting the Swords of Justice.', + 'Now, let\'s discuss the plan. Wait, you want to help too? You should know this will be a very dangerous mission, $playername$. We may not be able to fully protect you from the dangers we may face. The only way we can be sure of your safety is if you can hold your own against all three of us in battle. If you succeed, we will happily accept your assistance, but should you fail, then I apologise, but we cannot allow you to join the mission. What say you? Shall we spar?', +], { + image: 'assets/images/pokemon/638.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 10, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 12, GameConstants.AchievementOption.less)]), +}); +const Cobalion4 = new NPC('Cobalion', [ + 'Greetings, $playername$. I assume you couldn\'t find much, but I was able to find that Kyurem has been seen near Lacunosa Town. We should check it out immediately, before it decides to attack. You go ahead, I\'ll warn the others.', +], { + image: 'assets/images/pokemon/638.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 13, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 15, GameConstants.AchievementOption.less)]), +}); +const Cobalion5 = new NPC('Cobalion', [ + 'Hey, $playername$. It\'s not your fault Kyurem fled, but I\'m thinking it has probably gone into hiding. We should search the Giant Chasm for its lair at once.', +], { + image: 'assets/images/pokemon/638.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 15, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 17, GameConstants.AchievementOption.less)]), +}); +const Cobalion6 = new NPC('Cobalion', [ + '$playername$... Don\'t worry about us... We\'ll be fine... Defeat Kyurem once and for all so we can live in peace.', +], { + image: 'assets/images/pokemon/638.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 18, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Swords of Justice', 20, GameConstants.AchievementOption.less)]), +}); +const Cobalion7 = new NPC('Cobalion', [ + 'Thank you for all your help, $playername$. You really were a great ally, and I hope we can meet again. As thanks for helping us, I\'ll be waiting for you in Mistralton Cave if you\'d wish for me to join your team.', +], { + image: 'assets/images/pokemon/638.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 20, GameConstants.AchievementOption.more), new QuestLineCompletedRequirement('Swords of Justice', GameConstants.AchievementOption.less)]), +}); +const Terrakion2 = new NPC('Terrakion', [ + 'Hey, you were a really great partner! It was really nice doing this mission with you, and you seem like a strong trainer, so if you want me to join your team, I\'ll be waiting at Victory Road!', +], { + image: 'assets/images/pokemon/639.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 20, GameConstants.AchievementOption.more), new QuestLineCompletedRequirement('Swords of Justice', GameConstants.AchievementOption.less)]), +}); +const Virizion3 = new NPC('Virizion', [ + 'You were a great ally, $playername$. I feel it\'d be a wise decision on my part if I joined your team, but that\'s a decision for you to make. If you decide you wish for me to join your team, you can look for me in the depths of Pinwheel Forest.', +], { + image: 'assets/images/pokemon/640.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Swords of Justice', 20, GameConstants.AchievementOption.more), new QuestLineCompletedRequirement('Swords of Justice', GameConstants.AchievementOption.less)]), +}); +// Genesect Quest Npcs +const InvestigateP2 = new NPC('Investigate the P2 Laboratory', [ + 'A bright red Pokémon flies past you at a high speed, heading west.', +], { + image: 'assets/images/shinypokemon/649.05.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Legend Awakened'), new QuestLineStepCompletedRequirement('The Legend Awakened', 1, GameConstants.AchievementOption.less)]), +}); +const AncientBugHunter1 = new NPC('Ancient Bug Hunter', [ + 'Did you see it come through? The Paleozoic Pokémon, Genesect?', + 'They haven\'t been seen in Unova for millions of years! If one is here now, it\'s sure to be a little confused about what the world is like.', + 'I worry it might attack the city out of fear.', +], { + image: 'assets/images/npcs/Super Nerd.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Legend Awakened', 2), new QuestLineStepCompletedRequirement('The Legend Awakened', 4, GameConstants.AchievementOption.less)]), +}); +const GenesectFight = new NPC('Witness the battle', [ + 'The Red Genesect and a powerful Pokémon you don\'t recognize exchange energy blasts. The Red Genesect flees the battle, heading east.', +], { + image: 'assets/images/npcs/other/GenesectFight.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Legend Awakened', 4), new QuestLineStepCompletedRequirement('The Legend Awakened', 6, GameConstants.AchievementOption.less)]), +}); +const AncientBugHunter2 = new NPC('Ancient Bug Hunter', [ + 'Wow! A real, live Genesect!', + 'I hear that when you equip them with powerful Drive devices, they change forms!', + 'They also have a high-speed form, which I hear has been sighted across Unova.', +], { + image: 'assets/images/npcs/Super Nerd.png', + requirement: new QuestLineCompletedRequirement('The Legend Awakened'), +}); +//Unova Towns +TownList['Aspertia City'] = new Town('Aspertia City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new BulletinBoard(GameConstants.BulletinBoards.Unova)], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_SinnohChampion)], + npcs: [], +}); +TownList['Floccesy Town'] = new Town('Floccesy Town', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [FloccesyTownShop], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.unova, 19), + new TemporaryBattleRequirement('Hugh 1'), + ], +}); +TownList['Virbank City'] = new Town('Virbank City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [VirbankCityShop, TemporaryBattleList['Team Plasma Grunt 1']], { + requirements: [new GymBadgeRequirement(BadgeEnums.Basic)], +}); +TownList['Castelia City'] = new Town('Castelia City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [CasteliaCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Castelia City']), new MoveToDungeon(dungeonList['Castelia Sewers'])], { + requirements: [new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 0)], + npcs: [CasteliaMusician, GenesectFight], +}); +TownList['A Perfectly Ordinary Frigate'] = new Town('A Perfectly Ordinary Frigate', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [], { + requirements: [ + new GymBadgeRequirement(BadgeEnums.Insect), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 1), + new TemporaryBattleRequirement('Team Plasma Grunt 1'), + ], + npcs: [PlasmaGrunt1], +}); +TownList['Nimbasa City'] = new Town('Nimbasa City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [NimbasaCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Nimbasa City']), TemporaryBattleList['Team Plasma Grunt 2'], TemporaryBattleList['Team Plasma Grunt 3']], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.unova, 4), + new TemporaryBattleRequirement('Colress 1'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 2), + ], + npcs: [NimbasaExplorer], +}); +TownList['Driftveil City'] = new Town('Driftveil City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [TemporaryBattleList['Hugh 7'], DriftveilCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Driftveil City']), DriftveilBerryMaster], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.unova, 5), + new TemporaryBattleRequirement('Team Plasma Grunt 2'), + new TemporaryBattleRequirement('Team Plasma Grunt 3'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 4), + ], +}); +TownList['A Totally Unsuspicious Frigate'] = new Town('A Totally Unsuspicious Frigate', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [TemporaryBattleList['Team Plasma Grunt 4'], TemporaryBattleList['Team Plasma Grunt 5'], TemporaryBattleList['Team Plasma Grunts 1'], TemporaryBattleList['Team Plasma Grunts 2']], { + requirements: [ + new GymBadgeRequirement(BadgeEnums.Quake), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 4), + ], + npcs: [PlasmaGrunt2, DriftveilZinzolin], +}); +TownList['Mistralton City'] = new Town('Mistralton City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [MistraltonCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Mistralton City'])], { + requirements: [ + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Chargestone Cave')), + new TemporaryBattleRequirement('Colress 2'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 7), + ], +}); +TownList['Lentimas Town'] = new Town('Lentimas Town', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [LentimasTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Lentimas Town'])], { + requirements: [new GymBadgeRequirement(BadgeEnums.Jet)], +}); +TownList['Undella Town'] = new Town('Undella Town', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [UndellaTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Undella Town']), UnovaFluteMaster], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Reversal Mountain'))], +}); +TownList['Lacunosa Town'] = new Town('Lacunosa Town', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [LacunosaTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Lacunosa Town']), TemporaryBattleList['Team Plasma Grunt 6'], TemporaryBattleList['Zinzolin 1'], TemporaryBattleList['Kyurem 1']], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.unova, 13), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 8), + ], + npcs: [Cobalion5], +}); +TownList['Opelucid City'] = new Town('Opelucid City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [OpelucidCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Opelucid City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.unova, 11)], +}); +TownList['Team Plasma Assault'] = new Town('Team Plasma Assault', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [TemporaryBattleList['Team Plasma Grunt 7'], TemporaryBattleList['Team Plasma Grunt 8'], TemporaryBattleList['Team Plasma Grunt 9'], TemporaryBattleList['Zinzolin 2'], TemporaryBattleList['Plasma Shadow 1']], { + requirements: [ + new GymBadgeRequirement(BadgeEnums.Legend), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 11), + ], + npcs: [PlasmaGrunt3], +}); +TownList['Shopping Mall Nine'] = new Town('Shopping Mall Nine', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [DepartmentStoreShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.unova, 9)], +}); +TownList['Humilau City'] = new Town('Humilau City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [HumilauCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Humilau City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.unova, 21)], + npcs: [ExcitedChild], +}); +TownList['Icirrus City'] = new Town('Icirrus City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [IcirrusCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Icirrus City'])], { + requirements: [new OneFromManyRequirement([ + new RouteKillRequirement(10, GameConstants.Region.unova, 8), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Twist Mountain')), + ])], + npcs: [IcirrusFanClubChairman], +}); +TownList['Black and White Park'] = new Town('Black and White Park', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new DreamOrbTownContent(), BlackAndWhiteParkShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Black and White Park']), TemporaryBattleList['Dream Researcher']], { + requirements: [new OneFromManyRequirement([ + new MultiRequirement([ + new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion), + new RouteKillRequirement(10, GameConstants.Region.unova, 14), + ]), + new RouteKillRequirement(10, GameConstants.Region.unova, 15), + ])], + npcs: [ProfBurnet, DreamResearcher1, DreamResearcher2], +}); +TownList['Nacrene City'] = new Town('Nacrene City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [NacreneCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Nacrene City'])], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Pinwheel Forest'))], + npcs: [VitaminRefundCode, UnovaFossilNpc], +}); +TownList['Striaton City'] = new Town('Striaton City', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [StriatonCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Striaton City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.unova, 3)], +}); +TownList['Accumula Town'] = new Town('Accumula Town', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [AccumulaTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Accumula Town'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.unova, 2)], +}); +TownList['Nuvema Town'] = new Town('Nuvema Town', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [NuvemaTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Nuvema Town']), TemporaryBattleList['Lab Ambush']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.unova, 1)], + npcs: [ProfJuniper, UnovaRoamerNPC], +}); +TownList['Anville Town'] = new Town('Anville Town', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [AnvilleTownShop], { + requirements: [ + new ObtainedPokemonRequirement('Meloetta (Aria)'), + new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion), + ], +}); +TownList['Pokémon League Unova'] = new Town('Pokémon League Unova', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [GymList['Elite Shauntal'], GymList['Elite Marshal'], GymList['Elite Grimsley'], GymList['Elite Caitlin'], GymList['Champion Iris'], pokeLeagueShop()], { + requirements: [ + new TemporaryBattleRequirement('Hugh 5'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Victory Road Unova')), + ], +}); +//Unova Dungeons +TownList['Pledge Grove'] = new DungeonTown('Pledge Grove', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new ObtainedPokemonRequirement('Keldeo'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Moor of Icirrus')), +]); +TownList['Floccesy Ranch'] = new DungeonTown('Floccesy Ranch', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new RouteKillRequirement(10, GameConstants.Region.unova, 20), + new TemporaryBattleRequirement('Hugh 2'), +]); +TownList['Liberty Garden'] = new DungeonTown('Liberty Garden', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, +//Victini dungeon, maybe unlock later +[new TemporaryBattleRequirement('Team Plasma Grunt 1')]); +TownList['Castelia Sewers'] = new DungeonTown('Castelia Sewers', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 0), +], [TemporaryBattleList['Red Genesect 1'], TemporaryBattleList['Red Genesect 2']], { + npcs: [AncientBugHunter1, AncientBugHunter2], +}); +TownList['Relic Passage'] = new DungeonTown('Relic Passage', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new GymBadgeRequirement(BadgeEnums.Quake)]); +TownList['Relic Castle'] = new DungeonTown('Relic Castle', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new RouteKillRequirement(10, GameConstants.Region.unova, 25)], [], { + npcs: [RelicCastleRuinmaniac], +}); +TownList['Lostlorn Forest'] = new DungeonTown('Lostlorn Forest', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new RouteKillRequirement(10, GameConstants.Region.unova, 16)]); +TownList['Chargestone Cave'] = new DungeonTown('Chargestone Cave', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new RouteKillRequirement(10, GameConstants.Region.unova, 6)]); +TownList['Mistralton Cave'] = new DungeonTown('Mistralton Cave', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new TemporaryBattleRequirement('Colress 2'), + new RouteKillRequirement(10, GameConstants.Region.unova, 6), +], [], { + npcs: [OldManSwords, Cobalion1], +}); +TownList['Celestial Tower'] = new DungeonTown('Celestial Tower', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new RouteKillRequirement(10, GameConstants.Region.unova, 7)]); +TownList['Reversal Mountain'] = new DungeonTown('Reversal Mountain', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new GymBadgeRequirement(BadgeEnums.Jet)]); +TownList['Seaside Cave'] = new DungeonTown('Seaside Cave', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new RouteKillRequirement(10, GameConstants.Region.unova, 24), + new TemporaryBattleRequirement('Plasma Shadow 1'), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 14), +]); +TownList['Plasma Frigate'] = new DungeonTown('Plasma Frigate', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new OneFromManyRequirement([ + new MultiRequirement([ + new GymBadgeRequirement(BadgeEnums.Wave), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 14), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 15, GameConstants.AchievementOption.less), + ]), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 16), + new QuestLineCompletedRequirement('Hollow Truth and Ideals'), + ]), +], [TemporaryBattleList['Colress 3'], TemporaryBattleList['Plasma Shadow 2'], TemporaryBattleList['Plasma Shadow 3'], TemporaryBattleList['Plasma Shadow 4']], { + npcs: [GiantChasmColress, GiantChasmShadowTriad], +}); +TownList['Giant Chasm'] = new DungeonTown('Giant Chasm', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Plasma Frigate')), + new QuestLineStepCompletedRequirement('Hollow Truth and Ideals', 15), +], [TemporaryBattleList['Ghetsis 1'], TemporaryBattleList['Ghetsis 2'], TemporaryBattleList['Kyurem 2'], TemporaryBattleList['Kyurem 3']], { + npcs: [Cobalion6, Cobalion7, Terrakion2, Virizion3], +}); +TownList['Cave of Being'] = new DungeonTown('Cave of Being', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new RouteKillRequirement(10, GameConstants.Region.unova, 23)]); +TownList['Abundant Shrine'] = new DungeonTown('Abundant Shrine', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new RouteKillRequirement(10, GameConstants.Region.unova, 23), + new RouteKillRequirement(10, GameConstants.Region.unova, 14), + new ObtainedPokemonRequirement('Tornadus'), + new ObtainedPokemonRequirement('Thundurus'), +]); +TownList['Victory Road Unova'] = new DungeonTown('Victory Road Unova', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new RouteKillRequirement(10, GameConstants.Region.unova, 23)], [TemporaryBattleList['Terrakion 1']], { + npcs: [Terrakion1], +}); +TownList['Twist Mountain'] = new DungeonTown('Twist Mountain', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new OneFromManyRequirement([ + new MultiRequirement([ + new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion), + new RouteKillRequirement(10, GameConstants.Region.unova, 7), + ]), + new RouteKillRequirement(10, GameConstants.Region.unova, 8), + ])], undefined, { + npcs: [IceRock], +}); +TownList['Dragonspiral Tower'] = new DungeonTown('Dragonspiral Tower', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new OneFromManyRequirement([ + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Twist Mountain')), + new RouteKillRequirement(10, GameConstants.Region.unova, 8), + ])]); +TownList['Moor of Icirrus'] = new DungeonTown('Moor of Icirrus', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [ + new RouteKillRequirement(10, GameConstants.Region.unova, 8), + new QuestLineStepCompletedRequirement('Swords of Justice', 2, GameConstants.AchievementOption.more), +], [TemporaryBattleList['Swords of Justice 1']], { + npcs: [Cobalion2, Cobalion3, Cobalion4], +}); +TownList['Pinwheel Forest'] = new DungeonTown('Pinwheel Forest', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion)], [], { + npcs: [MossRock, Virizion1, Virizion2], +}); +TownList.Dreamyard = new DungeonTown('Dreamyard', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new RouteKillRequirement(10, GameConstants.Region.unova, 3)]); +TownList['P2 Laboratory'] = new DungeonTown('P2 Laboratory', GameConstants.Region.unova, GameConstants.UnovaSubRegions.Unova, [new RouteKillRequirement(10, GameConstants.Region.unova, 17)], [], { + npcs: [P2LaboratoryColress, InvestigateP2], +}); +//Kalos Shops +const AquacordeTownShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.xClick, + ItemList.SmallRestore, +]); +const SantaluneCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Token_collector, + ItemList.Lucky_egg, + ItemList.Mystery_egg, + ItemList.Wonder_Chest, + ItemList.Miracle_Chest, +]); +const FriseurFurfrouShop = new Shop([ + ItemList['Furfrou (Debutante)'], + ItemList['Furfrou (Diamond)'], + ItemList['Furfrou (Matron)'], + ItemList['Furfrou (Dandy)'], + ItemList['Furfrou (Kabuki)'], + ItemList['Furfrou (Pharaoh)'], + //ItemList['Furfrou (Heart)'], +], 'Friseur Furfrou'); +const CamphrierTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xAttack, + ItemList.MediumRestore, + ItemList.Electric_egg, + ItemList.Thunder_stone, +]); +const AmbretteTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Lucky_egg, + ItemList.Water_egg, + ItemList.Water_stone, +]); +const CyllageCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, + ItemList.Upgrade, + ItemList.Prism_scale, +]); +const DisguisedShop = new Shop([ + ItemList['Probably Not Pikachu'], +], 'Badly Disguised Shop', [new TemporaryBattleRequirement('Twerps')]); +const GeosengeTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xClick, + ItemList.Fire_egg, + ItemList.Fire_stone, + ItemList.Kings_rock, +]); +const ShalourCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Lucky_egg, + ItemList.Fighting_egg, + ItemList.Linking_cord, + ItemList.Metal_coat, + ItemList.Key_stone, +]); +const CoumarineCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.LargeRestore, + ItemList.Grass_egg, + ItemList.Leaf_stone, + ItemList.Electirizer, + ItemList.Magmarizer, +]); +const LaverreCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xAttack, + ItemList.Lucky_incense, + ItemList.Deepsea_tooth, + ItemList.Deepsea_scale, + ItemList.Sachet, + ItemList.Whipped_dream, +]); +const DendemilleTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xClick, + ItemList.Dowsing_machine, + ItemList.Shiny_stone, + ItemList.Dusk_stone, + ItemList.Dawn_stone, +]); +const AnistarCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Moon_stone, + ItemList.Sun_stone, + ItemList.Razor_claw, + ItemList.Razor_fang, +]); +const CouriwayTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Dragon_egg, + ItemList.Dragon_scale, +]); +const SnowbelleCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Protector, + ItemList.Dubious_disc, + ItemList.Reaper_cloth, +]); +//Hoenn Flute Master +const FurfrouGemTrader = new GemMasterShop(GameConstants.GemShops.FurfrouGemTrader, 'Furfrou Gem Trader'); +const KalosStoneSalesman = new GemMasterShop(GameConstants.GemShops.KalosStoneSalesman, 'Stone Emporium', [new TemporaryBattleRequirement('Kalos Stone Salesman')], true); +//Kalos NPCs +const LumioseEngineer = new NPC('Engineer', [ + 'I\'m glad to be back in the city after so long at the Power Plant; it\'s so dusty out there!', + 'Rumor has it that if you conquer the Kalos Power Plant enough times, a strong Pokémon made out of Fire and Water will challenge you. But I bet you’d have to be the Champion before it finds you worthy… I certainly have never seen it!', +]); +const LumioseDexio = new NPC('Dexio', [ + 'Hey there! I\'m one of Professor Sycamore\'s assistants. If you\'ve made it to Kalos, you probably have a pretty impressive Pokédex by now, right?', + 'When you\'ve got your Pokédex open, you can click on a Pokémon\'s image to see more detailed stats about the Pokémon.', + 'Even if you don\'t remember details like how many times you\'ve encountered a particular species in the wild, or how many times you\'ve captured a Pokémon, your Pokédex does!', + 'And if some of the rumours about Mega Stones are true... it\'ll be worth keeping track of those sorts of things.', +], { + image: 'assets/images/npcs/Dexio (Gen 6).png', +}); +const Lysandre1 = new NPC('Lysandre', [ + 'Oh! You\'ve already met Professor Sycamore, how wonderful! That is a wonderful thing, indeed. You are one of the chosen ones.', + 'I am Lysandre. I\'ve tried to learn as much about Pokémon as I can to help build a brighter future. Professor Sycamore has taught me so much.', + 'Now listen! It is vital that this world becomes a better place. The people and Pokémon chosen to make the world better must work tirelessly to achieve this goal.', + 'Well, I\'ll be off. Please give Professor Sycamore my best. My desire... it is for a more beautiful world!', +], { image: 'assets/images/npcs/Team Flare Lysandre.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('A Beautiful World'), new QuestLineStepCompletedRequirement('A Beautiful World', 1, GameConstants.AchievementOption.less)]), +}); +const Calem1 = new NPC('Calem', [ + 'Hi $playername$, I just saw Diantha, a really cool and pretty actress, talking with a funny looking guy with orange spiky hair.', + 'He was such a weirdo. He kept telling her how everything should be beautiful forever and how he would end the world in an instant so that beauty never fades.', + 'Anyway, I\'m gonna continue forward. I\'ll wait for you in Ambrette Town.', +], { + image: 'assets/images/npcs/Calem.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 0), new QuestLineStepCompletedRequirement('A Beautiful World', 2, GameConstants.AchievementOption.less)]), +}); +const CamphrierFlabébéEnthusiast = new NPC('Flabébé Enthusiast', [ + 'Ah, isn\'t Flabébé such an eye-catching Pokémon? All these different lovely colors…', + 'If you\'re searching for the yellow and blue kinds, look no further than the Farm!', + 'They simply can\'t resist berries that match their colors - just plant a few and they\'ll soon come wandering in.', +]); +const Calem2 = new NPC('Calem', [ + 'Oh $playername$, you made it here. I wanted to learn about fossils so I went to the fossil lab, but the head scientist is not here.', + 'I heard he\'s in Glittering Cave but I also saw some weird guys in orange going there. Will you come with me and check it out?', +], { + image: 'assets/images/npcs/Calem.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 1), new QuestLineStepCompletedRequirement('A Beautiful World', 3, GameConstants.AchievementOption.less)]), +}); +const KalosFossilNpc1 = new NPC('Honeymooner Gal', [ + 'I must find one! I simply must!', + 'I sent my husband to buy tickets for the aquarium but it was all a ploy to get some alone time so I can find him a Pokémon fossil found only here in Kalos!', + 'According to my brochure, there\'s a pretty cave past these cliffs that\'s filled with them! It says reviving a Jaw Fossil can give you a Tyrunt, the perfect anniversary gift for my sweetie pie!', + 'I WILL find a Jaw Fossil! Nothing will get in the way of seeing my booboo\'s smile! Anything is possible with the power of love! And don\'t you forget that either!', +], { + image: 'assets/images/npcs/Tourist (female).png', + requirement: new OneFromManyRequirement([ + new ObtainedPokemonRequirement('Tyrunt', true), + new ObtainedPokemonRequirement('Amaura', true), + ]), +}); +const KalosFossilNpc2 = new NPC('Honeymooner Guy', [ + 'I have to find one! I just have to!', + 'I told my wife I was going buy tickets for the aquarium in the town back there but little did she know it was a white lie so I could search for a Pokémon fossil found only here in Kalos!', + 'According to my travel guide, this cave is filled with them! It says reviving a Sail Fossil can nab you an Amaura, the perfect anniversary gift for my pumpkin!', + 'I MUST find a Sail Fossil! Nothing will get in the way of making my sunshine happy! She\'s taught me that anything is possible with the power of love!', +], { + image: 'assets/images/npcs/Tourist (male).png', + requirement: new OneFromManyRequirement([ + new ObtainedPokemonRequirement('Tyrunt', true), + new ObtainedPokemonRequirement('Amaura', true), + ]), +}); +const KalosFossilNpc3 = new NPC('Honeymooner Couple', [ + 'Oh, you\'ve found all the fossil Pokémon native to Kalos! We tried too, but our search ended in failure. No, that\'s not entirely true...!', + 'We may not have found those fossils, but our real goal was making each other smile! No Pokémon can compare to the feeling of catching your loved one in the same secret act as you! To think we split up to surprise each other with a fossil when the real present is the time we spend together!', + 'Safe travels, Trainer! And may the blessing of love follow you!', +], { + image: 'assets/images/npcs/Honeymooners.png', + requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Tyrunt'), + new ObtainedPokemonRequirement('Amaura'), + ]), +}); +const FossilScientist = new NPC('Fossil Scientist', [ + 'Why, hello! Here to look for fossils as well?', + 'What did you say? Teemphlair was here? What\'s that? A Pokémon?', + 'You are very lucky! I just now found a fossil! But it\'s one I already have, so I\'ll give it to you!', + 'Well, I\'m going back to the lab, goodbye!', +], { + image: 'assets/images/npcs/Scientist (male).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 4), new QuestLineStepCompletedRequirement('A Beautiful World', 6, GameConstants.AchievementOption.less)]), +}); +const CyllageStoneCollector = new NPC('Vivid Stone Collector', [ + 'You see these beautiful gemstones in Grant\'s gym? There is no mistake, these are genuine Mega Stones!', + 'Oh, what I would pay to add them to my collection! But money is of no help here. I bet Grant would be willing to part with them if I challenge him enough times and prove my skills to him.', + 'Unfortunately my skills as a collector far surpass my skills as a Pokémon trainer. But anyone who can become the Champion of Kalos surely can convince Grant that these stones will be in good hands.', +], { + image: 'assets/images/npcs/Collector.png', + requirement: new MultiRequirement([ + new ObtainedPokemonRequirement('Aggron'), + new ObtainedPokemonRequirement('Tyranitar'), + ]), +}); +const TeamFlareGrunt1 = new NPC('Team Flare Grunt', [ + 'Stop right there! I remember you! You\'re the one who foiled our fossil-finding plans!', + 'And now you\'re here, standing around these stones. Do you have any idea what they even are?', + 'Of course you don\'t! You know nothing about the legend of 3000 years ago that says...', + 'Oh, whatever! Who cares about all of that? It\'s time for me to get some sweet revenge... with style!', +], { + image: 'assets/images/npcs/Team Flare Grunt (male).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 6), new QuestLineStepCompletedRequirement('A Beautiful World', 8, GameConstants.AchievementOption.less)]), +}); +const NotAsh = new NPC('Not Ash', [ + 'Hey uh.... twerp. Would you happen to have any Dungeon Tokens? We\'ve, uh, run out.', + 'I\'ll give you that Pikachu costume my Inkay was wearing for some?', + '...Give me a break. I know that you knew that the Pikachu was a costume. You could see right through us, as if you could just see its name over its head or something.', +], { + image: 'assets/images/npcs/Not Ash.png', + requirement: new TemporaryBattleRequirement('Twerps'), +}); +const SharlourKorrina = new NPC('Korrina', [ + 'What an explosive battle! I could tell that you didn\'t hold anything back!', + 'To Mega Evolve your Lucario, you need an even stronger bond!', + 'You can follow your progress in your Pokédex.', + 'When your bond is strong enough, you can Mega Evolve it using a Key Stone! You can buy them in this city!', +], { + image: 'assets/images/npcs/Korrina.png', + requirement: new TemporaryBattleRequirement('Korrina'), +}); +const CoumarineBirdwatcher = new NPC('Birdwatcher', [ + 'I\'ve heard there is a cave you can find if you go out on the ocean a little ways.', + 'Apparently defeating a strong creature there unleashes some energy.', + 'There are rumors that the energy calls some legendary birds to roam Kalos!', +]); +const CoumarineElectricTrainer = new NPC('Electric Trainer', [ + 'My Ampharos has gotten a boost since a friendly soul gave me an Ampharosite!', + 'Luckily my Ampharos was already strong enough to use it!', + 'If you find that fella, tell him the code DO-MAGEARNA-DREAM-OF-MAREEP? and he might help you too!', +]); +const Diantha1 = new NPC('Diantha', [ + 'Bonds... They really are important to us all, aren\'t they? When I\'m acting, I think I\'m always trying to forge a bond between myself and the character I\'m playing.', + 'If all I think about is how I\'m nothing like a character, then I\'ll just hate playing it.', + 'But if I focus on what I have in common with the character and put myself in her shoes, I might be able to understand her. It\'s the same for people, or Pokémon.', + 'Oh, never mind me! I\'m just babbling about my own things. Let\'s have a battle the next we meet, shall we? I\'m looking forward to it!', +], { + image: 'assets/images/npcs/Diantha.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 8), new QuestLineStepCompletedRequirement('A Beautiful World', 10, GameConstants.AchievementOption.less)]), +}); +const Lysandre2 = new NPC('Lysandre', [ + 'Professor Sycamore told me how much stronger you\'ve become.', + 'That is truly wonderful. With that power, you can steer your future in a better direction!', + 'We can\'t just cover up the old filth with new filth!', + 'I implore you to consider what we need to do to change the world into a new, beautiful world!', +], { image: 'assets/images/npcs/Team Flare Lysandre.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 9), new QuestLineStepCompletedRequirement('A Beautiful World', 11, GameConstants.AchievementOption.less)]), +}); +const Lysandre3 = new NPC('Lysandre', [ + 'I\'m a descendant of the king\'s younger brother. That being said, that story is 3,000 years old, so it might not be entirely reliable.', + 'People can be divided into two groups. Those who give... And those who take... It\'s just as how the Kalos region\'s two Legendary Pokémon gave life and took life.', + 'I want to be the kind of person who gives... But in this world, some foolish humans exist who would show their strength by taking what isn\'t theirs. They\'re filth!', + 'Long, long ago, the king of Kalos sought to take everything for his own, and he created a terrible weapon. Then the fire of destruction was unleashed... That is the legend that has been passed down.', + 'Kalos is beautiful right now! There will be no foolish actions if the number of people and Pokémon do not increase. That being said, the future isn\'t decided. You can\'t be sure each day will be like the one before.', + 'What the king of Kalos did was reprehensible, but... The ultimate weapon did manage to wash the world clean of that era\'s filth. Thank you for listening.', +], { image: 'assets/images/npcs/Team Flare Lysandre.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 12), new QuestLineStepCompletedRequirement('A Beautiful World', 14, GameConstants.AchievementOption.less)]), +}); +const SantaluneSageChen = new NPC('Sage Chen', [ + 'Ever since growing old I\'m no longer the Pokémon Trainer that I used to be. Now I always like to keep my garden full of Kasib Berries.', + 'One day, I forgot to harvest them, and within its withered husk, I found a small stone that enabled my Banette to perform a Mega Evolution.', +], { + image: 'assets/images/npcs/Sage.png', + requirement: new ObtainedPokemonRequirement('Banette'), +}); +const LaverreFurisodeGirlKatherine = new NPC('Furisode Girl Katherine', [ + 'Don\'t you find Goomy to be an interesting Pokémon? I certainly think so, even though it isn\'t a problem for my Pokémon~', + 'I\'ve heard its evolutionary line loves damp conditions, and apparently if you train a Sliggoo during rainy or foggy weather something marvelous happens!', +], { image: 'assets/images/npcs/Furisode Girl Katherine.png' }); +const LaverreGengariteAster1 = new NPC('Hex Maniac Aster', [ + 'I\'m shocked... You have a Pokédex, but you still don\'t know... you really don\'t know anything about Pokémon connected to Gengar, do you?', + 'Well then, I guess I\'ll just have to keep this wonderful item I was going to give you...', + 'If you want to change my mind... you will have to encounter at least 666 wild Gastly, 444 wild Haunter, and 13 wild Gengar.', + 'And do bring a Gengar of your own, won\'t you?', +], { + image: 'assets/images/npcs/Hex Maniac.png', + requirement: new OneFromManyRequirement([ + new StatisticRequirement(['pokemonEncountered', PokemonHelper.getPokemonByName('Gastly').id], 666, undefined, GameConstants.AchievementOption.less), + new StatisticRequirement(['pokemonEncountered', PokemonHelper.getPokemonByName('Haunter').id], 444, undefined, GameConstants.AchievementOption.less), + new StatisticRequirement(['pokemonEncountered', PokemonHelper.getPokemonByName('Gengar').id], 13, undefined, GameConstants.AchievementOption.less), + new ObtainedPokemonRequirement('Gengar', true) + ]), +}); +const LaverreGengariteAster2 = new NPC('Hex Maniac Aster', [ + 'Some Pokémon evolve when exposed to a Linking Cord, or sent through a trade.', + 'That\'s right. Haunter is one of those Pokemon.', + 'I don\'t have enough Quest Points to buy a Linking Cord, but a girl named Mindy from Snowpoint City offered to trade me her Haunter for a Medicham.', + 'Hopefully I\'ll have a Gengar soon...', +], { image: 'assets/images/npcs/Hex Maniac.png', + requirement: new TemporaryBattleRequirement('Hex Maniac Aster'), +}); +const LaverreMedichamite = new NPC('Black Belt', [ + 'My partner Medicham and I are always training to become the strongest in the world.', + 'Our favorite way to train is by doing quests. Someday my Medicham even found a Mega Stone while claiming some.', + 'I can\'t quite remember what Quest Level we were at, but it was probably 15 or higher.', +], { image: 'assets/images/npcs/Black Belt.png', + requirement: new ObtainedPokemonRequirement('Medicham'), +}); +const PokéBallFactoryDirector = new NPC('Poké Ball Factory Director', [ + 'You saved us! Thank you so much! You\'re an astounding Pokémon Trainer.', + 'Very well, then. I want to show my appreciation. I\'ll give you a Master Ball.', + 'I have a feeling you will put it to great use. You\'re different from those Team Flare people.', + 'What were they planning to accomplish by taking all the Poké Balls for themselves...', +], { image: 'assets/images/npcs/Gentleman (Gen 4).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 14), new QuestLineStepCompletedRequirement('A Beautiful World', 16, GameConstants.AchievementOption.less)]), +}); +const DendemilleDogLover = new NPC('Dubious Dog-loving Duke', [ + 'Dog Pokémon are the best of all! I\'m particularly fond of Houndour - I\'ve caught about five hundred of them.', + 'There\'s no such thing as a cold night in my house, no sir! The most fierce chill of winter is completely defeated by their warm, cozy presence.', + 'But recently, now that I\'ve got so many Houndour, they have been acting rather curiously.', + 'When the weather turns really sunny, they\'ll all run barking out onto Route 16. Honestly, it\'s quite a racket, and has gotten me into no small amount of trouble.', + 'They come wandering back when the weather changes, though. I wonder if a strong Pokémon is calling them?', + 'You could build your own Houndour pack and find out, but if it\'s strong enough to call five hundred Pokémon, it probably wouldn\'t give anyone weaker than Diantha the time of day.', +], { image: 'assets/images/npcs/Gentleman.png', +}); +const DendemilleWolfLover = new NPC('Worrisome Wolf-loving Woman', [ + 'I adore wolf Pokémon! The most precious of all have to be the brave little Electrike - I\'ve gathered five hundred of the darlings in my home.', + 'They\'re so loyal, and so fast! I give them letters to take to a friend in Galar in the morning, and I have a response back by supper!', + 'But now that I have so many of them, their behaviour has taken a... regrettable turn.', + 'When storms come along the horizon, they\'ll run en masse out to Route 16.', + 'They fortunately do return home when the weather changes, at least. I wonder what sort of creature is calling them? A strong Pokémon, perhaps?', + 'I\'ve been debating asking someone else to collect five hundred of their own Electrike and investigate, but if it can call such a fearsome pack with its presence alone, I don\'t imagine anyone less than Diantha herself could handle it.', +], { image: 'assets/images/npcs/Madame.png', +}); +const ProfessorSycamore1 = new NPC('Prof. Sycamore', [ + 'Hello $playername$! Do you remember the Pokémon Lysandre mentioned in that café? Kalos\'s Legendary Pokémon are called... Xerneas and Yveltal!', + 'Apparently, these Pokémon can control energy or absorb energy, respectively. Xerneas gives life energy to plants and Pokémon, whereas Yveltal steals all of the spirits around it.', + 'When they lose all of their vitality, they go to sleep in a secret place. It would be absolutely astounding if you found it!', + 'By the way, I heard Frost Cavern has a lot of cool Pokémon, why don\'t you go check it out?', +], { image: 'assets/images/npcs/Sycamore.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 15), new QuestLineStepCompletedRequirement('A Beautiful World', 17, GameConstants.AchievementOption.less)]), +}); +const AnistarKalosRoamerNPC = new RoamerNPC('Hex Maniac Melanie', [ + 'The spirits tell me roaming Pokémon have been spotted on {ROUTE_NAME}!', +], GameConstants.Region.kalos, RoamingPokemonList.findGroup(GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos), 'assets/images/npcs/Hex Maniac.png'); +const KalosTVNews = new NPC('Kalos TV News', [ + 'Pokémon Trainers. I come to you to make an important announcement. Listen well.', + 'Team Flare will revive the ultimate weapon, eliminate everyone who isn\'t in our group, and return the world to a beautiful, natural state.', + 'Unproductive fools are consuming our future... If nothing changes, the world will become ugly and conflicts will raze the land from end to end.', + 'I repeat. We will use the ultimate weapon and wipe the slate clean. I\'m sorry, those of you who are not members of Team Flare, but this is adieu to you all.', +], { image: 'assets/images/npcs/Team Flare Lysandre.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 18), new QuestLineStepCompletedRequirement('A Beautiful World', 20, GameConstants.AchievementOption.less)]), +}); +const Lysandre4 = new NPC('Lysandre', [ + 'Welcome. I guess you found my secret labs, inside my own café. The world was just too vast...and too full of fools that I couldn\'t save through my hard work alone...', + 'That\'s why I decided the only way to save the world was to take it all for myself. I don\'t expect that I will ever make you understand how I think and feel...', + 'Try to stop the ultimate weapon if you must. Saving everything... The world is suffering because of this absurd dream...', +], { image: 'assets/images/npcs/Team Flare Lysandre.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 19), new QuestLineStepCompletedRequirement('A Beautiful World', 21, GameConstants.AchievementOption.less)]), +}); +const AZ1 = new NPC('AZ', [ + 'Listen, trainer who will face Lysandre. A terribly long time ago... There was a man and a Pokémon. A war began. The man\'s beloved Pokémon took part in the war.', + 'The Pokémon died. The man wanted to bring the Pokémon back. No matter what it took. The man built a machine to give it life and succeeded.', + 'The lives of many Pokémon were taken to restore its life. The resurrected Pokémon left the man.', + 'The man had suffered too much. His rage had not subsided. He turned the machine into the ultimate weapon. The man became a bringer of destruction that ended the war.', +], { image: 'assets/images/npcs/AZ.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 21), new QuestLineStepCompletedRequirement('A Beautiful World', 23, GameConstants.AchievementOption.less)]), +}); +const BlueButton = new NPC('Blue Button', [ + 'You pressed it! Oh ho ho! You pressed the blue switch! Winner, winner! Congratulations!', + 'But I\'m still going to activate the ultimate weapon! I\'ll just use my remote, here! Click-click! And the power is ON!', + 'The ultimate weapon is reborn! The poisonous flower has bloomed! All shall perish! Except for Team Flare! Look at Geosenge! It has bloomed in Geosenge Town!', + 'The boss\'s dream of creating a beautiful world will come true! Add it all up, and it equals... a victory for our SCIENCE!', +], { image: 'assets/images/npcs/Team Flare Xerosic.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 23), new QuestLineStepCompletedRequirement('A Beautiful World', 24, GameConstants.AchievementOption.less)]), +}); +const RedButton = new NPC('Red Button', [ + 'You pushed it! Oh ho ho! You pushed the little red button! Too bad...for you!', + 'Pushing that button has enabled us to use the ultimate weapon! Don\'t feel too down, though. I would have activated it even if you had guessed correctly.', + 'The ultimate weapon is reborn! The poisonous flower has bloomed! All shall perish! Except for Team Flare! Look at Geosenge! It has bloomed in Geosenge Town!', + 'The boss\'s dream of creating a beautiful world will come true! Add it all up, and it equals... a victory for our SCIENCE!', +], { image: 'assets/images/npcs/Team Flare Xerosic.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 23), new QuestLineStepCompletedRequirement('A Beautiful World', 24, GameConstants.AchievementOption.less)]), +}); +const TeamFlareLysandre1 = new NPC('Team Flare Lysandre', [ + 'The ultimate weapon\'s flower has finally bloomed above the soil. Don\'t you find its beauty captivating? As we speak, it draws its energy from the Legendary Pokémon.', + 'Even though resources, space, and energy on this planet are limited, the number of people and Pokémon has increased to an unsustainable level. Whether it\'s money or energy, the ones who steal are the ones who win in this world.', + 'Pokémon... Shall no longer exist. Pokémon are wonderful beings. Humans have worked with Pokémon, and we have helped each other flourish. But precisely because of that, they will inevitably become tools for war and theft!', + 'You\'re as strong as ever. But... It\'s too late! There\'s no hope for you now! Go down to the lowest floor, and see for yourself!', +], { image: 'assets/images/npcs/Team Flare Lysandre.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 29), new QuestLineStepCompletedRequirement('A Beautiful World', 31, GameConstants.AchievementOption.less)]), +}); +const TeamFlareBossLysandre1 = new NPC('Team Flare Boss Lysandre', [ + 'What a startling development! I never would\'ve thought you were really a chosen one!', + 'So THESE were the mighty Xerneas and Yveltal?! I expected more from Pokémon called legend! You desire help from people? YOU need help from a human?', + 'For me, victory is using the ultimate weapon. In order to do that, I need to reclaim the Legendary Pokémon\'s power and send that power to that weapon once again.', + 'I\'ll be taking the Legendary Pokémon back now! This time, I won\'t lose.', +], { image: 'assets/images/npcs/Team Flare Boss Lysandre.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('A Beautiful World', 31), new QuestLineStepCompletedRequirement('A Beautiful World', 33, GameConstants.AchievementOption.less)]), +}); +const CouriwayOldGentlemanHarold = new NPC('Old Gentleman Harold', [ + 'I love going on walks at dusk. It\'s my favourite part of the day, everything\'s so calm...', + 'Though lately, I\'ve been hearing roars near the waterfalls, but I\'m too scared to see for myself what kind of monster is making those sounds.', + 'I would ask you to go, but I\'m sure you\'re really busy either dealing with Team Flare or the Pokémon League challenge.', + 'Once you are done, you could come back at dusk. Maybe you can do something about it...', +], { image: 'assets/images/npcs/Gentleman (Gen 4).png', + requirement: new TemporaryBattleRequirement('Team Flare Boss Lysandre 2', 1, GameConstants.AchievementOption.less), +}); +const KiloudeConfusedHiker = new NPC('Confused Hiker', [ + 'Whoa! What the- Where am I? How did I get here? Last thing I can remember I was in Reflection Cave when this little Pokémon with hoops threw something at me… Oh you’ve beaten the Pokémon League? Maybe you can find it roaming around the region so you can tame that little prankster. Now how am I gonna get home…', +], { image: 'assets/images/npcs/Hiker.png' }); +const ProfSycamore = new ProfNPC('Prof. Sycamore', GameConstants.Region.kalos, 'You\'re encountering Pokémon at a really good clip, aren\'t you? Congratulations! You completed the Pokédex!', 'Onward to Alola, shall we?', 'assets/images/npcs/Sycamore.png'); +const MysteryFan = new NPC('Mystery Fan', [ + 'I\'ve heard a Pokémon detective is sniffing around here for mysteries! He might be interested in an enigmatic berry, too.', +]); +const Spelunker = new NPC('Spelunker', [ + 'I\'ve heard that a hidden realm lies beneath this cave, ruled by a Pokémon Princess. She might come out for a powerful and helpful trainer.', + 'That would be big news, sure to be reported on local bulletin boards!', +]); +const ExamineAegislash = new GiftNPC('Millis and Argus Steels\' Aeglislash', [ + 'Aegislash wants to join you on your adventure.', +], () => { + App.game.party.gainPokemonByName('Aegislash (Blade)'); +}, 'assets/images/pokemon/681.01.png', { requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Princess Diancie', 4, GameConstants.AchievementOption.more), new ObtainedPokemonRequirement('Aegislash (Blade)', true)]) }); +const ThanksDiancie = new NPC('Princess Diancie', [ + 'Thank you for your help saving the Diamond Domain. I will be waiting for you in Reflection Cave.', + 'There are many threats in this world, and I think we will both be safer if we work together!', +], { + image: 'assets/images/pokemon/719.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Princess Diancie', 6), new QuestLineStepCompletedRequirement('Princess Diancie', 8, GameConstants.AchievementOption.less)]), +}); +const KalosStoneSalesman1 = new NPC('Stone Salesman', [ + 'I\'m hunting for rare stones! If I find any extras, I\'ll sell you some!', +], { + requirement: new TemporaryBattleRequirement('Kalos Stone Salesman', 1, GameConstants.AchievementOption.less), +}); +const KalosStoneSalesman2 = new NPC('Stone Salesman', [ + 'I\'m selling some peculiar stones for gems at my new shop, the Stone Emporium. Let me know if anything there strikes your fancy!', +], { + requirement: new TemporaryBattleRequirement('Kalos Stone Salesman'), +}); +const Baraz1 = new NPC('Baraz', [ + 'Hello, $playername$! My name is Baraz, and my people have a complicated history with Hoopa.', + 'I have come to this region to search of a Prison Bottle, in which the spirit of a powerful Hoopa is bound.', + 'Can you help with my search? My search indicates it is nearby, maybe one of the local Psychic Pokémon has it?', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Clash of Ages', 0), new QuestLineStepCompletedRequirement('Clash of Ages', 2, GameConstants.AchievementOption.less)]), +}); +const Baraz2 = new NPC('Baraz', [ + '$playername$! No luck?', + 'Maybe beating the Pokémon isn\'t enough. Try catching some of these Psychic Pokémon.', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Clash of Ages', 2), new QuestLineStepCompletedRequirement('Clash of Ages', 3, GameConstants.AchievementOption.less)]), +}); +const Baraz3 = new NPC('Baraz', [ + 'There\'s only one Pokémon who could keep the Prison Bottle from us for so long: Hoopa!', + 'You\'ll have to catch a ton before you find the Prison Bottle. Maybe... 100?', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Clash of Ages', 4), new QuestLineStepCompletedRequirement('Clash of Ages', 6, GameConstants.AchievementOption.less)]), +}); +const Baraz4 = new NPC('Baraz', [ + 'Wow, you caught 100 that fast?', + 'No? There\'s no other way, I\'m sorry...', + 'While Baraz is talking, a hoop appears behind him and the Prison Bottle falls out.', + 'Aha! There it is!', + 'Baraz grabs the Prison Bottle, and an eerie glow surrounds him. A massive Pokémon picks him up and flies away into a nearby hoop.', +], { + image: 'assets/images/items/quest/Prison_Bottle.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Clash of Ages', 6), new QuestLineStepCompletedRequirement('Clash of Ages', 8, GameConstants.AchievementOption.less)]), +}); +const VivillonPhotobook = new NPC('Vivillon Photobook', [ + 'Viola has sent some of her Vivillon photographs in to the local Pokémon Center as a photobook, to celebrate the Lunar New Year. You flip through the pages...', + '', + 'You see both a Meadow and a Fancy Vivillon flying together in the skies above Kalos. Strangely, the Meadow Vivillon is wearing a necklace of exotic flowers, and the Fancy has a tiny tea cup in its grip.', + '', + 'You see a Marine Vivillon flying above the surface of a lake. It\'s got one foot trailing through the water.', + '', + 'You see what was seemingly meant to be a photo of a Pokémon with a bulbous purple tail. However, a Modern Vivillon has jumped in front, and you can\'t get a good look at the other Pokémon.', + '', + 'You see a Jungle Vivillon resting on a blue frog-like Pokémon. The two of them seem to be in the center of a deep bog, but neither looks very concerned.', + '', + 'You see a Monsoon Vivillon. It\'s been startled by a light shone in its face. As far as you can see, the area around the spotlight is darker than pitch.', + '', + 'You see a Tundra Vivillon, watching a conveyor belt full of Poké Balls. A worker in the background looks mildly perplexed, as if he was expecting a different Pokémon there.', + '', + 'You see a Sun Vivillon bursting through a cloud of smoke. It\'s sweating, but seems to be enjoying itself.', + '', + 'You see an Archipelago Vivillon staring in shock at a swaying pillar. A Hoothoot sits next to it, completely unfazed.', + '', + 'You see an Elegant Vivillon frantically pulling at a doorknob. A Klefki seems to be giggling in the background.', + '', + 'You see an Ocean Vivillon snoozing peacefully. An Audino is carefully laying a blanket atop it.', + '', + 'You see a shocked Continental Vivillon staring into a chest. A Voltorb stares back, already primed to explode.', + '', + 'You see a River Vivillon flying through a forest. A spooky old mansion is in the background.', + '', + 'You see a Polar Vivillon peering over the edge of a tower. Clouds travel distantly below.', + '', + 'You see a Sandstorm Vivillon atop some desert ruins. It\'s trying to communicate with a large, orange moth-like Pokémon.', + '', + 'You see a Garden Vivillon playing in a field of flowers. The flowers extend far, far into the distance...', + '', + 'You see a High Plains Vivillon dancing with a group of Clefairy. Their dance is illuminated only by the full moon.', + '', + 'You see a Savanna Vivillon running for its life through a ruined tower. Several dragon-type Pokémon are chasing it relentlessly.', + '', + 'You see an Icy Snow Vivillon bundled up with its trainer. It\'s enjoying a much-needed warm cup of cocoa to counteract the icy cave around it.', + '', + 'Lastly, you see a Poké Ball Vivillon in a darkened mall. It\'s trying to scare the camerawoman, completely unaware of the sinister eyes peering from the darkness behind it.', +], { + requirement: new MultiRequirement([ + new QuestLineCompletedRequirement('The Great Vivillon Hunt!'), + new SpecialEventRequirement('Lunar New Year'), + ]), +}); +const FriendlyAttendant = new NPC('Friendly Attendant', [ + 'Welcome to the Friend Safari!', + 'This place is a lot like the Kanto Safari Zone, except we get a much wider variety of Pokémon coming through here.', + 'Our park staff stocks the Safari with different hard-to-find Pokémon every day. Many of these Pokémon can\'t be caught anywhere else in the world!', + 'As new and rare types of Pokémon are discovered, park staff will add them to our rotation of potential stock!', +], { image: 'assets/images/npcs/Pokemon Ranger (female).png' }); +const BugCatcherScizor = new NPC('Bug Catcher Elliot', [ + 'I heard there was a stone hidden in the Friend Safari that makes Scizor stronger!', + 'It takes a very experienced trainer to find it, though.', +], { image: 'assets/images/npcs/Bug Catcher.png' }); +const AnomalyMewtwo2 = new NPC('Anomaly Mewtwo', [ + 'This place is... beautiful. I am amazed such a place truly exists.', + '.......Thank you.', + 'I would like to give you something, but first, may I ask two things of you?', + 'First, I would like to gather 110,000 each of Psychic and Fighting Gems to boost the power of my attacks.', + 'If you could gather 60,000 of each I can take care of the rest.', + 'Also, you have heard of Twisted Spoons, yes? They are items that greatly boost the power of psychic type Pokémon.', + 'When I was created, I had an enhanced version of this item created for me. I have heard it is now in the hands of an organisation named Team Plasma, in an area named P2 Laboratory.', + 'I would greatly appreciate it if you would retrieve this item for me.', +], { + image: 'assets/images/pokemon/150.02.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('An Unrivaled Power', 13), new QuestLineStepCompletedRequirement('An Unrivaled Power', 15, GameConstants.AchievementOption.less)]), +}); +const AnomalyMewtwo3 = new NPC('Anomaly Mewtwo', [ + 'I am even more in your debt. But there is one more thing I would like to ask of you.', + 'Would you be willing to fight me, one last time, in this new home you have given me?', + 'With my Twisted Spoon in hand, my moves boosted by Gems, and my Mega Evolution, I can finally show you the true heights of my power!', +], { + image: 'assets/images/pokemon/150.02.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('An Unrivaled Power', 15), new QuestLineStepCompletedRequirement('An Unrivaled Power', 17, GameConstants.AchievementOption.less)]), +}); +const AnomalyMewtwo4 = new NPC('Anomaly Mewtwo', [ + 'Hah! Your strength is truly unyielding!', + 'I would like to apologise for accusing you of merely possessing the Mewtwo in your care. It is clear that you greatly care for it, as well as all your other Pokémon. Take this.', + '


    You obtained the Mewtwonite Y!', + 'You are truly deserving of this Mega Stone. Use it to give your Mewtwo a truly unrivaled power.', +], { + image: 'assets/images/pokemon/150.02.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('An Unrivaled Power', 17), new QuestLineCompletedRequirement('An Unrivaled Power', GameConstants.AchievementOption.less)]), +}); +//Kalos Towns +TownList['Vaniville Town'] = new Town('Vaniville Town', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new BulletinBoard(GameConstants.BulletinBoards.Kalos)], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_UnovaChampion)], + npcs: [], +}); +TownList['Aquacorde Town'] = new Town('Aquacorde Town', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [AquacordeTownShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 1)], +}); +TownList['Santalune City'] = new Town('Santalune City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [SantaluneCityShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 3)], + npcs: [MysteryFan, VivillonPhotobook, SantaluneSageChen], +}); +TownList['Lumiose City'] = new Town('Lumiose City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [TemporaryBattleList['Sycamore 1'], DepartmentStoreShop, FriseurFurfrouShop, KalosStoneSalesman, TemporaryBattleList['Team Flare Lysandre 1'], TemporaryBattleList['Team Flare Xerosic'], TemporaryBattleList['Storyline AZ'], TemporaryBattleList.AZ, TemporaryBattleList.Merilyn, TemporaryBattleList['Grand Duchess Diantha'], TemporaryBattleList['Kalos Stone Salesman']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 4)], + npcs: [ProfSycamore, LumioseDexio, LumioseEngineer, Lysandre1, Calem1, Lysandre3, Lysandre4, AZ1, BlueButton, RedButton, KalosStoneSalesman1, KalosStoneSalesman2], +}); +TownList['Camphrier Town'] = new Town('Camphrier Town', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [CamphrierTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Camphrier Town'])], { + requirements: [new TemporaryBattleRequirement('Tierno 1')], + npcs: [CamphrierFlabébéEnthusiast], +}); +TownList['Parfum Palace'] = new Town('Parfum Palace', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new ShardTraderShop(GameConstants.ShardTraderLocations['Parfum Palace'], 'Furfrou Shard Trader', true), FurfrouGemTrader], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 6)], +}); +TownList['Ambrette Town'] = new Town('Ambrette Town', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [AmbretteTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Ambrette Town'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 8)], + npcs: [KalosFossilNpc1, KalosFossilNpc3, Calem2], +}); +TownList['Cyllage City'] = new Town('Cyllage City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [CyllageCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Cyllage City']), TemporaryBattleList['Marquis Grant']], { + requirements: [new QuestLineStepCompletedRequirement('A Beautiful World', 5)], + npcs: [CyllageStoneCollector], +}); +TownList['Disguised Shop'] = new Town('Disguised Shop', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [DisguisedShop, TemporaryBattleList.Twerps], { + requirements: [ + new RouteKillRequirement(10, GameConstants.Region.kalos, 10), + ], + npcs: [NotAsh], + ignoreAreaStatus: true, +}); +TownList['Geosenge Town'] = new Town('Geosenge Town', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [GeosengeTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Geosenge Town']), new MoveToDungeon(dungeonList['Team Flare Secret HQ']), TemporaryBattleList['Team Flare Grunt 2']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 10)], + npcs: [TeamFlareGrunt1], +}); +TownList['Shalour City'] = new Town('Shalour City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [ShalourCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Shalour City']), TemporaryBattleList.Korrina, TemporaryBattleList.Riot, TemporaryBattleList['Millis and Argus Steel']], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Reflection Cave'))], + npcs: [SharlourKorrina, ExamineAegislash, ThanksDiancie], +}); +TownList['Coumarine City'] = new Town('Coumarine City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [CoumarineCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Coumarine City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 12)], + npcs: [CoumarineBirdwatcher, CoumarineElectricTrainer, Diantha1, Lysandre2], +}); +TownList['Laverre City'] = new Town('Laverre City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [LaverreCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Laverre City']), TemporaryBattleList['Hex Maniac Aster']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 14)], + npcs: [LaverreFurisodeGirlKatherine, LaverreGengariteAster1, LaverreGengariteAster2, LaverreMedichamite], +}); +TownList['Dendemille Town'] = new Town('Dendemille Town', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [DendemilleTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Dendemille Town'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 15)], + npcs: [DendemilleWolfLover, DendemilleDogLover, ProfessorSycamore1], +}); +TownList['Anistar City'] = new Town('Anistar City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [AnistarCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Anistar City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 17)], + npcs: [AnistarKalosRoamerNPC, KalosTVNews], +}); +TownList['Couriway Town'] = new Town('Couriway Town', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [TemporaryBattleList['Sycamore 2'], CouriwayTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Couriway Town']), TemporaryBattleList['Team Flare Boss Lysandre 2']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.kalos, 18)], + npcs: [CouriwayOldGentlemanHarold], +}); +TownList['Snowbelle City'] = new Town('Snowbelle City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [SnowbelleCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Snowbelle City'])], { + requirements: [new TemporaryBattleRequirement('Trevor')], +}); +TownList['Kiloude City'] = new Town('Kiloude City', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [TemporaryBattleList['Calem 6']], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion)], + npcs: [KiloudeConfusedHiker, Baraz1, Baraz2, Baraz3, Baraz4], +}); +TownList['Pokémon League Kalos'] = new Town('Pokémon League Kalos', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [GymList['Elite Malva'], GymList['Elite Siebold'], GymList['Elite Wikstrom'], GymList['Elite Drasna'], GymList['Champion Diantha'], pokeLeagueShop()], { + requirements: [ + new TemporaryBattleRequirement('Calem 5'), + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Victory Road Kalos')), + ], +}); +TownList['Friend Safari'] = new Town('Friend Safari', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new SafariTownContent('Enter Friend Safari')], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion)], + npcs: [FriendlyAttendant, BugCatcherScizor], +}); +//Kalos Dungeons +TownList['Santalune Forest'] = new DungeonTown('Santalune Forest', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new RouteKillRequirement(10, GameConstants.Region.kalos, 2)]); +TownList['Connecting Cave'] = new DungeonTown('Connecting Cave', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new TemporaryBattleRequirement('Trevor & Tierno')]); +TownList['Glittering Cave'] = new DungeonTown('Glittering Cave', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new RouteKillRequirement(10, GameConstants.Region.kalos, 9), new QuestLineStepCompletedRequirement('A Beautiful World', 2)], [TemporaryBattleList['Team Flare Grunt 1']], { + npcs: [FossilScientist, KalosFossilNpc2], +}); +TownList['Reflection Cave'] = new DungeonTown('Reflection Cave', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new RouteKillRequirement(10, GameConstants.Region.kalos, 11)], [], { + npcs: [Spelunker], +}); +//Tower of Mastery? +TownList['Sea Spirit\'s Den'] = new DungeonTown('Sea Spirit\'s Den', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new RouteKillRequirement(10, GameConstants.Region.kalos, 23)]); +TownList['Poké Ball Factory'] = new DungeonTown('Poké Ball Factory', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new GymBadgeRequirement(BadgeEnums.Fairy)], [], { + npcs: [PokéBallFactoryDirector], +}); +TownList['Kalos Power Plant'] = new DungeonTown('Kalos Power Plant', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new RouteKillRequirement(10, GameConstants.Region.kalos, 13), new GymBadgeRequirement(BadgeEnums.Plant), new QuestLineStepCompletedRequirement('A Beautiful World', 10)]); +TownList['Lost Hotel'] = new DungeonTown('Lost Hotel', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new RouteKillRequirement(10, GameConstants.Region.kalos, 15)]); +TownList['Frost Cavern'] = new DungeonTown('Frost Cavern', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new QuestLineStepCompletedRequirement('A Beautiful World', 16)], undefined, { + npcs: [IceRock], +}); +TownList['Team Flare Secret HQ'] = new DungeonTown('Team Flare Secret HQ', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new QuestLineStepCompletedRequirement('A Beautiful World', 24)], [TemporaryBattleList.Xerneas, TemporaryBattleList.Yveltal, TemporaryBattleList['Team Flare Boss Lysandre 1']], { + npcs: [TeamFlareLysandre1, TeamFlareBossLysandre1], +}); +TownList['Terminus Cave'] = new DungeonTown('Terminus Cave', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new RouteKillRequirement(10, GameConstants.Region.kalos, 18)]); +TownList['Pokémon Village'] = new DungeonTown('Pokémon Village', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [new RouteKillRequirement(10, GameConstants.Region.kalos, 20)], [], { + npcs: [MossRock, AnomalyMewtwo2, AnomalyMewtwo3, AnomalyMewtwo4], +}); +TownList['Victory Road Kalos'] = new DungeonTown('Victory Road Kalos', GameConstants.Region.kalos, GameConstants.KalosSubRegions.Kalos, [ + new GymBadgeRequirement(BadgeEnums.Iceberg), + new OneFromManyRequirement([ + new RouteKillRequirement(10, GameConstants.Region.kalos, 21), + new RouteKillRequirement(10, GameConstants.Region.kalos, 22), + ]), +]); +//Unknown Cave? +//Alola Shops +const IkiTownShop = new Shop([ + ItemList.Pokeball, + ItemList.xAttack, + ItemList.xClick, + ItemList.SmallRestore, +]); +const HauoliCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Token_collector, + ItemList.Lucky_egg, + ItemList.Mystery_egg, + ItemList.Wonder_Chest, + ItemList.Miracle_Chest, + ItemList.Shiny_stone, + ItemList.Dusk_stone, + ItemList.Dawn_stone, +]); +const HeaheaCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.xAttack, + ItemList.MediumRestore, + ItemList.Water_stone, + ItemList.Kings_rock, + ItemList.Metal_coat, +]); +const PaniolaTownShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Lucky_egg, + ItemList.Grass_egg, + ItemList.Fire_egg, + ItemList.Water_egg, +]); +const RoadsideMotelShop = new Shop([ + ItemList.Beastball, +], 'Looker’s Exchange', [new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 1), +]); +const KonikoniCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, + ItemList.Fire_stone, + ItemList.Linking_cord, + ItemList.Soothe_bell, +]); +const AetherParadiseShop = new Shop([ + ItemList.Upgrade, + ItemList['Type: Null'], +]); +const MalieCityShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.xClick, + ItemList.LargeRestore, + ItemList.Thunder_stone, + ItemList.Electric_egg, + ItemList.Electirizer, + ItemList.Magmarizer, +]); +const TapuVillageShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Lucky_egg, + ItemList.Razor_claw, + ItemList.Razor_fang, + ItemList.Ice_stone, +]); +const SeafolkVillageShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Token_collector, + ItemList.Fighting_egg, + ItemList.Deepsea_tooth, + ItemList.Deepsea_scale, + ItemList.Prism_scale, + ItemList.Sachet, + ItemList.Whipped_dream, +]); +const ExeggutorIslandShop = new Shop([ + ItemList.Dragon_egg, + ItemList.Leaf_stone, + ItemList.Dragon_scale, + ItemList.Protector, + ItemList.Dubious_disc, + ItemList.Reaper_cloth, +]); +const AltaroftheSunneandMooneShop = new Shop([ + ItemList.Moon_stone, + ItemList.Sun_stone, + ItemList.Poipole, +]); +const ATreeMaybeShop = new Shop([ + ItemList.Power_Bracer, + ItemList.Key_stone, +]); +//Silvally Typings Shops +const BrookletHillShop = new Shop([ + ItemList.Water_Memory_Silvally, +], 'Lana\'s Trade', [ + new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 5, GameConstants.AchievementOption.more), new ItemOwnedRequirement('Water_Memory_Silvally', 1, GameConstants.AchievementOption.less)]), +], true); +const LushJungleShop = new Shop([ + ItemList.Grass_Memory_Silvally, +], 'Mallow\'s Trade', [ + new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 7, GameConstants.AchievementOption.more), new ItemOwnedRequirement('Grass_Memory_Silvally', 1, GameConstants.AchievementOption.less)]), +], true); +const WelaVolcanoParkShop = new Shop([ + ItemList.Fire_Memory_Silvally, +], 'Kiawe\'s Trade', [ + new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 9, GameConstants.AchievementOption.more), new ItemOwnedRequirement('Fire_Memory_Silvally', 1, GameConstants.AchievementOption.less)]), +], true); +const HokulaniObservatoryShop = new Shop([ + ItemList.Electric_Memory_Silvally, +], 'Sophocles\'s Trade', [ + new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 11, GameConstants.AchievementOption.more), new ItemOwnedRequirement('Electric_Memory_Silvally', 1, GameConstants.AchievementOption.less)]), +], true); +const MountLanakilaShop = new Shop([ + ItemList.Ice_Memory_Silvally, +], 'Veteran Aristo\'s Trade', [ + new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 13, GameConstants.AchievementOption.more), new ItemOwnedRequirement('Ice_Memory_Silvally', 1, GameConstants.AchievementOption.less)]), +], true); +const ExeggutorIslandHillShop = new Shop([ + ItemList.Ground_Memory_Silvally, +], 'Hapu\'s Trade', [ + new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 15, GameConstants.AchievementOption.more), new ItemOwnedRequirement('Ground_Memory_Silvally', 1, GameConstants.AchievementOption.less)]), +], true); +// Magikarp Jump Shops +const MagikarpJumpGemTrade = new GemMasterShop(GameConstants.GemShops.MagikarpJumpGemTrader, 'Trade', [new GymBadgeRequirement(BadgeEnums.Heal_League)]); +const MagikarpJumpShadySalesMan = new Shop([ + ItemList['Magikarp Blue Raindrops'], + ItemList['Magikarp Saucy Violet'], +], 'Shady Salesman', [new GymBadgeRequirement(BadgeEnums.Master_League)]); +//Alola NPCs +const IkiOutskirtsMom = new NPC('Scratch Cat Girl', [ + 'I love cats very much, but dogs aren\'t so bad either.', + 'Out of all the dog-like Pokémon, I think Rockruff is definitely the most adorable. And it even has three evolutions! One during the day, one at night and one in between, from 5 to 6 o\'clock.', + 'What\'s that? AM or PM?', + 'Yes.', +], { image: 'assets/images/npcs/Scratch Cat Girl.png' }); +const TrainerSchoolTeacher = new NPC('Teacher Emily', [ + 'Just as Alola has multiple islands, its dungeons have multiple floors! Hurry to the ladder to find your way to the next floor.', + 'Watch the clock, if you make it to the next floor you\'ll get a time boost to help you find the boss.', + 'Good luck with your island challenge!', +], { image: 'assets/images/npcs/Teacher (gen7).png' }); +const IkiKahuna = new NPC('Kahuna Hala', [ + 'Welcome to Alola!', + 'Here we don\'t have gyms. We have the Island Challenge. On each of our four islands you will complete one or more trials.', + 'After completing all of an island\'s trials, you will battle that island\'s kahuna in a Grand trial.', + 'This island only has one trial: Captain Ilima\'s trial in Verdant Cavern, below the Melemele Woods. Come back here after clearing that challenge for your Grand trial battle.', +], { + image: 'assets/images/npcs/Hala.png', + requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 1, GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Typing some Memories', 3, GameConstants.AchievementOption.more)]), +}); +const VerdantCavernIlima = new NPC('Captain Ilima', [ + 'Greetings. Captain Ilima here. In every locale where a captain holds his or her trials, you will encounter a particularly strong boss, known as a Totem Pokémon. To clear a Trial, all you have to do is defeat these Pokémon!', + 'Some Trial Sites are protected by different Pokémon depending on the time of day. The difficulty of each Trial isn\'t affected by these changes, but it makes for quite the interesting observance!', +], { + image: 'assets/images/npcs/Ilima.png', +}); +const LagunaKahuna = new NPC('Kahuna Hala', [ + 'Dooot doo doo, just a kahuna on a stroll to the laguna. ♪', +], { + image: 'assets/images/npcs/Hala.png', + requirement: new QuestLineCompletedRequirement('Welcome to Paradise, Cousin!'), +}); +const HeaheaCafeOwner = new NPC('Café Owner', [ + 'Akala Island has three trials.', + 'Captain Lana\'s trial in Brooklet Hill, Captain Kiawe\'s trial in Wela Volcano Park and Captain Mallow\'s trial in Lush Jungle.', + 'For what it\'s worth, I say don\'t go to any of those places. Too wet, too hot and too... jungly. Why not stay here? Have a coffee! Enjoy the city!', + 'Or go to Konikoni City down south. You might even meet our kahuna there!', +], { image: 'assets/images/npcs/Owner.png' }); +const HeaheaGentleman = new NPC('Gentleman', [ + 'There\'s an ancient legend here on Akala Island that tells of Marshadow.', + 'It is said that when Marshadow is defeated, it sometimes leaves behind a rare crystallized fragment of its shadow.', + 'According to the legend this fragment is known as the Crystallized Shadow and if you reunite Marshadow with it, Marshadow will unlock a hidden potential.', +], { + image: 'assets/images/npcs/Gentleman.png', + requirement: new GymBadgeRequirement(BadgeEnums.Champion_Stamp), +}); +const ProfBurnetAlola2 = new NPC('Professor Burnet', [ + 'Long ago, Cosmog was called the child of the stars. Its powers seem to have some connection with Ultra Wormholes.', + 'The mysteries of the Ultra Wormhole and Ultra Beasts... I would be very happy if I could somehow unravel them!', + 'You say I look familiar? Oh, you\'ve probably seen me with Kukui. He\'s my husband!', +], { + image: 'assets/images/npcs/Professor Burnet (gen7).png', + requirement: new QuestLineStepCompletedRequirement('Symbiotic Relations', 6), +}); +const PikachuValleyPikachuGeneric = new NPC('Pikachu', [ + 'Pikachu!', + 'The Pikachu looks happy playing with all its friends!', +], { + image: 'assets/images/pokemon/25.png', +}); +const PikachuValleyAlolaCap = new NPC('Pikachu', [ + 'Pi-Pikachu!', + 'The Pikachu is waving at you supportively! Its goodwill carries you forward on your journey to Alola Championship!', +], { + image: 'assets/images/pokemon/25.06.png', + requirement: new GymBadgeRequirement(BadgeEnums.Champion_Stamp, GameConstants.AchievementOption.less), +}); +const PikachuValleyPikachuWorldCap = new NPC('Pikachu', [ + 'Pii-kachu!', + 'The Pikachu is staring at you intently! Is it waiting for you to become stronger?', +], { + image: 'assets/images/pokemon/25.07.png', + requirement: new MultiRequirement([new MaxRegionRequirement(GameConstants.Region.galar), new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion, GameConstants.AchievementOption.less)]), +}); +const PaniolaTownActor = new NPC('Actor Meredith', [ + 'I love Oricorio. I can tell you all about it!', + 'Each of the four islands in Alola has its own meadow, and each meadow has its own form of Oricorio. Each island, except for Akala Island. So you\'d think there\'s only three forms of Oricorio, right?', + 'Wrong! There is a fourth! Did you know you can find all of the Oricorio forms on the farm? One of them doesn\'t appear anywhere else!', + 'Each Oricorio form is attracted to the berry color that matches its own style. Red for Baile style, yellow for Pom-Pom style, pink for Pa\'u style and purple for Sensu style.', + 'You want to know which one can only be found on the farm? I\'m sure you can figure that out yourself. Simple process of elimination, really.', +], { image: 'assets/images/npcs/Actor.png' }); +const RoyalAvenueSpectator = new NPC('Spectator', [ + 'I like sneaking snacks inside the Battle Royal Dome. One time I snuck in pancakes and there were two trainers from Kanto who both had a Pikachu. I ended up sharing some with one.', + 'Weird thing is, both trainers evolved their Pikachu after the battle, but one had a different form from usual! Maybe there\'s something about Alola that makes certain Pokémon evolve differently? I would check my Evolution Items if I were you.', +], { image: 'assets/images/npcs/Preschooler (female).png' }); +const KonikoniKahuna = new NPC('Kahuna Olivia', [ + 'What do you mean Grand trials are just like gym battles? It\'s a totally different thing!', + 'Come fight me in our very special and unique brand new Pokémon League and see if you still think our Island Challenge is nothing special!', +], { + image: 'assets/images/npcs/Olivia.png', + requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 1, GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Typing some Memories', 3, GameConstants.AchievementOption.more)]), +}); +const MalieKahuna = new NPC('Kahuna Nanu', [ + 'What do I think of Grand trials? They\'re just like gym battles. Yup, it\'s totally the same thing. They\'re even making a Pokémon League.', + 'What? Why are you looking at me like that? If you don\'t wanna battle, I\'m going home.', +], { + image: 'assets/images/npcs/Nanu.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 7), new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 1, GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Typing some Memories', 3, GameConstants.AchievementOption.more)])]), +}); +const TapuWorker = new NPC('Worker Ovid', [ + 'Yesterday was my first day working on Mount Lanakila. I was up there maintaining the paths to the new Pokémon League.', + 'My trusty Crabrawler was with me. He was smashing some rocks that were blocking the path, having a grand ol\' time like usual, when suddenly we were attacked by a wild Pokémon!', + 'After the battle, Crabrawler evolved! I didn\'t even know he could do that. He\'s so different now. But I still love him. He\'s my best friend, and he\'s even better at rock smashing now!', +], { image: 'assets/images/npcs/Worker (male).png' }); +const PoTownNanu = new NPC('Officer Nanu', [ + 'A trial-goer, huh? Figures. Look, I\'m not gonna fight someone who is taking on Team Skull. So...go. Just go.', +], { + image: 'assets/images/npcs/Nanu.png', + requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 6, GameConstants.AchievementOption.less), +}); +const PoTownHomeowner = new NPC('Office Worker Royce', [ + 'My house! My car! MY LAWN! What did those Team Skull kids do!?', +], { + image: 'assets/images/npcs/Office Worker (male).png', + requirement: new QuestLineStepCompletedRequirement('Child of the Stars', 6), +}); +const YungoosAetherHouse = new NPC('Yungoos', [ + 'Grrrssssss', +], { + image: 'assets/images/pokemon/734.png', + requirement: new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 5, GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Child of the Stars', 6)]), +}); +const SeafolkCaptain = new NPC('Mina', [ + 'We don\'t have a kahuna on Poni, so I don\'t have an actual trial or anything...', + 'Old man Nanu has been looking after our grand trials up until now. I\'m the captain and all, so I\'ve gotta come up with a trial.', +], { + image: 'assets/images/npcs/Mina.png', + requirement: new QuestLineStepCompletedRequirement('Eater of Light', 0, GameConstants.AchievementOption.less), +}); +const SeafolkCaptainMina = new NPC('Captain Mina', [ + 'My trial is in this town. Right there, inside my very own houseboat. Normally you\'d have to clear my trial to find our kahuna on Exeggutor Island, but I guess you took care of some things, huh?', + 'Well, in that case, I\'d better add a little something more. This is the final trial of your island challenge, after all. I hope you\'re ready for your toughest opponents yet!', +], { + image: 'assets/images/npcs/Mina.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eater of Light', 0), new OneFromManyRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 1, GameConstants.AchievementOption.less), new QuestLineStepCompletedRequirement('Typing some Memories', 3, GameConstants.AchievementOption.more)])]), +}); +const LanakilaColress = new NPC('Colress', [ + 'It\'s been a while. You must be a formidable Trainer indeed if you are able to get Necrozma as one of your allies.', + 'Good! And this is from me! The Ultra Recon Squad asked me to develop a device that would be able to control Necrozma. But I improved it to my own liking! And now it is a device that makes it possible to draw out even more power from Necrozma!', + '', + 'Yes, in short, it makes it possible for Necrozma to fuse with the light of the Legendary Pokémon Solgaleo! This is the Colress Machine No. 1198, officially dubbed the N-Solarizer!', + '', + 'In addition, this is the Colress Machine No. 1199, officially dubbed the N-Lunarizer! It makes it possible for Necrozma to fuse with the light of the Legendary Pokémon, Lunala!', + 'If you wish to make use of them, you will require light from Solgaleo and Lunala respectively. I believe that they may drop the crystallised form of this light if you defeat them in battle! I believe each of them will be able to make good use of their own light, as well.', + 'I believe Necrozma may drop a crystal of its own light, as well. Although I doubt it can make any use of it in its current state. Perhaps if it was already fused with the light of Solgaleo or Lunala....', + 'At any rate, I believe that a Trainer like you will be able to use both Alola\'s Legendary Pokémon and the fearsome power of Necrozma properly! I happen to know quite a bit about Pokémon fusion myself... But that is a different tale. Good luck in your battles!', +], { + image: 'assets/images/npcs/Team Plasma (colress).png', + requirement: new ObtainedPokemonRequirement('Necrozma'), +}); +const ReconSquadAltar = new NPC('Ultra Recon Squad', [ + 'Care for a Poipole? It only costs a few thousand Quest Points!', +], { + image: 'assets/images/npcs/specialNPCs/Ultra Recon Squad (all).png', + requirement: new QuestLineStepCompletedRequirement('Eater of Light', 0), +}); +const AetherParadiseAlolaRoamerNPC = new RoamerNPC('Assistant Branch Chief Wicke', [ + 'Some very rare Pokémon have been sighted on {ROUTE_NAME}. I hope we can learn more about them.', +], GameConstants.Region.alola, RoamingPokemonList.findGroup(GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland), 'assets/images/npcs/Assistant Branch Chief Wicke.png'); +const ProfKukui = new ProfNPC('Prof. Kukui', GameConstants.Region.alola, 'This is truly an astounding feat! Congratulations on completing the Pokédex!', 'With that, you can stamp your ticket to the noble Galar region!', 'assets/images/npcs/Professor Kukui.png'); +// Alola Story NPCs +const Lillie1 = new NPC('Mysterious Girl', [ + 'Oh... Oh, thank goodness! So...you\'re also one of the professor\'s acquaintances? It\'s nice to meet you...', + 'I am so grateful to you for helping us out of that dangerous spot. Come on. Into the bag, Nebby.', + 'Oh...um...yes! You can call me Lillie. I know it\'s too much for me to ask it, but... Do you think you could see us back to town?', + 'So you will be taking part in the festival battle? I\'ll be sure to watch you and Hau.', +], { + image: 'assets/images/npcs/specialNPCs/Lillie (nebby).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 0), new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 1, GameConstants.AchievementOption.less)]), +}); +const Lillie2 = new NPC('Return Nebby to Lillie', [ + 'Nebby! Oh thank goodness you\'re safe. Thank you $playername$, let me heal your Poké- No? Um, very well then.', + 'It seems Hau is outside on Route 3. Are you two having another battle?', +], { + image: 'assets/images/npcs/specialNPCs/Lillie (nebby).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 8), new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 9, GameConstants.AchievementOption.less)]), +}); +const Lillie3 = new NPC('Lillie', [ + 'Nebby is... Its real home is far away from here. And I want to help it get home. Thank you for helping me. The two of us will be heading to the next island as well!', + 'Oh, and here, $playername$. Some Revives. It\'s the least I can do after all the running around I\'ve made you do.', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 9), new QuestLineCompletedRequirement('Welcome to Paradise, Cousin!', GameConstants.AchievementOption.less)]), +}); +const Lillie4 = new NPC('Meet with Lillie', [ + 'I think Nebby might be interested in visiting the Ruins of Life. Apparently they house the sacred guardian of Akala Island. I wondered if you\'d like to come with us when we go to visit the ruins. I\'ll be here if you decide you want to come.', + 'By chance, have you spoken to Professor Burnet? She and Professor Kukui have been so kind, helping me investigate Nebby\'s origins. She\'s not here at the moment, but I\'d like introduce you.', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Symbiotic Relations'), new QuestLineStepCompletedRequirement('Symbiotic Relations', 0, GameConstants.AchievementOption.less)]), +}); +const ProfBurnetAlola1 = new NPC('Talk to Professor Burnet', [ + 'Nebby\'s Pokémon species, Cosmog, used to be known as the child of the stars. Its modern name was coined by a researcher in Aether Paradise!', + 'Oh, where are my manners! Hi there! Have some Rare Candies! I\'m Burnet, a professor who researches Ultra Wormholes. They sometimes appear in the skies of Alola and give off similar signals to Cosmog\'s powers.', + 'Legends of Pokémon appearing from the Ultra Wormhole also exist and are called Ultra Beasts, but it\'s all legends and folktales. It\'s hard to know how much is true.', +], { + image: 'assets/images/npcs/Professor Burnet (gen7).png', + requirement: new MultiRequirement([new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Lush Jungle')), new QuestLineStepCompletedRequirement('Symbiotic Relations', 5), new QuestLineStepCompletedRequirement('Symbiotic Relations', 6, GameConstants.AchievementOption.less)]), +}); +const Lillie5 = new NPC('Talk to Lillie', [ + 'There\'s an old book with myths about Alola\'s Legendary Pokémon here. It seems to suggest they came from another world and brought life to an heir that was to be protected by the island guardians.', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Child of the Stars'), new QuestLineStepCompletedRequirement('Child of the Stars', 0, GameConstants.AchievementOption.less)]), +}); +const Lillie6 = new NPC('Lillie', [ + 'Nebby changed forms... and it\'s not moving...', + '', + 'I feel like there\'s so much I have to do now... to save Nebby... to save my mother... That\'s why I\'m going to try my hardest! This is my Z-Powered form! Come on! Let\'s show the world what we can really do!', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 12), new QuestLineStepCompletedRequirement('Child of the Stars', 13, GameConstants.AchievementOption.less)]), +}); +const Gladion1 = new NPC('Gladion', [ + 'The Sun Flute and the Moon Flute. When sounded together, it\'s said that they can call the Legendary Pokémon... That is, if you believe in old myths, anyway. I found one of them downstairs and gave it to Lillie.', + 'Here. Take this Master Ball with you. I\'m counting on you to help Lillie. This is the least I can do.', + 'Even if she is...like that, Lusamine is still our mother. We can\'t just leave her in the beast\'s world.', +], { + image: 'assets/images/npcs/Gladion.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 12), new QuestLineStepCompletedRequirement('Child of the Stars', 13, GameConstants.AchievementOption.less)]), +}); +const HapuHope = new NPC('Hapu', [ + 'My grandfather died suddenly some years back, and we were left without a kahuna on Poni. So I set out on my own sort of island challenge, traveling Alola and trying to grow stronger. Lillie. The kahuna you wished to meet is now here.', + 'There is a ceremony held for the Legendary Pokémon at the Altar of the Sunne and Moone that uses two particular flutes. Ho! You already have the one. The other is said to be held on Exeggutor Island.', +], { + image: 'assets/images/npcs/Hapu.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 0), new QuestLineStepCompletedRequirement('Emissary of Light', 3, GameConstants.AchievementOption.less)]), +}); +const SunFlute = new NPC('Play the Sun Flute', [ + 'Oh my goodness, Nebby! To think you would be the emissary of the sun, Solgaleo!', + '', +], { + saveKey: 'SunFlute', + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 5), new QuestLineStepCompletedRequirement('Emissary of Light', 6, GameConstants.AchievementOption.less), new OneFromManyRequirement([new DayCyclePartRequirement([1]), new DayCyclePartRequirement([2])])]), +}); +const MoonFlute = new NPC('Play the Moon Flute', [ + 'Oh my goodness, Nebby! To think you would be the emissary of the moon, Lunala!', + '', +], { + saveKey: 'MoonFlute', + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 5), new QuestLineStepCompletedRequirement('Emissary of Light', 6, GameConstants.AchievementOption.less), new OneFromManyRequirement([new DayCyclePartRequirement([0]), new DayCyclePartRequirement([3])])]), +}); +const Lillie7 = new NPC('Lillie', [ + 'Nebby... all I ever wanted to do was to help you get back to your own home... But instead you helped me, over and over... I got the chance to finally talk with my mother. Thank you... Thank you so much!', + 'And thank you too, $playername$! You\'ve helped me gain so much confidence in myself. I am very grateful for that. I was able to achieve things I had never dreamed I could... Getting to meet you, traveling together with you... I\'m so glad I got to be part of your journey!', + 'Wait- what is this darkness in the sky? Oh my goodness! $playername$! In the sky! Another Ultra Wormhole!', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 7), new QuestLineCompletedRequirement('Emissary of Light', GameConstants.AchievementOption.less)]), +}); +const Lillie8 = new NPC('Talk to Lillie', [ + 'I...I\'ve been wanting to thank you for saving Nebby that day. Back then I was so desperate... It hasn\'t all been easy... but I\'m really glad that I came to Alola! I\'ve decided I\'m going to become a real Trainer and meet all kinds of wonderful Pokémon!', + 'I\'m going to go back to Aether Paradise for a bit to help my mother recover. I need to see for myself that she\'ll be all right, but before that... $playername$! Won\'t you have a battle with me?', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eater of Light', 0), new QuestLineStepCompletedRequirement('Eater of Light', 2, GameConstants.AchievementOption.less)]), +}); +const LillieSun = new NPC('Lillie', [ + 'At first I\'d taken Nebby with me, but I didn\'t have the courage to protect it myself. But I\'m not that person anymore!', + 'Traveling around Alola with you, learning all the things you knew... And seeing Nebby evolve into Solgaleo under that radiant sun... I\'ll never forget those precious memories, $playername$!', + 'You, Professor Kukui, Professor Burnet, Hau, Hapu, and everyone else... I\'m so glad I got to meet everyone!', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eater of Light', 4), new StatisticRequirement(['npcTalkedTo', GameHelper.hash('SunFlute')], 1, 'Must have played the Sun Flute during Emissary of Light quest line')]), +}); +const LillieMoon = new NPC('Lillie', [ + 'At first I\'d taken Nebby with me, but I didn\'t have the courage to protect it myself. But I\'m not that person anymore!', + 'Traveling around Alola with you, learning all the things you knew... And seeing Nebby evolve into Lunala under that brilliant moon... I\'ll never forget those precious memories, $playername$!', + 'You, Professor Kukui, Professor Burnet, Hau, Hapu, and everyone else... I\'m so glad I got to meet everyone!', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Eater of Light', 4), new StatisticRequirement(['npcTalkedTo', GameHelper.hash('MoonFlute')], 1, 'Must have played the Moon Flute during Emissary of Light quest line')]), +}); +// Optional Story NPCs +// Lillies +const LillieMahaloTrail1 = new NPC('Mysterious Girl', [ + 'H-help... Save Nebby!', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Welcome to Paradise, Cousin!'), new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 0, GameConstants.AchievementOption.less)]), +}); +const LillieMahaloTrail2 = new NPC('Lillie', [ + 'Please... Don\'t tell anyone about this... About seeing Nebby... It\'s...it\'s a secret, OK?', + 'I work as Professor Kukui\'s assistant. He\'s told me to show you around the island, so come along now.', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 1), new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 2, GameConstants.AchievementOption.less)]), +}); +const LillieMelemeleMeadow1 = new NPC('Lillie', [ + 'Nebby! Nebby, come back!', + 'Ah... $playername$...', + 'Nebby ran off into the meadow here... What if a wild Pokémon attacks it? It doesn\'t have any moves it can use to battle!', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 5), new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 8, GameConstants.AchievementOption.less)]), +}); +const LillieMelemeleMeadow2 = new NPC('Lillie', [ + 'Hello, $playername$. Are you done with your battle against Hau on Route 3? We should all head back to Iki Town, now.', +], { + image: 'assets/images/npcs/specialNPCs/Lillie (nebby).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 9), new QuestLineStepCompletedRequirement('Welcome to Paradise, Cousin!', 10, GameConstants.AchievementOption.less)]), +}); +const LillieHeahea = new NPC('Lillie', [ + 'Professor Burnet has been so kind, and she\'s helping me try to find a way to get Nebby back to its own home... She\'s been like...like a real mother to me.', + 'I\'ll be waiting here until you\'re ready to join us to the Ruins of Life. I\'ve heard that there is a group of terrible people called Team Skull who try to steal Pokémon. We need to be careful if we want to escape the notice of such a collection of villains... Isn\'t that right, $playername$?', + 'And Nebby! I\'ll have you stay in your bag, mister!', +], { + image: 'assets/images/npcs/specialNPCs/Lillie (nebby).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Symbiotic Relations', 0), new QuestLineStepCompletedRequirement('Symbiotic Relations', 7, GameConstants.AchievementOption.less)]), +}); +const LillieRuinsOfLife = new NPC('Lillie', [ + 'Nebby seems fond of the ruins for some reason, so I keep visiting them and hoping that maybe I will find some clue to help it get back to its home... But I don\'t have any idea how to do that...', + '$playername$ if it\'s all right with you, I think Nebby and I would like to watch your Grand Trial.', +], { + image: 'assets/images/npcs/specialNPCs/Lillie (nebby).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Symbiotic Relations', 7), new QuestLineStepCompletedRequirement('Symbiotic Relations', 8, GameConstants.AchievementOption.less)]), +}); +const LillieMalie = new NPC('Lillie', [ + 'I ended up getting lost, and then I saw this outfit, and it was the last one they had in stock, so I bought it... Hah...', + 'Beast of sun and beast of moon... That\'s what was written in the book from the library. It must be referring to the legendary Pokémon of Alola. I thought I could find something about Nebby in there but...', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 0), new QuestLineStepCompletedRequirement('Child of the Stars', 3, GameConstants.AchievementOption.less)]), +}); +const LillieAetherHouse = new NPC('Lillie', [ + 'Pokémon being abducted like that... Maybe even hurt... I just can\'t stand the idea! $playername$! Please...help them!', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 5), new QuestLineStepCompletedRequirement('Child of the Stars', 6, GameConstants.AchievementOption.less)]), +}); +const LillieSeafolkVillage = new NPC('Lillie', [ + 'So Hapu lives here on Poni Island? Let\'s go, $playername$! She can help us find the kahuna! It will be good to see her and Mudsdale again!', + 'Poni Island... It\'s a completely different kind of island, isn\'t it?', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Emissary of Light'), new QuestLineStepCompletedRequirement('Emissary of Light', 1, GameConstants.AchievementOption.less)]), +}); +const LillieExeggutorIsland = new NPC('Lillie', [ + 'I\'d seen it in a movie... this man singing and dancing in the rain. I had to try it for myself. Mother was so shocked that she ran right out after me. And then...she smiled... and danced with me. But... then she changed. And I couldn\'t do anything...', + 'But you know what $playername$? Every time in this journey, you\'ve shown me that it\'s possible... to do something.', + 'I don\'t know if it will really summon the Legendary Pokémon, but we can at least try! Thank you for coming this far with me, $playername$!', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 1), new QuestLineStepCompletedRequirement('Emissary of Light', 5, GameConstants.AchievementOption.less)]), +}); +const LillieAltar1 = new NPC('Prepare with Lillie', [ + 'My mother is— She\'s selfish. She lavishes her love only on those she deems worthy, not caring whether it is wanted or not.', + 'But I will save her. I still have something I need to tell her. I am alive. Cosmog is alive.', + 'Nebby. Please. I need to see my mother!', + 'All right, $playername$! Let\'s go!', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 6), new QuestLineStepCompletedRequirement('Emissary of Light', 7, GameConstants.AchievementOption.less)]), +}); +const LillieAltar2 = new NPC('Lillie', [ + 'Necrozma... It seems like it is also suffering somehow... It seems to hurt it, to be without its light...', + '$playername$! Please help Nebby for me! But also... if you can... try to help Necrozma, like you did mother.', +], { + image: 'assets/images/npcs/Lillie (z powered).png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('Emissary of Light'), new QuestLineStepCompletedRequirement('Eater of Light', 0, GameConstants.AchievementOption.less)]), +}); +// Other story characters +const HauAether = new NPC('Hau', [ + 'So the foundation really was working together with Team Skull? Lillie, Gladion, and Lusamine all are a family?! This is, like, way too mind-blowing to think about right now. $playername$! Let\'s knock some skulls together for now!', +], { + image: 'assets/images/npcs/Hau.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 8), new QuestLineStepCompletedRequirement('Child of the Stars', 12, GameConstants.AchievementOption.less)]), +}); +const GladionAether = new NPC('Gladion', [ + 'Mother! You mustn\'t open the Ultra Wormhole. You cannot let the beasts run wild!', + '$playername$! Stop the president!!! If we don\'t, Alola will be flooded with beasts!', +], { + image: 'assets/images/npcs/Gladion (stance).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 9), new QuestLineStepCompletedRequirement('Child of the Stars', 12, GameConstants.AchievementOption.less)]), +}); +const LillieAether = new NPC('Lillie', [ + 'Mother! Do not sacrifice Cosmog for that beast\'s sake! Please... Stop... If Nebby isn\'t— If you make it use up too much of its power... you don\'t understand what will happen! If you use too much of its power, it will die!', +], { + image: 'assets/images/npcs/Lillie.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Child of the Stars', 10), new QuestLineStepCompletedRequirement('Child of the Stars', 12, GameConstants.AchievementOption.less)]), +}); +const HapuMalie = new NPC('Hapu', [ + '$playername$. Been a while, friend. And who might this be?', + '...', + 'Lillie? And she plans to visit Ula\'ula\'s ruins? Well, that\'s some fine initiative. I\'d be happy to show her the way whenever she\'d like to go.', +], { + image: 'assets/images/npcs/Hapu.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Child of the Stars'), new QuestLineStepCompletedRequirement('Child of the Stars', 3, GameConstants.AchievementOption.less)]), +}); +const HapuCanyon = new NPC('Hapu', [ + 'People cannot survive all on their own. They have got to help one another out. Same for Pokémon, too. That is what my grandfather used to say.', + '$playername$... you have done well in guiding Lillie. The path to the shrine is through the canyon.', + 'Look at the two of you. I think this might just work out. No, I am quite sure of it!', +], { + image: 'assets/images/npcs/Hapu.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Emissary of Light', 4), new QuestLineCompletedRequirement('Emissary of Light', GameConstants.AchievementOption.less)]), +}); +const HapuAltar = new NPC('Hapu', [ + 'I was concerned so I ascended. And what do I find but the Legendary Pokémon... and a strange hole in the sky.', + 'I\'ll await your arrival on Exeggutor Island, if training is something you desire before challenging this beast.', +], { + image: 'assets/images/npcs/Hapu.png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('Emissary of Light'), new QuestLineStepCompletedRequirement('Eater of Light', 0, GameConstants.AchievementOption.less)]), +}); +const PhycoAltar = new NPC('Captain Phyco', [ + 'Necrozma...and us ourselves... we have both suffered so many long years in this darkness, living a life we did not wish for...', + 'Our Ultra Megalopolis was once a world filled with light... Necrozma was called the Blinding One, and it gave us all the energy we needed.', + 'Our ancestors were greedy, though. They sought to control all of Necrozma\'s light... They hurt Necrozma... They left it incomplete, and in such a state, it went mad with fury... And so our light was stolen by Necrozma. Now, the one that wields light to its will... It would steal all of Alola\'s light!', +], { + image: 'assets/images/npcs/Phyco.png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('Emissary of Light'), new QuestLineStepCompletedRequirement('Eater of Light', 0, GameConstants.AchievementOption.less)]), +}); +// Rotom-Dex +const RotomDexSun = new NPC('Rotom Dex', [ + 'Zzzzt!!! How\'zzz it going, kiddo? Havin\' fun in the Alolan sun?', +], { + image: 'assets/images/npcs/specialNPCs/Rotom-Dex.png', + requirement: new OneFromManyRequirement([new DayCyclePartRequirement([1]), new DayCyclePartRequirement([2])]), +}); +const RotomDexMoon = new NPC('Rotom Dex', [ + 'Zzzzt!!! How\'zzz it going, kiddo? Feelin\' calm under the Alolan moon?', +], { + image: 'assets/images/npcs/specialNPCs/Rotom-Dex.png', + requirement: new OneFromManyRequirement([new DayCyclePartRequirement([0]), new DayCyclePartRequirement([3])]), +}); +const RotomDexPreChamp = new NPC('Rotom Dex', [ + 'Zzzzt!!! You\'ve almost made it, kiddo! Championship is on the horizzzon! I\'m rootin\' for ya!', +], { + image: 'assets/images/npcs/specialNPCs/Rotom-Dex.png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('Eater of Light'), new GymBadgeRequirement(BadgeEnums.Champion_Stamp, GameConstants.AchievementOption.less)]), +}); +const RotomDexChamp = new NPC('Rotom Dex', [ + 'Congratulationzzz, bucko! You\'re the new reigning Alola Champion! You really are something, kiddo!', +], { + image: 'assets/images/npcs/specialNPCs/Rotom-Dex.png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('Eater of Light'), new GymBadgeRequirement(BadgeEnums.Champion_Stamp)]), +}); +//Silvally Types NPC +const SilvallyGladion1 = new NPC('Gladion', [ + 'Oh, it\'s you. I thought the professor would help when I put my request up at the Bulletin Board, but the Champion\'s even better.', + 'See, my Silvally has been acting strange lately, almost as if it\'s back to being haunted by its traumatizing past, the poor thing. Silvally are unique Pokémon who can download memories from artificial disks to change their type, but my Silvally\'s own memories somehow got mixed in with them. I need to get the disks back and recover its memories. That\'s where you come in.', + 'Silvally has its memories divided in 17 parts and I lost all of them after traveling with it around Alola. Try talking with citizens of all four islands to find out if they know anything about them. If you help me restore its memories I\'ll maybe give you a reward, but don\'t expect any charity. The memories look like this:', + '', + 'Keep an eye out if you come across any of them.', +], { + image: 'assets/images/npcs/Gladion.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 2, GameConstants.AchievementOption.less), new QuestLineStartedRequirement('Typing some Memories', GameConstants.AchievementOption.more)]), +}); +const SilvallyHala = new NPC('Kahuna Hala', [ + 'Greetings, $playername$. May I help you with something? Oh, you\'re looking for things called Silvally Memories? Something like this one?', + '', + 'I found that while getting back here after helping Ilima in the Verdant Cavern. If you need it, I can give it to you. Here it is. Oh, also Kahuna Olivia told me she found one of these on Akala Island somewhere. Maybe you should go and ask her for it too. She\'ll probably give it to you as she also doesn\'t know what it is.', +], { + image: 'assets/images/npcs/Hala.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 1, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 2, GameConstants.AchievementOption.less)]), +}); +const SilvallyOlivia = new NPC('Kahuna Olivia', [ + 'Hey, kiddo. What are you doing here? Just visiting Akala Island? Cus y\'know lots of tourists come here to see the Battle Royal. So, what\'re you doing here? Looking for something?', + 'Oh, you\'re looking for something called a Silvally Memory and Hala told you I found one? Do you mean this thing?', + '', + 'I found it while helping Mallow with her trial. If you want it, you can have it. It\'s useless to me anyway.', +], { + image: 'assets/images/npcs/Olivia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 1, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 2, GameConstants.AchievementOption.less)]), +}); +const SilvallyNanu = new NPC('Kahuna Nanu', [ + 'Oh, hello. How can I help you? You\'re looking for Silvally Memories? What do they look like? Oh, so like a disk with a broken part. I think I have seen one while helping Acerola with her trial. Here, you can take it.', + '', + 'I don\'t know how to use it, so you can keep it.', +], { + image: 'assets/images/npcs/Nanu.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 1, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 2, GameConstants.AchievementOption.less)]), +}); +const SilvallyMina = new NPC('Captain Mina', [ + 'Hello, $playername$. Here to do my trial again? Oh, I see you\'re looking for Silvally Memories. Well, I have just the right thing for you. Here, take it.', + '', + 'Kahuna Hapu gave me that as a gift. She even told me how to use it, but I couldn\'t afford to buy a Silvally. You can keep it.', +], { + image: 'assets/images/npcs/Mina.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 1, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 2, GameConstants.AchievementOption.less)]), +}); +const SilvallyGladion2 = new NPC('Gladion', [ + 'Hey, I see you\'re back. Did you find any Silvally Memories? Oh, I see you found 4 of them, and in surprisingly relevant places too. Let me give them to Silvally.', + 'Gladion uses the 4 memories on Silvally', + 'As for that reward I mentioned, I\'ll put these memories in the Memory Replicator so I can make some Silvally Memories for you. The machine isn\'t powerful enough to create the Memories out of nothing, though. I\'ll be needing you to grab some gems of the Memory\'s type so I can replicate the Memory and insert it into a Silvally for you. It needs some fine-tuning first so the amount needed won\'t be the same after the first trade.', + 'Oh and also, I\'ve heard of more sightings of strange disks across the region. I think they might be the Silvally Memories we\'re looking for. If you\'re ever lost, I got descriptions of them.', + 'I\'ll let you keep the Memories you\'ve found in the meantime so you keep track of your progress.', +], { + image: 'assets/images/npcs/Gladion.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 2, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 16, GameConstants.AchievementOption.less)]), +}); +const SilvallyGladion2Hints = new NPC('Ask Gladion for help', [ + 'Here are the descriptions of them. You should look for:', + 'A blue-haired girl near Brooklet Hill,', + 'A green-haired girl in Lush Jungle,', + 'A black and red-haired guy at the Wela Volcano Park,', + 'A child with orange hair in the Hokulani Observatory,', + 'A dark blue-haired guy that looks like a Veteran inside Mount Lanakila,', + 'And a girl with a Mudsdale on Exeggutor Island Hill.', +], { + image: 'assets/images/npcs/Gladion.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 3, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 16, GameConstants.AchievementOption.less)]), +}); +const LanaSilvally1 = new NPC('Captain Lana', [ + 'Hi, $playername$. How are you doing? I\'m not doing so well right now.', + 'Why, you ask? That\'s because I need a lot of Dungeon Tokens to pay for an amazing rod so I can fish for every single water pokémon! Sadly, it costs too much and I can\'t afford it because I have to take care of my sisters. Oh, you can help me? Thank you, but I have nothing to offer in return.', + 'Have I a seen a Silvally Memory? Yes, I have. If you want it, I could sell it to you. The price is 125 million Dungeon Tokens. I\'ll be here for a long time, so you can get the Dungeon Tokens and come back later if you need to.', +], { + image: 'assets/images/npcs/Lana.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 4, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 6, GameConstants.AchievementOption.less)]), +}); +const MallowSilvally1 = new NPC('Captain Mallow', [ + 'Hey, welcome to the Lush Jungle! How are you doing today? I\'m not so good. I wanted to try a new ingredient to see if it attracts Lurantis, but it costs too much. Like, a lot of Quest Points. I just can\'t afford it.', + 'Oh, you\'re asking if I have a Silvally Memory? You mean from that weird fusion-like Pokémon? Yeah, I do. It has a weird green coloration on it, which weirdly enough reminds me of Pokémon resistant to Electric attacks and weak against Fire attacks.', + 'How about a trade? I will give you the Memory if you give me some Quest Points, how \'bout that? Ok, I\'ll be here in the Lush Jungle for a while, so you can get Quest Points and come back later to do the trade if you need to.', +], { + image: 'assets/images/npcs/Mallow.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 6, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 8, GameConstants.AchievementOption.less)]), +}); +const KiaweSilvally1 = new NPC('Captain Kiawe', [ + 'Hey, good to see ya here. How are you doing? I\'m doing well, but I need some Battle Points. I need to get more materials for a school project, but I\'m not sure how I will get Battle Points in Alola, since the Battle Frontier is only in the Hoenn region. And I don\'t know anyone who could get them and deliver them to me.', + 'Oh, Silvally Memory? The thing that\'s shaped like a disk? I have one right here, but I\'m not sure how it works. Wait, I just got an idea, what about a trade? I\'ll trade the Memory for some Battle Points. I\'ll be here for a while, probably long enough for you to take a trip to the Hoenn region to get some Battle Points.', +], { + image: 'assets/images/npcs/Kiawe.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 8, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 10, GameConstants.AchievementOption.less)]), +}); +const SophoclesSilvally1 = new NPC('Captain Sophocles', [ + 'Hey, $playername$! How are you doing? I\'ve been doing great, except that my equipment is getting old and rusted. I would like to buy some more, but I don\'t have enough money to buy any right now.', + 'So, how can I help you? Oh, you\'re looking for a Silvally Memory? I have been keeping one of them here and doing a little bit of testing to find out how it works. Maybe we could make a trade. I\'ll trade the Silvally Memory for some Pokédollars. I\'ll be trying to figure out how it works, so you can go get Pokédollars and come back later to trade if you need to.', +], { + image: 'assets/images/npcs/Sophocles.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 10, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 12, GameConstants.AchievementOption.less)]), +}); +const VeteranSilvally1 = new NPC('Veteran Aristo', [ + 'Hey, $playername$. Looking for a battle? Hm, ok. Can I say something to you anyway? It will be quick. I want to propose to my girlfriend, but I can\'t afford the ring she really wants. It\'s so expensive, and I feel guilty not being able to give her what she deserves. I don\'t know what to do! Maybe I could pick up some extra work to hire more Miners for some Diamonds.', + 'Anyway what did you want to ask me? Hmm, if I\'ve seen a Silvally Memory anywhere near? Sure, it\'s in my pocket right here. It even is coloured like a diamond! I wish I could trade it for some... hm? You\'re asking if we could do a trade? Sure, I\'ll sell it to you for 1k Diamonds, so I can buy my lovely fiancée-to-be an engagement ring. I\'ll always be here in the same place at all times, we can trade anytime you want.', +], { + image: 'assets/images/npcs/Veteran (male).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 12, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 14, GameConstants.AchievementOption.less)]), +}); +const HapuSilvally1 = new NPC('Kahuna Hapu', [ + 'Hey, $playername$. How\'s it going? Looking for a rematch, or did you come here explore the Poni Island secrets? Oh, I see. You\'re looking for a Silvally Memory. I found a memory in the ground here, so I took it and studied it a bit. All I could find out is that it was from some Silvally. I also found another memory while helping Mina out with her trial. I gave it to her, but I\'m not sure if she found out how it works.', + 'Anyway. Can I ask you something? Do you know any farmers? I\'m needing to plant more palm trees around here on Exeggutor Island but I don\'t have enough Farm Points to buy all the seeds I need. If I got in contact with a farmer I could get them for much cheaper or even free! Oh? You know how to use the Farm? So that means you have a lot of Farm Points, right? Good! How about you give me some of those Farm Points for this Silvally Memory? Ok, I\'ll be here taking care of the Exeggutor for a while so you can come and visit me anytime to do this trade.', +], { + image: 'assets/images/npcs/Hapu.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 14, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 16, GameConstants.AchievementOption.less)]), +}); +const SilvallyGladion3 = new NPC('Gladion', [ + 'I see you\'ve recovered more of the Silvally Memories. Thanks for helping me recover them. Silvally appreciates it too. How did it go, getting them back?', + 'You had to pay for them? Wha- How did you even get that much money? Are you rich? I... Never mind. You\'re doing a great job. Buddy\'s feeling better already. What? No, I said Silvally\'s feeling better already. You must be hearing things. Go find those memories.', + 'Also I\'m not compensating you.', +], { + image: 'assets/images/npcs/Gladion.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 16, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 32, GameConstants.AchievementOption.less)]), +}); +const SilvallyGladion3Hints = new NPC('Ask Gladion for help', [ + 'For the next set of memories I\'ve been keeping an ear out and have heard some rumors:', + 'People from Ula\'ula have seen Guzma walking around Po Town, so I suspect he might\'ve found a Silvally Memory. Go ask him in Po Town.', + 'Melemele Island inhabitants have seen Kahili taking daily walks on Ten Carat Hill, she might\'ve found a Silvally Memory during one of those walks.', + 'Some people from Poni Island have seen Plumeria walking around with some old Team Skull grunts around the Vast Poni Canyon. That is really suspicious, so they probably found something rare or presumably a Silvally Memory.', + 'Ula\'ula Island people have seen Captain Acerola inside the Thrifty Megamart with a Mimikyu carrying a disk-shaped item, which I suspect is a Silvally Memory.', + 'Some people from Akala Island have seen some people in white suits with a lot of boxes travelling to the southwest of the island.', + 'I\'ve heard Molayne wanted to brush up on his training a bit. He\'s at the Royal Avenue, and he\'s also offering a strange reward which I presume is a Silvally Memory.', + 'Also, while I was walking near A Tree Maybe I saw a guy dressed almost like an old Pokémon that doesn\'t exist anymore with a Silvally Memory.', + 'They are all tough trainers, so you might need to train more to defeat them.', +], { + image: 'assets/images/npcs/Gladion.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 17, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 32, GameConstants.AchievementOption.less)]), +}); +const GuzmaSilvally = new NPC('Guzma', [ + 'Huh? What are you doing in here? A what? Silvally Memory? I think I have what you\'re looking for. Yeah, I have it, if you want to see it. Anyways, I was just passing by and decided to visit this place again.', + 'If you need this Memory, let\'s battle. I miss the times when you got in the way of my plans for Team Skull and I used to battle you. I\'m not gonna lose this time.', +], { + image: 'assets/images/npcs/Guzma.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 18, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 20, GameConstants.AchievementOption.less)]), +}); +const KahiliSilvally = new NPC('Kahili', [ + 'Hello there, $playername$! Today is a beautiful day for a walk. I found this disk while walking around. I\'m not so sure what it is, but it\'s an interesting find. What brings you here? Oh, you\'re here looking for this disk. Well, I can give it to you if you beat me in battle! What do you say? Fantastic!', +], { + image: 'assets/images/npcs/Kahili.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 20, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 22, GameConstants.AchievementOption.less)]), +}); +const PlumeriaSilvally = new NPC('Plumeria', [ + 'Well, hey! Look who we have here! It\'s the Champ, wandering all the way into Vast Poni Canyon! You gotta have guts to do that, kid. Not many trainers dare to challenge this place.', + 'Let me guess, you\'re after this Silvally Memory I found around here, aren\'t you? I can tell by the way you carry yourself. You\'re not like the rest of the tourists and challengers who come here just for a sightseeing or a battle. You\'re on a mission, right?', + 'If you want it that bad, you gotta earn it. I won\'t just hand it over to you. I\'m starting from scratch as a Pokémon Trainer and doing it right this time, so you gotta show me what you\'re made of, in a battle. You and your Pokémon against me and mine! Are you up for the challenge, kid?', +], { + image: 'assets/images/npcs/Plumeria (league).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 22, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 24, GameConstants.AchievementOption.less)]), +}); +const AcerolaSilvally = new NPC('Captain Acerola', [ + 'Hey there, $playername$! Have you checked out the trail behind the Thrifty Megamart lately? It\'s been pretty wild! I ventured there the other day and stumbled upon a Mimikyu holding a Silvally Memory. It was quite a challenge to retrieve it, but I managed to befriend it and recover the disk eventually. I love the thrill of exploring new places and discovering new stuff, don\'t you?', + 'But enough about me, what brings you here? Hmm, I can sense that you have a burning desire for something... Ah, it must be the Silvally Memory I found in the trail, am I right? It was a challenge to befriend that Mimikyu holding it. If you want it, you\'ll have to battle me first! Don\'t worry, I won\'t hold back just because we\'re friends. I want to see what you\'re made of! So, what do you say, ready to face the challenge?', +], { + image: 'assets/images/npcs/Acerola.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 24, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 26, GameConstants.AchievementOption.less)]), +}); +const FabaSilvally = new NPC('Aether Branch Chief Faba', [ + 'Oh, welcome $playername$, the Champion of Alola! I see you still haven\'t lost that title. You\'re a pretty... worthy trainer, aren\'t you? Anyways, I think you should come visit us another time we\'re... er.. busy! Yes, we\'re extremely busy right now... ', + 'Oh, you\'re looking for a Silvally Memory? Well I can\'t help you with it so bye! What? You\'re not leaving until I help you? Ugh.. kids are so annoying these days.. er... I mean I\'d gladly help, I\'m just busy right now. LikeISaidTwoSecondsAgo.', + 'Well, I guess you can already tell. We\'ve been in Haina Desert looking for Tapu Bulu, but the search team stumbled upon this Silvally Memory instead and it looks pretty rare because we couldn\'t find much information about it. We want to take it in for some experiments, but we knew you wouldn\'t let us do that so I tried to hide it. Now that you know, my only choice is battling you.', + 'Let\'s make a deal first though: If I defeat you, you\'ll let us do our experiments on that thing and leave us alone forever, but if you defeat me I\'ll give that Memory to you. Sounds like a deal? Then let\'s see if you can take the new Faba!', +], { + image: 'assets/images/npcs/Aether Branch Chief (faba).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 26, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 28, GameConstants.AchievementOption.less)]), +}); +const MolayneSilvally = new NPC('Molayne', [ + 'Hello there, $playername$! Have you perchance caught sight of my advertisement? I\'m on the lookout for a formidable opponent to assist me in honing my Pokémon\'s skills. And let me assure you, the rewards are quite substantial! Should you best me in battle, you shall be granted a most wondrous prize: a Silvally Memory that I found inside the Hokulani Observatory.', + 'As you may already know, I am both a Steel-type expert and a stickler for precision in combat. I desire nothing more than to elevate my team to the utmost degree of mastery. But in order to do so, I must face off against trainers of the highest caliber. That is where you come in, my friend! If you are prepared for the challenge, step forward and engage me in a duel for the ages!', +], { + image: 'assets/images/npcs/Molayne.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 28, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 30, GameConstants.AchievementOption.less)]), +}); +const RyukiSilvally = new NPC('Ryuki', [ + 'Yo, traveler! The name\'s Ryuki! You\'ve come here to battle against a star like me, haven\'t you? No? Why\'s that? I see, you\'re looking for something?', + 'Speaking of which, I stumbled upon a gnarly disk in my travels recently. It was unlike any music disk I had ever seen before, it has a rockin\' dark blue coloration. But for all its uniqueness, I can\'t make out what it is, see?', + 'A Dragon-type Silvally Memory, you say? Rock on! I had a feeling it was something rare and powerful, but I never would have guessed it was a Silvally Memory! But now that I know what I have, I can\'t simply give it to you. I\'m a rock star, not a trial captain! We\'re on stage and the crowd wants a show!', + 'If you want this Silvally Memory, you have to defeat me in a burning hot battle! It won\'t be easy, mind you. My babies are dying to play a set, and I won\'t be holding back! But if you truly have what it takes to be the champion, then you should be up for the challenge, yeah? Right on! Let\'s rock!', +], { + image: 'assets/images/npcs/Ryuki.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 30, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Typing some Memories', 32, GameConstants.AchievementOption.less)]), +}); +const SilvallyGladion4 = new NPC('Gladion', [ + 'Hey there, $playername$! I gotta say, you\'ve done something truly incredible. You\'ve brought back every single one of Silvally\'s lost memories. I expected nothing less from the Champion. I can\'t even imagine how long all that must have taken you. Silvally\'s back to normal and I can\'t thank you enough.', + 'And... seeing my buddy suffer like that made me consider how many new memories I\'ve been taking for granted... I\'m glad to have met you, Hau... everyone. Like Hau said, people can achieve more if they do something together. Thank you for reminding me of that.', + 'I can see what Lillie saw in you now... You\'ve been a true inspiration to me too. I hope our paths cross again someday. Until then... See you around.', +], { + image: 'assets/images/npcs/Gladion.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Typing some Memories', 32, GameConstants.AchievementOption.more), new QuestLineCompletedRequirement('Typing some Memories', GameConstants.AchievementOption.less)]), +}); +//Ultra Beasts NPCs +const RoadsideMotelLooker1 = new NPC('Looker', [ + 'I\'m very grateful that you accepted my invitation. My name is Looker. This here is my boss, Chief Anabel, head of the UB Taskforce.', + 'Ever since the incident at Aether Paradise, where you encountered UB-01 Symbiont, also known as Nihilego, we have heard reports of other Symbiont appearing in Alola. And other types of UBs too.', + 'They came here from a different world. Dropped rudely into our world against their will. We know nothing about them. They could be dangerous. They are almost certainly extremely wary and combative.', + 'We must find a way to calm their nerves. To make them feel at home in our world. Or we must destroy them. Either way, we must understand them. We must catch them.', + 'That is where you come in. The Champion of Alola. We do not have the battle power, but hopefully you do. Please allow Anabel to test your battle ability to ensure that you can handle this job.', +], { + image: 'assets/images/npcs/Looker.png', + requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 1, GameConstants.AchievementOption.less), +}); +const RoadsideMotelAnabel1 = new NPC('Anabel', [ + 'The testing is complete. I see no problem at all with your skills. Rather I would have to praise you for them. Welcome to the team!', + 'There is no more time to waste. UB-01 Symbiont, Nihilego, has been spotted on Akala Island! I will protect the nearby population centers, you must go and confront the Beast!', + 'Looker will stay here to coordinate reinforcements if needed. You can ask him about the special Beast Balls you will be using on this mission. I have given you a couple of them, but they are expensive so you will have to pitch in if you need more.', +], { + image: 'assets/images/npcs/Anabel.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 1, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 4, GameConstants.AchievementOption.less)]), +}); +const RoadsideMotelLooker2 = new NPC('Looker', [ + 'Catching lots of Ultra Beasts? Oh you want to know more about Beast Balls!', + 'Beast Balls can only be used to catch Ultra Beasts. You can\'t even try to use them against normal Pokémon, and any other Poké Ball type won\'t work against Ultra Beasts.', + 'To help you out, I\'ve added an "Ultra Beast" option to the Encounter Type Pokéball filter setting. You can use this to set up a filter just for Ultra Beasts. Don\'t forget to enable it and assign Beast Balls!', +], { + image: 'assets/images/npcs/Looker.png', + requirement: new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 2), +}); +const RoadsideMotelAnabel2 = new NPC('Anabel', [ + 'Congratulations on a job well done. I\'ve had contact with our colleagues at HQ. They have agreed to let you keep the UBs you catch.', + 'I\'m sure the UBs will truly flourish in the company of a competent trainer like yourself. It\'ll be much better for them than being locked up in some stuffy lab. Just be sure to let us know how they are doing.', + 'Now, enough chit-chat. UB-02 Absorption and UB-02 Beauty, Buzzwole and Pheromosa, have been sighted on Melemele Island. You know what to do!', +], { + image: 'assets/images/npcs/Anabel.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 4, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 6, GameConstants.AchievementOption.less)]), +}); +const RoadsideMotelAnabel3 = new NPC('Anabel', [ + 'Congratulations once again. Looker told me he wants to take us to a great restaurant to celebrate. I don\'t know how he knows any restaurants around here, we\'ve only just arrived.', + 'It doesn\'t matter though. There is no rest for us. Captain Mina is here with news, but she insists on battling you before she\'ll tell us anything.', +], { + image: 'assets/images/npcs/Anabel.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 6, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 8, GameConstants.AchievementOption.less)]), +}); +const RoadsideMotelMina = new NPC('Captain Mina', [ + 'Still in tip top shape I see. Good. That means you\'re strong enough to take out this monster I heard about on Akala Island.', + 'According to your little list here its... uhm... this one! UB-03 Lighting. Xurkitree. These are some strange names you guys come up with.', + 'Good luck out there!', +], { + image: 'assets/images/npcs/Mina.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 8, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 10, GameConstants.AchievementOption.less)]), +}); +const RoadsideMotelNanu1 = new NPC('Kahuna Nanu', [ + '...', + 'I let myself in. Hope you don\'t mind.', + 'I\'m here to tell you about sightings of monsters on Ula\'ula Island. I missed some big Kahuna meeting we were all supposed to go to, so I got stuck as the messenger.', + 'It\'s not like I\'ve seen them or anything. Your friend Looker knew them from the description though. UB-04 Blade and UB-04 Blaster he called them. Kartana and Celesteela.', + '...', +], { + image: 'assets/images/npcs/Nanu.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 10, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 12, GameConstants.AchievementOption.less)]), +}); +const RoadsideMotelNanu2 = new NPC('Kahuna Nanu', [ + '...', + 'Good job on rounding up those creatures, kid.', + 'Now, how about one more battle? I insist.', +], { + image: 'assets/images/npcs/Nanu.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 12, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 14, GameConstants.AchievementOption.less)]), +}); +const RoadsideMotelAnabel4 = new NPC('Anabel', [ + 'This is tiring work, but I have a feeling that we\'re almost done.', + 'Looker\'s informants told us about monster sightings on Poni Island. It seems UB Assembly and UB Burst, Stakataka and Blacephalon, have taken up residence.', + 'Please be careful.', +], { + image: 'assets/images/npcs/Anabel.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 14, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 16, GameConstants.AchievementOption.less)]), +}); +const RoadsideMotelAnabel5 = new NPC('Anabel', [ + 'And so here we are. At the end. And back at the beginning.', + 'Our final target is UB-05 Glutton. Guzzlord. It is very dangerous. You must not underestimate this beast.', + 'Ten years ago, a very similar incident occured. Looker and his team were assigned to fight Guzzlord. Nanu was there too. They lost. Looker lost a colleague that day.', + 'After the battle they found something. A strange young girl, alone in the wilderness of Poni Island. They found me. It seems I came from another world as well. Not their world though. These creatures are strange to me too.', + 'I have made myself at home here. I hope Glutton can do the same. Please catch this Guzzlord. End this once and for all.', +], { + image: 'assets/images/npcs/Anabel.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 16, GameConstants.AchievementOption.more), new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 18, GameConstants.AchievementOption.less)]), +}); +const NecrozmaLooker = new NPC('Looker', [ + 'There haven\'t been any new reports of Ultra Beasts in Alola, but I did see something strange over in Ten Carat Hill. It was black, yet shining. It seemed to be fleeing, no doubt about that. Must have been in a weakened state. Was it involved in some kind of battle? If you find it, I doubt it will have much energy left.', +], { + image: 'assets/images/npcs/Looker.png', + requirement: new QuestLineCompletedRequirement('Ultra Beast Hunt'), +}); +const BattleTreeRed = new NPC('Red', [ + '...', +], { image: 'assets/images/npcs/Red-masters.png' }); +const BattleTreeBlue = new NPC('Blue', [ + 'Hello there champ! Fancy seeing you here.', + 'We just planted this sapling here. Maybe it will grow into something great some day.', +], { image: 'assets/images/npcs/Blue-masters.png' }); +// Magikarp Jump NPCs +const MayorKarp = new NPC('Mayor Karp', [ + 'Welcome to the region of Magikarp!', + 'This is a magical place where everybody loves Magikarp!', + 'You\'re good at raising Pokémon, right? We called you here to compete in the ten leagues around the island and pick up our poor Magikarp\'s spirits!', + 'Around these parts, folks love to compete to see whose Magikarp can splash harder and jump higher! No other Pokémon are allowed to compete in these events. So, do your best to raise up some fine Magikarp!', + 'Our island is a special place, home to Magikarp patterns that aren\'t found anywhere else in the world! Collect and raise them all to increase your jump power and take on our league champion!', +], { + image: 'assets/images/npcs/MayorKarp.png', + requirement: new OneFromManyRequirement([new ObtainedPokemonRequirement('Magikarp'), new ObtainedPokemonRequirement('Magikarp (Feebas)')]), +}); +const MagikarpJumpRoamerNPC = new RoamerNPC('Roddy Tackle', [ + 'There are some singularly stunning individuals down at {ROUTE_NAME}! Some Magikarp with real personality!', +], GameConstants.Region.alola, RoamingPokemonList.findGroup(GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump), 'assets/images/npcs/Roddy Tackle.png', new OneFromManyRequirement([new ObtainedPokemonRequirement('Magikarp'), new ObtainedPokemonRequirement('Magikarp (Feebas)')])); +const HoppyManOfMystery = new NPC('Man of Mystery', [ + 'We have been looking for a Shady Salesman.', + 'He is trying to sell overpriced Magikarps to clueless children.', + 'Please keep an eye open for him.', +], { + image: 'assets/images/npcs/Man of Mystery.png', + requirement: new OneFromManyRequirement([new ObtainedPokemonRequirement('Magikarp'), new ObtainedPokemonRequirement('Magikarp (Feebas)')]), +}); +const DrSplash1 = new NPC('Dr. Splash', [ + 'Welcome to my laboratory!', + 'Well... it\'s not much of a laboratory yet. I\'m working on several projects to help Magikarps reach their full potential. Can you help me out?', + 'The first step in unlocking this potential will be to formulate the perfect diet. Can you gather some berries for me to experiment with?', +], { + image: 'assets/images/npcs/Dr Splash.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Dr. Splash\'s Research Project'), new QuestLineStepCompletedRequirement('Dr. Splash\'s Research Project', 1, GameConstants.AchievementOption.less)]), +}); +const DrSplash2 = new NPC('Dr. Splash', [ + 'Thank you for the berries! These should be enough for my experiments.', + 'While you were gone, I was working on optimizing the training regimen for Magikarps. According to my calculations, we are missing a LOT of equipment.', + 'I\'m going to need some sand for sandbags, springs for a jump counter, wood for a pell post, rocks and ice for smashing, a TON of Pokéballs, electricity generation...', + 'There\'s a lot more, but that should get you started.', +], { + image: 'assets/images/npcs/Dr Splash.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Dr. Splash\'s Research Project', 1), new QuestLineStepCompletedRequirement('Dr. Splash\'s Research Project', 3, GameConstants.AchievementOption.less)]), +}); +const DrSplash3 = new NPC('Dr. Splash', [ + 'Wow, that\'s a lot of stuff! This place is starting to look like a proper lab now!', + 'I have discovered that a critical part of any Magikarp training program is pushing other Pokémon around in a field. This form of exercise rounds out the muscle groups and really boosts performance.', + 'According to my calculations, the ideal Pokémon to push around are Dwebble, Boldore, Forretress, Golem, and Steelix. Can you catch or hatch me some?', + 'Steer clear of the Alolan version of Golem, its electrical fields are too dangerous to use.', +], { + image: 'assets/images/npcs/Dr Splash.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Dr. Splash\'s Research Project', 3), new QuestLineStepCompletedRequirement('Dr. Splash\'s Research Project', 5, GameConstants.AchievementOption.less)]), +}); +const DrSplash4 = new NPC('Dr. Splash', [ + 'These Pokémon are perfect! I\'ll put them out back in the training fields.', + 'The last piece of equipment needed is a Tackle Machine. I have a prototype here, but it needs to be calibrated.', + 'Can you take it out for a spin? Defeating a ton of Pokémon should be enough to test it out.', +], { + image: 'assets/images/npcs/Dr Splash.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Dr. Splash\'s Research Project', 5), new QuestLineStepCompletedRequirement('Dr. Splash\'s Research Project', 7, GameConstants.AchievementOption.less)]), +}); +const DrSplash5 = new NPC('Dr. Splash', [ + 'Thank you for all your help!', + 'Now that the laboratory and training program are up and running, I\'ll be very busy!', + 'Please take this Magikarp as a thank you! Train them for greatness!', +], { + image: 'assets/images/npcs/Dr Splash.png', + requirement: new QuestLineStepCompletedRequirement('Dr. Splash\'s Research Project', 7), +}); +const MagikarpEyeShadySalesman = new NPC('Shady Salesman', [ + 'Kid, I have a deal for you! And for you alone. Here\'s your chance. I will sell you the secret Magikarp... For an unbelievable price.', + 'Oh, yeah... Returns not accepted, got that?', +], { image: 'assets/images/npcs/ShadySalesman.png' }); +const FishPolice = new NPC('The Fish Police', [ + 'Stop right there! This is the sacred land of Magikarp Jump. I can tell there is something suspicious about you... Yeah, I see! You have no Magikarp! How did you even make it this far without the best Pokémon, anyway?', + 'In any case, everyone in town will run away from you until you get yourself a Magikarp. So, go catch one, or fish one at the Pond. Then, the residents may be willing to talk to you.', +], { + image: 'assets/images/npcs/Officer Jenny.png', + requirement: new MultiRequirement([new ObtainedPokemonRequirement('Magikarp', true), new ObtainedPokemonRequirement('Magikarp (Feebas)', true)]), +}); +//Alola Towns +TownList['Iki Town Outskirts'] = new Town('Iki Town Outskirts', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_KalosChampion)], + npcs: [IkiOutskirtsMom], +}); +TownList['Iki Town'] = new Town('Iki Town', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [IkiTownShop], { + requirements: [new TemporaryBattleRequirement('Hau 1')], + npcs: [IkiKahuna, SilvallyHala, Lillie3], +}); +TownList['Professor Kukui\'s Lab'] = new Town('Professor Kukui\'s Lab', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new BulletinBoard(GameConstants.BulletinBoards.Alola)], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 18)], + npcs: [ProfKukui, RotomDexSun, RotomDexMoon], +}); +TownList['Hau\'oli City'] = new Town('Hau\'oli City', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [HauoliCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Hau\'oli City']), TemporaryBattleList.Ilima], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Trainers\' School'))], + npcs: [NecrozmaLooker], +}); +TownList['Melemele Woods'] = new Town('Melemele Woods', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new MoveToDungeon(dungeonList['Ruins of Conflict']), new MoveToDungeon(dungeonList['Verdant Cavern']), new MoveToDungeon(dungeonList['Melemele Meadow'])], { + requirements: [new MultiRequirement([new RouteKillRequirement(10, GameConstants.Region.alola, 2), new TemporaryBattleRequirement('Skull 2')])], + npcs: [LagunaKahuna], +}); +TownList['Roadside Motel'] = new Town('Roadside Motel', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [TemporaryBattleList.Anabel, TemporaryBattleList['Captain Mina UB'], TemporaryBattleList['Kahuna Nanu UB'], RoadsideMotelShop], { + requirements: [new QuestLineStartedRequirement('Ultra Beast Hunt')], + npcs: [RoadsideMotelLooker1, RoadsideMotelAnabel1, RoadsideMotelLooker2, RoadsideMotelAnabel2, RoadsideMotelAnabel3, RoadsideMotelMina, RoadsideMotelNanu1, RoadsideMotelNanu2, RoadsideMotelAnabel4, RoadsideMotelAnabel5], +}); +TownList['Heahea City'] = new Town('Heahea City', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [TemporaryBattleList.Dexio, TemporaryBattleList.Sina, HeaheaCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Heahea City']), new DockTownContent()], { + requirements: [new GymBadgeRequirement(BadgeEnums.Melemele_Stamp)], + npcs: [HeaheaCafeOwner, HeaheaGentleman, Lillie4, LillieHeahea, ProfBurnetAlola1, ProfBurnetAlola2], +}); +TownList['Paniola Town'] = new Town('Paniola Town', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [PaniolaTownShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Paniola Town'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 4)], + npcs: [PaniolaTownActor], +}); +TownList['Royal Avenue'] = new Town('Royal Avenue', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [TemporaryBattleList['Battle Royal'], DepartmentStoreShop, TemporaryBattleList['Molayne Steel Memory']], { + requirements: [new TemporaryBattleRequirement('Skull 3')], + npcs: [RoyalAvenueSpectator, MolayneSilvally], +}); +TownList['Konikoni City'] = new Town('Konikoni City', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [KonikoniCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Konikoni City'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 9)], + npcs: [KonikoniKahuna, SilvallyOlivia], +}); +TownList['Aether Paradise'] = new Town('Aether Paradise', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [ + TemporaryBattleList['Ultra Wormhole'], + AetherParadiseShop, + new ShardTraderShop(GameConstants.ShardTraderLocations['Aether Paradise']), + new MoveToDungeon(dungeonList['Aether Foundation']), + TemporaryBattleList['Faba Psychic Memory'], +], { + requirements: [new GymBadgeRequirement(BadgeEnums.Akala_Stamp)], + npcs: [AetherParadiseAlolaRoamerNPC, FabaSilvally, Lillie6, Gladion1, LillieSun, LillieMoon], +}); +TownList['Malie City'] = new Town('Malie City', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [MalieCityShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Malie City']), new MoveToDungeon(dungeonList['Malie Garden']), new DockTownContent()], { + requirements: [new TemporaryBattleRequirement('Ultra Wormhole')], + npcs: [MalieKahuna, SilvallyNanu, Lillie5, LillieMalie, HapuMalie], +}); +TownList['Tapu Village'] = new Town('Tapu Village', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [TapuVillageShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Tapu Village'])], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 13)], + npcs: [TapuWorker], +}); +TownList['Aether House'] = new Town('Aether House', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [TemporaryBattleList['Skull 5'], TemporaryBattleList['Kahuna Nanu']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 13)], + npcs: [YungoosAetherHouse, LillieAetherHouse], +}); +TownList['Seafolk Village'] = new Town('Seafolk Village', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [SeafolkVillageShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Seafolk Village']), new MoveToDungeon(dungeonList['Mina\'s Houseboat']), new DockTownContent(), TemporaryBattleList['Captain Mina']], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Aether Foundation'))], + npcs: [SeafolkCaptain, SeafolkCaptainMina, SilvallyMina, LillieSeafolkVillage], +}); +TownList['Exeggutor Island'] = new Town('Exeggutor Island', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [ExeggutorIslandShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Exeggutor Island']), new MoveToTown('Exeggutor Island Hill', undefined, false)], { + requirements: [new QuestLineCompletedRequirement('Emissary of Light')], +}); +TownList['Altar of the Sunne and Moone'] = new Town('Altar of the Sunne and Moone', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [TemporaryBattleList.Lusamine, TemporaryBattleList.Necrozma, TemporaryBattleList['Ultra Megalopolis'], TemporaryBattleList.Lillie, AltaroftheSunneandMooneShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Altar of the Sunne and Moone'])], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Vast Poni Canyon'))], + npcs: [SunFlute, MoonFlute, LillieAltar1, Lillie7, HapuAltar, PhycoAltar, LillieAltar2, ReconSquadAltar, Lillie8], +}); +TownList['Pokémon League Alola'] = new Town('Pokémon League Alola', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [GymList['Elite Molayne'], GymList['Elite Olivia'], GymList['Elite Acerola'], GymList['Elite Kahili'], GymList['Champion Hau'], pokeLeagueShop()], { + requirements: [ + new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Mount Lanakila')), + ], + npcs: [RotomDexPreChamp, RotomDexChamp], +}); +TownList['A Tree Maybe'] = new Town('A Tree Maybe', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [ATreeMaybeShop, TemporaryBattleList['Ryuki Dragon Memory']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 30)], + npcs: [BattleTreeRed, BattleTreeBlue, RyukiSilvally], +}); +// Magikarp Jump Towns +TownList['Hoppy Town'] = new Town('Hoppy Town', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [new DockTownContent(), new BulletinBoard(GameConstants.BulletinBoards.Hoppy), MagikarpJumpGemTrade], { + requirements: [new QuestLineStartedRequirement('Magikarp Jump')], + npcs: [MayorKarp, MagikarpJumpRoamerNPC, HoppyManOfMystery, DrSplash1, DrSplash2, DrSplash3, DrSplash4, DrSplash5, FishPolice], +}); +TownList['Hoppy Town Fishing Pond'] = new Town('Hoppy Town Fishing Pond', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [new SafariTownContent('Fishing Pond')], { + requirements: [new QuestLineStartedRequirement('Magikarp Jump')], + npcs: [], +}); +TownList['Friend League'] = new Town('Friend League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 31)], +}); +TownList['Quick League'] = new Town('Quick League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [TemporaryBattleList['Magikarp Jump Koylee']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 32)], +}); +TownList['Heavy League'] = new Town('Heavy League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [TemporaryBattleList['Magikarp Jump Karpella'], TemporaryBattleList['Magikarp Jump Karpen']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 33)], +}); +TownList['Great League'] = new Town('Great League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [TemporaryBattleList['Magikarp Jump Tykarp'], TemporaryBattleList['Magikarp Jump Karpress']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 34)], +}); +TownList['Fast League'] = new Town('Fast League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [TemporaryBattleList['Magikarp Jump Karami'], TemporaryBattleList['Magikarp Jump Karson']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 35)], +}); +TownList['Luxury League'] = new Town('Luxury League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [TemporaryBattleList['Magikarp Jump Karpress 2'], TemporaryBattleList['Magikarp Jump Karpen 2'], TemporaryBattleList['Magikarp Jump Karbuck']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 36)], +}); +TownList['Heal League'] = new Town('Heal League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [TemporaryBattleList['Magikarp Jump Skyhopper'], TemporaryBattleList['Magikarp Jump Karpen 3'], TemporaryBattleList['Magikarp Jump Karpella 2']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 37)], +}); +TownList['Ultra League'] = new Town('Ultra League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [TemporaryBattleList['Magikarp Jump Karbuck 2'], TemporaryBattleList['Magikarp Jump Kareign'], TemporaryBattleList['Magikarp Jump Koylee 2']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 38)], +}); +TownList['Elite Four League'] = new Town('Elite Four League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [GymList['E4 League'], TemporaryBattleList['Magikarp Jump Karpress 3'], TemporaryBattleList['Magikarp Jump Karpen 4'], TemporaryBattleList['Magikarp Jump Karpella 3']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 39)], +}); +TownList['Master League'] = new Town('Master League', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [TemporaryBattleList['Magikarp Jump Skyhopper 2'], TemporaryBattleList['Magikarp Jump Tykarp 2']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.alola, 40)], +}); +TownList['Magikarp\'s Eye'] = new Town('Magikarp\'s Eye', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MagikarpJump, [MagikarpJumpShadySalesMan], { + requirements: [new GymBadgeRequirement(BadgeEnums.Master_League)], + npcs: [MagikarpEyeShadySalesman], + ignoreAreaStatus: true, +}); +//Alola Dungeons +TownList['Trainers\' School'] = new DungeonTown('Trainers\' School', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 18)], undefined, { npcs: [TrainerSchoolTeacher] }); +TownList['Hau\'oli Cemetery'] = new DungeonTown('Hau\'oli Cemetery', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 2)], [TemporaryBattleList['Captain Ilima']]); +TownList['Verdant Cavern'] = new DungeonTown('Verdant Cavern', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new MultiRequirement([new RouteKillRequirement(10, GameConstants.Region.alola, 2), new TemporaryBattleRequirement('Skull 2')])], undefined, { npcs: [VerdantCavernIlima] }); +TownList['Melemele Meadow'] = new DungeonTown('Melemele Meadow', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 3)], [new MoveToTown('Seaward Cave', new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Melemele Meadow')), false)], { npcs: [Lillie2, LillieMelemeleMeadow1, LillieMelemeleMeadow2] }); +TownList['Seaward Cave'] = new DungeonTown('Seaward Cave', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Melemele Meadow'))], [new MoveToTown('Melemele Meadow', undefined, false), TemporaryBattleList['Recon Squad 1']]); +TownList['Ten Carat Hill'] = new DungeonTown('Ten Carat Hill', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new GymBadgeRequirement(BadgeEnums.Melemele_Stamp)], [TemporaryBattleList['Kahili Flying Memory']], { + npcs: [KahiliSilvally], +}); +TownList['Pikachu Valley'] = new DungeonTown('Pikachu Valley', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 4)], undefined, { + npcs: [PikachuValleyPikachuGeneric, PikachuValleyAlolaCap, PikachuValleyPikachuWorldCap], +}); +TownList['Paniola Ranch'] = new DungeonTown('Paniola Ranch', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new TemporaryBattleRequirement('Hau 4')]); +TownList['Brooklet Hill'] = new DungeonTown('Brooklet Hill', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new TemporaryBattleRequirement('Gladion 1')], [BrookletHillShop], { + npcs: [LanaSilvally1], +}); +TownList['Wela Volcano Park'] = new DungeonTown('Wela Volcano Park', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 7)], [WelaVolcanoParkShop, TemporaryBattleList['Captain Kiawe']], { + npcs: [KiaweSilvally1], +}); +TownList['Lush Jungle'] = new DungeonTown('Lush Jungle', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 8)], [LushJungleShop, TemporaryBattleList['Captain Mallow'], TemporaryBattleList['Captain Lana']], { npcs: [MossRock, MallowSilvally1] }); +TownList['Diglett\'s Tunnel'] = new DungeonTown('Diglett\'s Tunnel', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new QuestLineStepCompletedRequirement('Symbiotic Relations', 6)]); +TownList['Memorial Hill'] = new DungeonTown('Memorial Hill', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 9)]); +TownList['Malie Garden'] = new DungeonTown('Malie Garden', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [new TemporaryBattleRequirement('Hau 5')]); +TownList['Hokulani Observatory'] = new DungeonTown('Hokulani Observatory', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 22)], [HokulaniObservatoryShop, TemporaryBattleList['Captain Sophocles'], TemporaryBattleList.Molayne], { npcs: [SophoclesSilvally1] }); +TownList['Thrifty Megamart'] = new DungeonTown('Thrifty Megamart', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [new MultiRequirement([new TemporaryBattleRequirement('Skull 5'), new RouteKillRequirement(10, GameConstants.Region.alola, 14)])], [TemporaryBattleList['Acerola Ghost Memory']], { npcs: [AcerolaSilvally] }); +TownList['Ula\'ula Meadow'] = new DungeonTown('Ula\'ula Meadow', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 16)]); +TownList['Po Town'] = new DungeonTown('Po Town', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 17)], [TemporaryBattleList['Guzma Bug Memory']], { npcs: [PoTownNanu, PoTownHomeowner, GuzmaSilvally] }); +TownList['Aether Foundation'] = new DungeonTown('Aether Foundation', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new GymBadgeRequirement(BadgeEnums.Ula_Ula_Stamp)], [ + new GemMasterShop(GameConstants.GemShops.SilvallyTrader, 'Memory Replicator', [new QuestLineStepCompletedRequirement('Typing some Memories', 3)], true), + TemporaryBattleList['Aether Branch Chief Faba'], + TemporaryBattleList['Team Aqua Leader Archie'], + TemporaryBattleList['Team Magma Leader Maxie'], + TemporaryBattleList['Team Galactic Leader Cyrus'], + TemporaryBattleList['Team Flare Leader Lysandre'], + TemporaryBattleList['Team Plasma Leader Ghetsis'], + TemporaryBattleList['Team Rainbow Leader Giovanni'], +], { + npcs: [HauAether, GladionAether, LillieAether, SilvallyGladion1, SilvallyGladion2, SilvallyGladion3, SilvallyGladion4, SilvallyGladion2Hints, SilvallyGladion3Hints], +}); +TownList['Exeggutor Island Hill'] = new DungeonTown('Exeggutor Island Hill', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [new QuestLineStepCompletedRequirement('Emissary of Light', 1)], [ExeggutorIslandHillShop, TemporaryBattleList['Exeggutor Tree']], { npcs: [LillieExeggutorIsland, HapuSilvally1] }); +TownList['Vast Poni Canyon'] = new DungeonTown('Vast Poni Canyon', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [new QuestLineStepCompletedRequirement('Emissary of Light', 3)], [ + new AccessGym(GymList['Exeggutor Island'], new MultiRequirement([new TemporaryBattleRequirement('Recon Squad 3'), new QuestLineStepCompletedRequirement('Emissary of Light', 4, GameConstants.AchievementOption.less)])), + TemporaryBattleList['Recon Squad 3'], + TemporaryBattleList['Plumeria Poison Memory'], +], { npcs: [HapuCanyon, PlumeriaSilvally] }); +TownList['Mina\'s Houseboat'] = new DungeonTown('Mina\'s Houseboat', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [new QuestLineStepCompletedRequirement('Eater of Light', 2)]); +TownList['Mount Lanakila'] = new DungeonTown('Mount Lanakila', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [new TemporaryBattleRequirement('Gladion 3')], [MountLanakilaShop], { + npcs: [IceRock, LanakilaColress, VeteranSilvally1], +}); +TownList['Lake of the Sunne and Moone'] = new DungeonTown('Lake of the Sunne and Moone', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [new GymBadgeRequirement(BadgeEnums.Champion_Stamp)]); +TownList['Ruins of Conflict'] = new DungeonTown('Ruins of Conflict', GameConstants.Region.alola, GameConstants.AlolaSubRegions.MelemeleIsland, [new QuestLineStartedRequirement('Welcome to Paradise, Cousin!')], [TemporaryBattleList['Melemele Spearow']], { + npcs: [Lillie1, LillieMahaloTrail1, LillieMahaloTrail2], +}); +TownList['Ruins of Life'] = new DungeonTown('Ruins of Life', GameConstants.Region.alola, GameConstants.AlolaSubRegions.AkalaIsland, [new TemporaryBattleRequirement('Plumeria 1')], [new AccessGym(GymList['Konikoni City'], new QuestLineStepCompletedRequirement('Symbiotic Relations', 8, GameConstants.AchievementOption.less))], { + npcs: [LillieRuinsOfLife], +}); +TownList['Ruins of Abundance'] = new DungeonTown('Ruins of Abundance', GameConstants.Region.alola, GameConstants.AlolaSubRegions.UlaulaIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 23)]); +TownList['Ruins of Hope'] = new DungeonTown('Ruins of Hope', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 26)], undefined, { + npcs: [HapuHope], +}); +TownList['Poni Meadow'] = new DungeonTown('Poni Meadow', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [new RouteKillRequirement(10, GameConstants.Region.alola, 28)]); +TownList['Resolution Cave'] = new DungeonTown('Resolution Cave', GameConstants.Region.alola, GameConstants.AlolaSubRegions.PoniIsland, [ + new QuestLineStepCompletedRequirement('Ultra Beast Hunt', 17), +]); +//Galar Shops +const PostwickShop = new Shop([ + ItemList.Pokeball, +]); +const WedgehurstShop = new Shop([ + ItemList.Pokeball, + ItemList.Mystery_egg, + ItemList.Wonder_Chest, + ItemList.Miracle_Chest, +]); +const TurffieldShop = new Shop([ + ItemList.Pokeball, + ItemList.Grass_egg, + ItemList.Sweet_apple, + ItemList.Tart_apple, + ItemList.Leaf_stone, + ItemList.Sun_stone, +]); +const HulburyShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Water_egg, + ItemList.Water_stone, + ItemList.Kings_rock, + ItemList.Prism_scale, + ItemList.Deepsea_tooth, + ItemList.Deepsea_scale, +]); +const MotostokeShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Fire_egg, + ItemList.Fire_stone, + ItemList.Linking_cord, + ItemList.Magmarizer, +]); +const HammerlockeShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Event_calendar, + ItemList.Dragon_egg, + ItemList.Metal_coat, + ItemList.Upgrade, + ItemList.Dragon_scale, +]); +const StowonSideShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Fighting_egg, + ItemList.Soothe_bell, + ItemList.Dawn_stone, + ItemList.Dubious_disc, + ItemList.Reaper_cloth, +]); +const GlimwoodTangleShop = new Shop([ + ItemList['Zarude (Dada)'], +], 'Zarude Village', [new QuestLineCompletedRequirement('Secrets of the Jungle')]); +const BallonleaShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Cracked_pot, + ItemList.Moon_stone, + ItemList.Shiny_stone, + ItemList.Sachet, + ItemList.Whipped_dream, +]); +const CirchesterShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Razor_claw, + ItemList.Razor_fang, + ItemList.Protector, + ItemList.Ice_stone, +]); +const SpikemuthShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Electric_egg, + ItemList.Thunder_stone, + ItemList.Dusk_stone, + ItemList.Electirizer, +]); +const WyndonShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.SmallRestore, + ItemList.MediumRestore, + ItemList.LargeRestore, + ItemList.xAttack, + ItemList.xClick, + ItemList.Lucky_egg, + ItemList.Token_collector, + ItemList.Dowsing_machine, + ItemList.Lucky_incense, +]); +const MasterDojoShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Galarica_cuff, + ItemList.Galarica_wreath, +]); +const FreezingtonShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, +]); +//Galar NPCs +const PostwickMum = new NPC('Mum', [ + 'Don’t go too far into the Slumbering Weald.', + 'I’ve heard there are some very strong Pokémon in there.', + 'Only those who beat the champion are strong enough to face them!', +]); +const WedgehurstRailStaff = new NPC('Rail Staff', [ + 'There are some areas around Galar that you can only reach after beating the Champion.', + 'One is an island paradise, the other a freezing wasteland.', + 'I’m sure if you go to these places you’ll find many unique and powerful Pokémon!', +], { image: 'assets/images/npcs/Rail Staff.png' }); +const AssistantHenry = new NPC('Assistant Henry', [ + 'There are many Pokémon in Galar that I heard look completely different in other regions of the world! They can also evolve in unique ways!', + 'I know that reckless one, Linoone, will only evolve during the night time here. But, I also think I’ve seen its evolution wandering across the lake if you have a way to cross.', +]); +const BattleCafeMaster = new NPC('Battle Café Master', [ + 'Milcery can evolve when you spin around with it, while treating it to a Sweet.', + 'For example, you can whip up a Vanilla Alcremie, by spinning clockwise for less than 5 seconds, during the day. Piece of cake! There’s a unique form for each Sweet under this circumstance, so bake it till you make it!', + 'There are more tiers to Alcremie than I can count. Mix up the direction, duration, time of day, and the given Sweet to discover all the flavours there are to find.', + 'I will suggest that you only do 3 spins a day if you don’t want to end up sick! You might be able to try more, when you get more experienced with a flavour...', + 'Stop by the Battle Café, we sell all the Sweets you’ll need!', +], { image: 'assets/images/npcs/BattleCafeMaster.png' }); +const MotostokeArtist = new NPC('Artist Duncan', [ + 'My Kantonian Farfetch’d would never evolve no matter how many fresh Leeks I gave it.', + 'Lo and behold, here in Galar the Farfetch’d wield thick, tough leeks for battle!', + 'Once my Galarian Farfetch’d was holding a Leek.. Blimey, I was surprised how quickly he transformed into a noble ally! With the Leek growing into a mighty stalk for battle!', +], { image: 'assets/images/npcs/Artist (Gen 8).png' }); +const TurffieldCook = new NPC('Cook Stuart', [ + 'I love Sweet and Tart Apples! Oh, this is Applin! He isn’t a snack, but helps me make all sorts of dishes!', + 'Applin absolutely loves Sweet and Tart treats.', + 'But, I could never give Applin a Sweet or Tart Apple, that just seems so... wrong...', + 'I can’t be missing out on much anyways, what could be more perfect than my Applin!', +], { image: 'assets/images/npcs/Cook.png' }); +const Meteorologist = new NPC('Meteorologist', [ + 'The Pokémon in the Wild Area are very finicky, and many of them only appear in certain weathers.', + 'I\'ve also heard that the Pokémon in the Isle of Armor to the East, and the Crown Tundra to the South, are also like this.', + 'There are even some Pokémon, namely Cramorant and Eiscue, that only appear in certain forms depending on weather.', +]); +const HammerlockeHiker = new NPC('Hiker Donald', [ + 'Have you spotted a blue bird walking around with an Arrokuda in its throat? It’s quite a daft Pokémon, but it sure is hungry! I guess if it trains near water it tries to swallow Arrokudas, but they always get stuck in its throat.', + 'My mate told me a story of a Pikachu getting lodged in the gluttonous bird’s gullet while it was gorging in a thunderstorm! But that sounds ridiculous! How would it not be bothered by the big rat in its throat? It would drive me mad.', +], { image: 'assets/images/npcs/Hiker (Gen 8).png' }); +const WyndonBattleCafeRichard = new NPC('Richard', [ + 'This might sound cheesy, but I love Milcery so much! I wasn\'t sure which Alcremie form I liked the most, so I just grabbed a Sweet at random and started to spin and spin for what seemed like an hour.', + 'I saw my partner liked it a lot! Maybe you should try the same one day!', +]); +const AncientMural1 = new NPC('Ancient Mural', [ + 'It’s Stow-on-Side’s famous mural.', + 'It’s said to be a very deep work of art...', +], { + image: 'assets/images/npcs/other/Ancient Mural.png', + requirement: new QuestLineStepCompletedRequirement('The Darkest Day', 1, GameConstants.AchievementOption.less), +}); +const AncientMural2 = new NPC('Ancient Mural Ruins', [ + 'It’s the statues that were hidden behind Stow-on-Side’s famous mural.', + 'They depict two heroes and two Pokémon.', +], { + image: 'assets/images/npcs/other/Ancient Mural Ruins.png', + requirement: new QuestLineStepCompletedRequirement('The Darkest Day', 1), +}); +const StowonSideSonia = new NPC('Sonia', [ + 'Not a brilliant turn of events, but the ruins were brought into the light for us to see...', + 'What does this tell us about Galar’s legends? More than any hero, there’s those things that appear to be Pokémon that stand out!', + 'Not just that, but those Pokémon appear to be holding a sword and shield as if they were using them!', + 'More than any statue of a hero or old tapestry, these ruins made in truly ancient times must show us the real truth.', + 'Seems like at some point in history the sword and shield were combined with the two actual Pokémon and treated as the same thing...', + 'Two young heroes... The sword and shield were actually Pokémon... But why would the truth of these ruins be hidden when their stories were depicted in artwork?', +], { + image: 'assets/images/npcs/Sonia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Darkest Day', 1), new QuestLineStepCompletedRequirement('The Darkest Day', 3, GameConstants.AchievementOption.less)]), +}); +const Archaeologist = new NPC('Archaeologist', [ + 'I\'ve been studying the Galarian form of Yamask.', + 'It seems they do not evolve into Galarian Cofagrigus, but a completely different Pokémon instead.', + 'For some mysterious reason, they only evolve when trained in a specific area of the wild area known as the Dusty Bowl.', +], { image: 'assets/images/npcs/Ruin Maniac.png' }); +const HerosBath = new NPC('Hero’s Bath', [ + 'The ancient Hero’s Bath.', + 'They say this is where the two heroes came to soothe their wounds after the battle to bring down that evil presence, long ago.', +], { image: 'assets/images/npcs/other/HerosBath.png' }); +const CirchesterHop = new NPC('Hop', [ + 'Based on the statues the sword and shield must have actually been two Pokémon, right?', + 'You remember the Pokémon we met in the Slumbering Weald?', + 'Do you think...it could’ve been one of them? I mean the sword or the shield Pokémon?', + 'Perhaps when their duty was completed, they went into some kind of sleep?', +], { + image: 'assets/images/npcs/Hop.png', + requirement: new MultiRequirement([new TemporaryBattleRequirement('Hop 7'), new QuestLineStepCompletedRequirement('The Darkest Day', 6, GameConstants.AchievementOption.less)]), +}); +const CirchesterSonia = new NPC('Sonia', [ + 'Hmm... Who exactly were the heroes that bathed here?', + 'Nowadays only Pokémon really use the Hero’s Bath...', + 'I think I’ll have to look more into the history of the Slumbering Weald.', +], { + image: 'assets/images/npcs/Sonia.png', + requirement: new MultiRequirement([new TemporaryBattleRequirement('Hop 7'), new QuestLineStepCompletedRequirement('The Darkest Day', 6, GameConstants.AchievementOption.less)]), +}); +const CirchesterGuitarist = new NPC('Guitarist Justin', [ + 'I caught this Snom on Steamdrift Way and we’ve become really good mates.', + 'I thought that friendship was all Snom needed to evolve, but I kept trying to give it a Soothe Bell during the day and nothing happened!', + 'I’m too busy playing gigs to scamper around with Snom in the evening!', +], { image: 'assets/images/npcs/Guitarist (male).png' }); +const TeamYellGrunts = new NPC('Team Yell Grunts', [ + 'Our Marnie’s Morpeko is so cute, don’tcha think?', + 'When it’s hungry, though, it gets so angry it changes forms.', + 'If you want to catch it in that form, you would probably be best trying to attract it with a berry that electric Pokémon like.', +], { image: 'assets/images/npcs/Team Yell Grunts.png' }); +const RoseBroadcast = new NPC('Broadcast of Chairman Rose', [ + 'Hello there, Leon! Just letting you know...', + 'I think it\'s time I brought about the Darkest Day. For the sake of Galar\'s future, of course!', + 'But I\'m in a bit of a pickle. The energy released by the Darkest Day is too much for us to contain.', + 'I\'m sorry it\'s come to this. But it\'s you who forced my hand, Leon. You refused to listen!', +], { + image: 'assets/images/npcs/Macro Cosmos (rose).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Darkest Day', 10), new QuestLineStepCompletedRequirement('The Darkest Day', 12, GameConstants.AchievementOption.less)]), +}); +const WyndonHop = new NPC('Hop', [ + 'That video stream... That was from Hammerlocke Stadium, right? What in the world did the chairman do...?', + 'I want to help my brother! I\'ve got to! But I can\'t even manage to beat you, so what sort of help could I ever be...?', + 'Hold the phone... The chairman was talking about the Darkest Day. That\'s the thing where the sky went all dark once, ages and ages ago, right? What does he mean, he\'s bringing that about? And where did we even hear that name...?', + 'Ah! That statue of the hero in Motostoke! Sonia said something back then, didn\'t she... Though it turned out to be wrong, since there were actually two heroes and all that.', + 'Still! Those two managed to bring an end to the Darkest Day with the sword and shield Pokémon! Sonia thought the Pokémon might still be sleeping somewhere though, right?', + 'That\'s it! I\'m sure it\'s got to be the Slumbering Weald! Those illusions you tried to fight off that day—they must\'ve been the Pokémon that are supposed to be sleeping there!', + 'Let\'s go back to the Slumbering Weald! If we\'re lucky, we\'ll find something that can help!', +], { + image: 'assets/images/npcs/Hop.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Darkest Day', 11), new QuestLineStepCompletedRequirement('The Darkest Day', 13, GameConstants.AchievementOption.less)]), +}); +const SlumberingHop1 = new NPC('Hop', [ + 'Would you take a look at that! Now that\'s something you don\'t see every day... This place definitely feels like the stuff of legend. See that! The sword and the shield! The legends really were true!', + 'That settles it! We\'re taking the sword and shield. Though...wow, would you look at the state of these things? They seem like they might fall to pieces if you so much as look at \'em funny.', + 'I don\'t know if these rusty old things will really be able to stop the Darkest Day, but... Well, I guess it can\'t hurt to have them along! Let\'s hope they bring us some good luck!', + 'Maybe the Pokémon themselves really are still asleep somewhere. So it seems we\'re on our own if we want to go help Lee. This is all the help we\'ve got!', +], { + image: 'assets/images/npcs/Hop.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Darkest Day', 13), new QuestLineStepCompletedRequirement('The Darkest Day', 15, GameConstants.AchievementOption.less)]), +}); +const EnergyPlantRose = new NPC('Chairman Rose', [ + 'Most impressive! I wouldn\'t expect any less from a challenger endorsed by the strongest Champion ever to grace our beloved Galar region!', + 'I really do wish I could have seen the Championship Match between you two. And I\'m terribly sorry to have ruined the whole Gym Challenge and everything!', + 'It\'s too bad, but it can\'t be helped... In order to solve the energy issue as soon as possible, we awakened Eternatus. But we couldn\'t control it. The Champion came to aid me, even at the cost of abandoning the match. Indeed, just like a knight in shining armor coming to rescue a princess from a dragon!', + 'I do tend to ramble on, I know. I love to make speeches. But I think I can stop talking now. I think the Champion should have captured Eternatus by now. If you\'re curious, you can take the lift up.', + 'And I trust you\'ll be going too, right, Hop? I certainly hope losing to me didn\'t discourage you too much. Go on now, both of you! Go see how our Champion is doing!', +], { + image: 'assets/images/npcs/Macro Cosmos (rose).png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Darkest Day', 15), new QuestLineStepCompletedRequirement('The Darkest Day', 17, GameConstants.AchievementOption.less)]), +}); +const EternatusCatch = new GiftNPC('Catch Eternatus', [ + 'You caught Eternatus!', +], () => { + App.game.party.gainPokemonByName('Eternatus'); +}, 'assets/images/pokemon/890.png', { saveKey: 'eternatuscatch', requirement: new MultiRequirement([new TemporaryBattleRequirement('The Darkest Day'), new ObtainedPokemonRequirement('Eternatus', true)]) }); +const Leon = new NPC('Leon', [ + 'My matches are always sold out, but this... I\'ve never seen a crowd this wild!', + 'Everyone knows what you did for us this week... They know you\'re the one who caught Eternatus and saved the future of the Galar region.', + 'A real hero, who battled alongside the Legendary Pokémon, Zacian and Zamazenta... I couldn\'t have dreamed of a better challenger to help increase my winning streak!', + 'Now that I\'ve seen just what kind of strength you possess as the greatest of challengers...crushing you into the dirt will show everyone just how strong their Champion truly is!', + 'Come on, now! Let\'s make this a final match that\'ll go down in Galar\'s history! No! A match that\'ll change Galar forever!', + 'We\'re gonna have an absolutely champion time!', +], { + image: 'assets/images/npcs/Leon.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Darkest Day', 18), new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion, GameConstants.AchievementOption.less)]), +}); +const SlumberingHop2 = new NPC('Hop', [ + 'Huh? What\'re you doing here in the woods? Nobody ever comes in here, since this is the forest where Zacian and Zamazenta rested. It\'s the best place to do a bit of thinking, since it\'s so quiet and all.', + 'Oh, but I hadn\'t had the chance to tell you! Congrats on your victory! Honestly... I never thought you\'d manage to beat my brother. The greatest Champion Galar ever had! He was undefeatable till you came around! It\'s actually still pretty hard to believe...', + 'Really... You\'re amazing. So amazing, maybe, that I don\'t even realize just how amazing you really are!', + 'So, do you think... Would you be up for one more battle?', +], { + image: 'assets/images/npcs/Hop.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Sword and Shield'), new QuestLineStepCompletedRequirement('Sword and Shield', 1, GameConstants.AchievementOption.less)]), +}); +const SordwardShielbert1 = new NPC('Sordward & Shielbert', [ + 'Well, well, well... I thought I heard someone making some noise over this way!', + 'I am Sordward!', + 'I am Shielbert!', + 'We are the new kings of Galar! We\'re descendents of the first kings!', + 'More than that, we\'re celebrities!', + 'Well, well, well! Could these things here be the fabled sword and shield?', + 'Well, well, well! They certainly are dirty! They must be fake! I fear to touch them with my bare hands.', + 'Oh, you want us to return them? Then perhaps we should settle this with a battle?', +], { + image: 'assets/images/npcs/Sordward & Shielbert.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Sword and Shield', 1), new QuestLineStepCompletedRequirement('Sword and Shield', 3, GameConstants.AchievementOption.less)]), +}); +const SordwardShielbert2 = new NPC('Sordward & Shielbert', [ + 'We know all the Wishing Stars that Chairman Rose had gathered are here. We celebrities have an advanced level of insight into such things!', + 'You non-celebrities are not suited to having such valuable things. Hand them over to us.', + 'You wish to keep them from us? No matter. This time we\'ve brought much stronger Pokémon to thoroughly trounce you with!', +], { + image: 'assets/images/npcs/Sordward & Shielbert.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Sword and Shield', 6), new QuestLineStepCompletedRequirement('Sword and Shield', 8, GameConstants.AchievementOption.less)]), +}); +const SordwardShielbert3 = new NPC('Sordward & Shielbert', [ + 'Well, well, well? It seems you have rescued the stadiums from their perils. As expected of the Champion.', + 'You want to know why we have been forcing those Pokémon to rampage? We did it in order to expose the true nature of Zacian and Zamazenta!', + 'We have always been revered as the resplendent descendents of the real hero...', + 'It\'s all because you ruffians had to go and save Galar from Eternatus!', + 'You said that the real heroes were Pokémon! You just carelessly changed history!', + 'What does that mean we are? You dare say that our esteemed ancestors were liars?', + 'It\'s obvious that the old history was better! It was right!', + 'To suddenly start creating heroes left and right... It\'s complete rubbish!', + 'Ahem... If you want to take the lift up, you\'ll have to defeat us! This time we will show you the opulent Pokémon we have raised explicity for this battle!', +], { + image: 'assets/images/npcs/Sordward & Shielbert.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Sword and Shield', 13), new QuestLineStepCompletedRequirement('Sword and Shield', 15, GameConstants.AchievementOption.less)]), +}); +const SordwardShielbert4 = new NPC('Sordward & Shielbert', [ + 'Fwahaheho! We did it! Zacian and Zamazenta came, following after the Rusted Sword and Shield!', + 'Yes! Expose your true, barbaric, brutish nature...and reveal to us exactly who the false kings are!', + 'W-wait! D-don\'t attack us! Go into town, and sow as much destruction as you can!', +], { + image: 'assets/images/npcs/Sordward & Shielbert.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Sword and Shield', 15), new QuestLineStepCompletedRequirement('Sword and Shield', 17, GameConstants.AchievementOption.less)]), +}); +const Piers = new NPC('Piers', [ + 'As expected of the Champion... You took complete control of the situation.', + 'Plus it looks like those Pokémon are waiting for you, now they\'re calmed down an\' all.', +], { + image: 'assets/images/npcs/Piers.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Sword and Shield', 17), new QuestLineStepCompletedRequirement('Sword and Shield', 19, GameConstants.AchievementOption.less)]), +}); +const EnergyPlantHop = new NPC('Hop', [ + 'Huh? Oh, hi. I forgot to say, congrats on catching Zacian and Zamazenta!', + 'Y\'know, Zacian and Zamazenta got the Rusted Sword and the Rusted Shield back, right?', + 'But when you caught them, neither were using them. But they must still have them, right?', + 'So.... Maybe if you keep defeating them, they\'ll occasionally drop them?', +], { + image: 'assets/images/npcs/Hop.png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('Sword and Shield')]), +}); +const SouthGalarRoamerNPC = new RoamerNPC('Professor Sonia', [ + 'I’ve heard there’s been sightings of a never-before-seen, super strong Pokémon on {ROUTE_NAME}! You should go check it out!', +], GameConstants.Region.galar, RoamingPokemonList.findGroup(GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar), 'assets/images/npcs/Professor Sonia.png'); +//Isle of Armor NPCs +const IsleofArmorRoamerNPC = new RoamerNPC('Master Dojo Student', [ + 'One of the other students said they saw a rare Pokémon on {ROUTE_NAME}. Might be worth having a look.', +], GameConstants.Region.galar, RoamingPokemonList.findGroup(GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor), 'assets/images/npcs/Master Dojo.png'); +const Mustard1 = new NPC('Mustard', [ + '... ... ... Why hello there! My name is Mustard! I\'m rather good at Pokémon battles, you know! I\'m pleased as cheese that you could join us!', + 'Yaaay! This is my favorite part! I wanna see just how good you are! So, why not have a battle with little old me? Just say the word when you\'re ready!', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Dojo\'s Armor'), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 1, GameConstants.AchievementOption.less)]), +}); +const Mustard2 = new NPC('Mustard', [ + 'Bah ha ha! I lost! You\'re pretty strong, aren\'t you? The way you battle really shows me how much you care about your Pokémon! Even if you\'ve come because of a misunderstanding, as long as you have a will to learn... then you\'re welcome at the Master Dojo! I think we can all help each other become stronger! I\'m happy you\'ve come to join us!', + 'Now then! The dojo\'s at max capacity! It\'s time to really start our training! You\'ll all be facing three trials. And there\'s more! The person who completes the three trials will receive the secret armor of this dojo!', + 'For the first trial, my students... You\'ve all gotta defeat 6 of those fast Galarian Slowpoke, trained with care by little old me! But that\'s not all... You need to catch them, too!', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 1), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 3, GameConstants.AchievementOption.less)]), +}); +const Mustard3 = new NPC('Mustard', [ + 'Well mustered! You cleared the first trial like it was nothing! Why, I think this is the first time since Leon that someone was able to handle all six fast Slowpoke on their own! The rest of you tried very hard, too! You were able to catch up to the Slowpoke, but I guess you couldn\'t defeat them.', + 'Tell you what. Anyone who was able to catch up to a Slowpoke at least once gets a pass! Our new student here really outdid themselves, so it\'s only fair everyone else gets another chance. Try to make a comeback, everybody!', + 'And for your second trial we have mushroom picking! I\'m tasking you with finding three Max Mushrooms! They are red with a spiral pattern. I\'m pretty sure they grow in dark, humid places! And with that, your next trial begins! I\'m countin\' on ya!', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 3), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 4, GameConstants.AchievementOption.less)]), +}); +const Mustard4 = new NPC('Mustard', [ + 'Hey! My bad, my bad! It just dawned on me that you\'re brand-new to the Isle of Armor! I bet you have no idea where to even begin looking for Max Mushrooms! C\'mon--let\'s go for a walk, and I\'ll show you some mushroom hot spots.', + 'Dum dum dee dee... La la de daaa... Now, usually the Forest of Focus is chock-full of Max Mushrooms. But the thing is, a swarm of Greedent came through and ate every last one here! So I\'m thinking maybe you\'ll have more luck finding Max Mushrooms if you go check Warm-Up Tunnel.', + 'It\'s out on the other side of the forest! Just watch where you\'re going in the forest, \'K? It\'s easy to get lost! Anyhoo... Good luck with the hunt for Max Mushrooms! Catch you back at the dojo!', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 4), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 7, GameConstants.AchievementOption.less)]), +}); +const Klara1 = new NPC('Klara', [ + 'Hold up a sec! *wheeze*... *wheeze*... Hellooo, what\'s this?! Three Max Mushrooms in one spot? Here I thought I\'d need to go find them one by one! I saw those mushrooms first! I swear! I\'ve been at the dojo longer and all. Sooo... It\'s only fair you let me have \'em. Riiight?', + 'Waaait... What\'s this, now? Are you givin\' me attitude? Pityin\' me, are you?! Gosh, you\'re such a pain in the neck... You just show up outta nowhere, and just happen to be young and talented... If you\'re looking to get in my way, well, I think some vile poisons will take care of that!', +], { + image: 'assets/images/npcs/Klara.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 5), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 7, GameConstants.AchievementOption.less)]), +}); +const Avery1 = new NPC('Avery', [ + 'Wait just one moment! *pant*... *pant*... Hah! Just as I expected! Multiple Max Mushrooms growing in a bunch! My psychic powers picked up on these Max Mushrooms eons before you found them. I believe I should be the first one to get those Max Mushrooms. First come, first served, and all!', + 'What\'s this? Are you trying to show you\'re stronger than me? How distasteful! I find your presence most disturbing! You show up at the dojo unannounced and go on to show such talent, even though you\'re still so young... You dare get in my way? I warned you about my psychic powers, and now you\'ll experience them firsthand!', +], { + image: 'assets/images/npcs/Avery.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 5), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 7, GameConstants.AchievementOption.less)]), +}); +const Mustard5 = new NPC('Mustard', [ + 'Hey there! Welcome back! Looks like you nailed the trial! Congrats on finding the Max Mushrooms! Trial number two was no problem for you!', + 'All my other students ended up getting lost in the forest... Turns out finding Max Mushrooms was the least of their problems! It\'s a shame, but I guess everyone other than you will fail the trial...', + 'Oh! Klara and Avery! You two look out of breath... But you have some Max Mushrooms, so it looks like you both pass the second trial as well!', + 'Right! Well, I\'ve decided that you three... will now take the Master Dojo\'s...final...last...ultimate...third trial!', + 'You three are the only ones who successfully finished the second trial! You\'ve pushed each other to greater heights and helped each other grow. So I\'d say it\'s time to finally see who is stronger... in a Pokémon battle!', + 'Yep! The rules are simple. Whoever wins will complete the trial! The winner will be granted the secret armor of the Master Dojo!', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 7), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 10, GameConstants.AchievementOption.less)]), +}); +const Klara2 = new NPC('Klara', [ + 'You are here.', + 'When I beat you, I\'ll get the secret armor... and then I\'ll become a Poison-type Gym Leader! I\'ve got to win, no matter what.. I\'m gonna go all out and totally beat you. You ready?', + 'I\'m not holding a single thing back anymore. Time to settle this-fair and square! Oh, and maybe watch your step... Looks like some Toxic Spikes somehow got on the Battle Court!', +], { + image: 'assets/images/npcs/Klara.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 8), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 10, GameConstants.AchievementOption.less)]), +}); +const Avery2 = new NPC('Avery', [ + 'So, you\'ve come at last.', + 'Defeating you will grant me the secret armor...then I will at last have what I need to become a Psychic-type Gym Leader! No matter what it takes, I refuse to accept anything but a complete and utter victory... I\'m coming at you with everything I have.', + 'Heh. Let us have an elegant battle worthy of being called a finale. Prepare to sink into despair...and into the weird battlefield beneath your feet!', +], { + image: 'assets/images/npcs/Avery.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 8), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 10, GameConstants.AchievementOption.less)]), +}); +const Mustard6 = new NPC('Mustard', [ + 'The victor has been decided! The one to complete the third trial is you, our newest student! You gave it your best and triumphed, even when faced with an unfair challenge. To you, who has completed all the trials... I grant the secret armor of the Master Dojo!', + 'Now then... Come on out! This Pokémon is in fact the secret armor of the Master Dojo! Say hello to...Kubfu!', + '', + 'I know... I know... It\'s tiny... But raise it with diligence, and it\'ll become strong enough to see you through any battle, just like a suit of armor. No opponent will be able to get past it!', + 'Now, I give you permission to catch it!', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 10), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 12, GameConstants.AchievementOption.less)]), +}); +const Mustard7 = new NPC('Mustard', [ + 'Good! Now then... The first thing for you to do is become best friends with Kubfu! You need to build trust! Kubfu hasn\'t really had a chance to explore the world outside the dojo, so... Maybe it\'ll help you become better friends if you train alongside it!', + 'Hmm. Maybe you should train against Dark and Water-types. It will be useful for it to know their weaknesses, since they will be its own weaknesses when it evolves.', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 12), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 14, GameConstants.AchievementOption.less)]), +}); +const Mustard8 = new NPC('Mustard', [ + 'You\'re back! I can see already you look closer to Kubfu, and its training is going well! It isn\'t quite ready yet, however! To switch it up a little, you should now have it help you with catching some Water and Dark-type Pokémon!', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 14), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 16, GameConstants.AchievementOption.less)]), +}); +const Mustard9 = new NPC('Mustard', [ + 'Good, good! You two are just the best of friends now, aren\'t you? Kubfu\'s really become more confident. How wonderful! I daresay I think you\'re both ready.', + 'Now then! If you want Kubfu to become stronger... there are special training grounds just for Kubfu! Prepare yourselves for the...Towers of Two Fists! The blue tower is the Tower of Waters! And the red tower is the Tower of Darkness!', + 'Each tower will help Kubfu learn a different fighting style! I\'m really looking forward to when you two make it to the top of those towers! It\'s going to be so exciting!', +], { + image: 'assets/images/npcs/Mustard.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 16), new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 18, GameConstants.AchievementOption.less)]), +}); +const Mustard10 = new NPC('Mustard', [ + 'Behold! Before you stands Urshifu! Sure to be unyielding armor that will shatter any blade turned against it... And it has mastered the styles of darkness and water!', + 'Ha! You\'ve certainly grown, haven\'t you? And to think, not long ago you would\'ve run and hid behind me the moment you got scared! Indeed, no matter how old I get, witnessing someone grow always brings joy to my heart. Urshifu! And you as well! Thank you both, from the bottom of my heart.', +], { + image: 'assets/images/npcs/Dojo Master.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 18), new QuestLineCompletedRequirement('The Dojo\'s Armor', GameConstants.AchievementOption.less)]), +}); +const JungleAsh1 = new NPC('Ash Ketchum', [ + 'Hey! I didn\'t expect to see you again here. Fancy a ba-. Actually, no, I\'d like to ask a favour of you; a friend of mine living in Glimwood Tangle called me asking for some help.', + 'I would go myself, but I promised one of the students here a battle and I don\'t want to bail on them. Would you be able to go for me?', + 'Great! My friend\'s name is Koko, tell him I sent you. This battle shouldn\'t take me too long, so come ask for my help if you need it!', +], { + image: 'assets/images/npcs/Ash Ketchum.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('Secrets of the Jungle'), new QuestLineStepCompletedRequirement('Secrets of the Jungle', 1, GameConstants.AchievementOption.less)]), +}); +const JungleKoko1 = new NPC('Koko', [ + 'Hmm? Who are you? Oh, so Ash sent you to help me? That\'s great!', + 'So, I\'m part of a tribe of Pokémon called Zarude, I was raised by them despite being a human. One of them has gone missing, I\'ve been told they were seen roaming, completely lost, around the Isle of Armor.', + 'Could you go catch it and bring it back here? If you need help locating it, I\'m sure one of the students at the dojo they have there could help you.', +], { + image: 'assets/images/npcs/Koko.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Secrets of the Jungle', 0), new QuestLineStepCompletedRequirement('Secrets of the Jungle', 2, GameConstants.AchievementOption.less)]), +}); +const JungleKoko2 = new NPC('Koko', [ + 'Great, you found it! Now if you could release it... hmm? It seems to like you. Well, if it wants to stay with you, that\'s its choice, so I guess it\'s fine.', + 'Oh, it looks like a group of Zarude from the tribe are here..... They... are angry, they think you caught Zarude against its will. I\'ll try and talk sense into them,', + 'Zaruza! Zaru Zaru! Zarude!.. Nope, they\'re too angry to listen. Looks like you\'ll have to fight them if we want to calm them down. Zarude are strong, but I\'m sure you\'ll be fine if you are anywhere near as strong as Ash.', +], { + image: 'assets/images/npcs/Koko.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Secrets of the Jungle', 2), new QuestLineStepCompletedRequirement('Secrets of the Jungle', 4, GameConstants.AchievementOption.less)]), +}); +const JungleKoko3 = new NPC('Koko', [ + 'Well, they\'re all knocked out. I\'ll try to talk reason into them when they wake up. Thanks for your help, I\'m glad you found Zarude safe.', + '...oh no. Another two groups of Zarude are coming and, as I\'m sure you can already guess, being surrounded by unconscious Zarude does not make you look good to them.', + 'I\'m really sorry, it seems you\'ll have to fight off these ones as well.', +], { + image: 'assets/images/npcs/Koko.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Secrets of the Jungle', 4), new QuestLineStepCompletedRequirement('Secrets of the Jungle', 6, GameConstants.AchievementOption.less)]), +}); +const JungleKoko4 = new NPC('Koko', [ + 'Okay... It\'s great that you were able to knock them all out without hurting them too much, but I don\'t think I\'ll be able to calm all of them on my own when they wake up.', + 'Would you be able to bring Ash here? I think the 3 of us together should be able to calm the lot of them down. He\'s probably still at the Master Dojo.', +], { + image: 'assets/images/npcs/Koko.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Secrets of the Jungle', 6), new QuestLineStepCompletedRequirement('Secrets of the Jungle', 9, GameConstants.AchievementOption.less)]), +}); +const JungleAsh2 = new NPC('Ash Ketchum', [ + 'You\'re back! How did it go with the Zarude?', + 'Oh, I see, that\'s quite the problem... Still, you said they\'re all out cold for now, right? In that case, we should have time for a battle!', + 'The battlefield out the back of the Dojo is being used at the moment, so let\'s battle out in front of the Dojo.', + 'With this amazing new team of mine, I\'ll finally beat you, my strongest rival!', +], { + image: 'assets/images/npcs/Ash Ketchum.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Secrets of the Jungle', 7), new QuestLineStepCompletedRequirement('Secrets of the Jungle', 9, GameConstants.AchievementOption.less)]), +}); +const JungleKoko5 = new NPC('Koko', [ + 'You brought Ash? Fantastic! And just in time, the Zarude are starting to wake up. Ash, could you have your Pokémon help me explain to them what\'s going on?', + 'Okay! It seems they finally understand. I\'m really sorry for all the trouble they caused for you.', + 'Oh, Dada! Zaruza Zaru? Zaru. This is the Zarude that raised me, Dada. He says he was impressed watching you fight, and wants to fight you as well.', + 'I should tell you, Dada is much stronger than the rest of the Zarude. Have a good fight, both of you!', +], { + image: 'assets/images/npcs/Koko.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Secrets of the Jungle', 9), new QuestLineStepCompletedRequirement('Secrets of the Jungle', 11, GameConstants.AchievementOption.less)]), +}); +const JungleAsh3 = new NPC('Ash Ketchum', [ + 'Amazing, you even beat Dada! It\'s really clear that he is really amazed by your strength!', + 'Hang on, did you guys see something? Oh, over there, it\'s Celebi! It must have come now things are peaceful here. It looks like it wants to play!', + 'Actually, it looks interested in you in particular. You should challenge it to a fight!', +], { + image: 'assets/images/npcs/Ash Ketchum.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Secrets of the Jungle', 11), new QuestLineStepCompletedRequirement('Secrets of the Jungle', 13, GameConstants.AchievementOption.less)]), +}); +const JungleKoko6 = new NPC('Koko', [ + 'Wow, you actually beat Celebi! It looked like it had fun! It\'s ran off for now, but maybe if you find it again, it\'ll let you catch it.', + 'Oh, also, Dada said he would be interested in travelling with you. Although, he also said he needed to deal with the shortage of Quest Points the tribe is dealing with right now.', + 'If you help him with that, I\'m sure he\'ll join you!', +], { + image: 'assets/images/npcs/Koko.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Secrets of the Jungle', 13), new QuestLineCompletedRequirement('Secrets of the Jungle', GameConstants.AchievementOption.less)]), +}); +const CrownShrineExplorer = new NPC('Explorer', [ + 'Whew! This place is quite a trek from Freezington.', + 'I\'ve heard that a rare Pokémon sometimes hides in the chests here. I was told that it is incredibly rare, but can\'t be found anywhere else!', +], { image: 'assets/images/npcs/Backpacker (male).png' }); +//Crown Tundra NPCs +const CrownTundraRoamerNPC = new RoamerNPC('Freezington Mayor', [ + 'If my eyes didn\'t deceive me, I saw a rare Pokémon at {ROUTE_NAME}. Go and see if you can find it if you\'re interested.', +], GameConstants.Region.galar, RoamingPokemonList.findGroup(GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra)); +const GalarFossilHiker = new NPC('Spelunker', [ + 'Wow! The Crown Tundra is filled with wild fossil Pokémon! I\'ve heard stories of these snowfields protecting the Pokémon living here, but this level of sanctuary is insane!', + 'And what\'s really interesting is that they only show up to trainers who have already caught one of their species. Could it be they are aware enough to use that as an appraisal of trust?', +], { image: 'assets/images/npcs/Hiker (Gen 8).png' }); +const CrownPeony1 = new NPC('Peony', [ + 'Hey, Chief! I was talking to the locals and they were talking about some ancient king Pokémon! They also mentioned a couple of horsey Pokémon that it was ultra-mega-close to. There\'s a statue of it outside and I\'ve heard this rock I\'ve been using as a pillow is part of it!', + 'Could you go and put it back on for me?', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Crown of Galar'), new QuestLineStepCompletedRequirement('The Crown of Galar', 1, GameConstants.AchievementOption.less)]), +}); +const Calyrex1 = new NPC('Calyrex', [ + 'Ah, yes. A sturdy body, just as I expected. I hope this man doesn\'t mind that I make use of it for the time being.', + 'I am Calyrex. I am also known as the King of Bountiful Harvests. I have borrowed this man\'s body in order to thank you in person for restoring my statue...so to speak.', + 'I once reigned over these lands as king, but now I have lost all but a fraction of my former strength. Even my loyal steeds have abandoned me.', + 'Would you do me the favour of protecting me from wild Pokémon at the Old Cemetery and Snowslide Slope? I wish to grow a Shaderoot Carrot and an Iceroot Carrot which I believe could draw out my loyal steeds.', +], { + image: 'assets/images/npcs/specialNPCs/Possessed Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Crown of Galar', 1), new QuestLineStepCompletedRequirement('The Crown of Galar', 3, GameConstants.AchievementOption.less)]), +}); +const Calyrex2 = new NPC('Calyrex', [ + 'Thank you for your help in growing these carrots. It is my belief that they will draw my loyal steeds back to me...', + 'What?! They are here already! But they appear to be unable to tell exactly where the scent of the carrots is coming from!', + 'The people of this place are in danger, you must fight them off!', +], { + image: 'assets/images/npcs/specialNPCs/Possessed Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Crown of Galar', 3), new QuestLineStepCompletedRequirement('The Crown of Galar', 5, GameConstants.AchievementOption.less)]), +}); +const Calyrex3 = new NPC('Calyrex', [ + 'You have my thanks for protecting the village, human child. Although, unfortunately, this has also caused my loyal steeds to flee.', + 'Hmm... Perhaps now we know they are in this area, it would be better to search for them?', + 'I think that would be for the best. Once you capture them, I would appreciate it if you could bring them to the Crown Shrine at the mountain\'s peak.', +], { + image: 'assets/images/npcs/specialNPCs/Possessed Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Crown of Galar', 5), new QuestLineStepCompletedRequirement('The Crown of Galar', 7, GameConstants.AchievementOption.less)]), +}); +const Calyrex4 = new NPC('Calyrex', [ + 'Finally, my loyal steeds have returned to me. There are truly no words with which to fully express my gratitude to you. But I can try. Take these Reins of Unity.', + '', + 'They can be used to combine myself and my steeds. However, they are incomplete. You must intertwine the hair from their manes for them to work. I expect they will occasionally leave such hair behind upon being defeated.', + 'And to that point... I have a suggestion. If you are able to capture me, it will prove your worth beyond any doubt, and I will lend you my strength on your journey. Once you have readied yourself, come face me!', +], { + image: 'assets/images/npcs/specialNPCs/Possessed Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Crown of Galar', 7), new QuestLineStepCompletedRequirement('The Crown of Galar', 9, GameConstants.AchievementOption.less)]), +}); +const Calyrex5 = new NPC('Calyrex', [ + 'Human child... I look forward to what adventures we might have together.', + 'May I remind you, if you ever wish to return my steeds and I to our true power, you must gather some hair from the manes of my steeds as they roam the Crown Tundra, and intertwine such hair with the Reins of Unity.', +], { + image: 'assets/images/pokemon/898.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Crown of Galar', 9)]), +}); +const CrownPeony2 = new NPC('Peony', [ + 'Wait--you really caught Calyrex from the legends?! Thats\'s ultra-mega-brilliant! Report away!', + 'Th-that noggin\'s MASSIVE! I-is that the King of Bountiful Harvests? The one calling the shots around here? Huh? I could swear I\'ve seen it before... Or then again, maybe not...', + 'A-anyway! It\'s definitely regal of it to have steeds... and that massive head does sort of resemble a crown! It\'s kingly enough, at any rate! Let\'s just call this a successful expedition! Smashin\'!', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Crown of Galar', 9), new QuestLineCompletedRequirement('The Crown of Galar', GameConstants.AchievementOption.less)]), +}); +const BirdPeony1 = new NPC('Peony', [ + 'Hey, Chief! I was talking to the locals and they mentioned they had seen some bird Pokémon that looked like the legendary birds of Kanto at that ultra-mega-massive tree in the middle of Ballimere Lake!', + 'You should go check it out!', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Birds of the Dyna Tree'), new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 2, GameConstants.AchievementOption.less)]), +}); +const BirdPeony2 = new NPC('Peony', [ + 'You\'re saying you saw some Pokémon that looked like.... Hang on, Chief! There\'s breaking news on the telly! They\'re sayin\' dodgy bird Pokémon are poppin\' up left and right!', + 'There\'s this fancy graceful one\'s apparently flyin\' about the Crown Tundra!', + 'And there\'s this pointy feathered one runnin\' about in the Wild Area of Southern Galar!', + 'Plus a fiery-lookin\' one out on the Isle of Armor!', + 'You\'re sayin\' you saw them and that\'s what you were tellin\' me about? Ah, sorry \'bout that. Anyway, you should go find \'em.', + 'They look real strong, so you probably can\'t catch \'em right off the bat. I\'d try weakening them first.', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 2), new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 4, GameConstants.AchievementOption.less)]), +}); +const BirdPeony3 = new NPC('Peony', [ + 'Hang on--you really caught up to all three of them dodgy birds? Multiple times each? That\'s pretty impressive!', + 'I think they should all be weakened enough that you can catch \'em now!', + 'I\'d imagine they\'d be in the same areas you chased \'em about in.', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 4), new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 6, GameConstants.AchievementOption.less)]), +}); +const BirdPeony4 = new NPC('Peony', [ + 'Wait--you really caught Articuno, Moltres, and Zapdos from the legends?! Thats\'s ultra-mega-brilliant! Report away!', + 'So that\'s them is it? I can definitely see the resemblance, but they don\'t seem quite the same...', + 'Maybe they\'re regional variants or somethin\'? At any rate, that\'s good enough for me. Let\'s call this expedition a success!', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Birds of the Dyna Tree', 6), new QuestLineCompletedRequirement('The Birds of the Dyna Tree', GameConstants.AchievementOption.less)]), +}); +const GolemPeony1 = new NPC('Peony', [ + 'Hey, Chief! I was talking to the locals and they mentioned some weird purple and yellow ruins at Three-Point Pass. You should go check \'em out!', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Ancient Golems'), new QuestLineStepCompletedRequirement('The Ancient Golems', 1, GameConstants.AchievementOption.less)]), +}); +const GolemPeony2 = new NPC('Peony', [ + 'So they wouldn\'t open... That\'s annoyin\'. Well, there are also 3 more ruins, 2 at opposite ends of Giant\'s Bed, and one at Snowslide Slope. Maybe you should have a look at those?', + 'How \'bout clearin\' em 10 times each, and see if you find anythin\' to open up the ruins at Three-Point Pass.', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Ancient Golems', 1), new QuestLineStepCompletedRequirement('The Ancient Golems', 3, GameConstants.AchievementOption.less)]), +}); +const GolemPeony3 = new NPC('Peony', [ + 'So that didn\'t work? Well, I heard there are some legendary Pokémon in those ruins, called Regirock, Regice, and Registeel. Apparently they\'ll show up to people who have done enough explorin\' in their ruins.', + 'Maybe if you caught them, the other ruins would open? What? You already have? Well, it might be worth doing it again, anyway.', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Ancient Golems', 3), new QuestLineStepCompletedRequirement('The Ancient Golems', 5, GameConstants.AchievementOption.less)]), +}); +const GolemPeony4 = new NPC('Peony', [ + 'Looks like that didn\'t do it. But don\'t lose your hopes yet! I was just told that Regigigas appeared in Giant\'s Bed! Probably somethin\' to do with you catching those other three. Anyway! You should go on and catch it!', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Ancient Golems', 5), new QuestLineStepCompletedRequirement('The Ancient Golems', 7, GameConstants.AchievementOption.less)]), +}); +const GolemPeony5 = new NPC('Peony', [ + 'Wait--so you really caught Regigigas from the legends? Well, that doesn\'t seem to have opened the ruins automatically or anythin\', but I imagine Regigigas can open those doors with sheer strength!', + 'You should go now and see what\'s there!', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Ancient Golems', 7), new QuestLineStepCompletedRequirement('The Ancient Golems', 9, GameConstants.AchievementOption.less)]), +}); +const GolemPeony6 = new NPC('Peony', [ + 'You caught Regieleki and Regidrago from the legends? Well that\'s that then! Smashin\'! I\'ll mark this expedition done!', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Ancient Golems', 9), new QuestLineCompletedRequirement('The Ancient Golems', GameConstants.AchievementOption.less)]), +}); +const PeonyComplete = new NPC('Peony', [ + 'Huh? Well how \'bout that, Chief! Looks like that was the last bit of the grand Peony Adven-tour that I had for you! Whoooooo! Now this is an occasion! What\'s the word? Ultra-mega-epic! Your passion for all this caught me off guard, Chief...', + 'This whole Adven-tour thing was built out of a load of rubbish I scraped together. Even I had my doubts about the whole thing. But you? You went at it with a ton of energy! Thanks for stickin\' around and finishin\' every part of my Adven-tour!', +], { + image: 'assets/images/npcs/Peony.png', + requirement: new MultiRequirement([new QuestLineCompletedRequirement('The Crown of Galar'), new QuestLineCompletedRequirement('The Birds of the Dyna Tree'), new QuestLineCompletedRequirement('The Ancient Golems')]), +}); +const Peonia1 = new NPC('Peonia', [ + 'Hang on-I recognize you! You\'re that kid who was able to beat my dad earlier, right? That\'s impressive, he\'s no pushover!', + 'Actually, a strong trainer like you, I think might be interested in a nearby place I was just about to go to.', + 'It\'s a cave system just to the north of here, called the Max Lair. It\'s the only known place where you can catch wild Gigantamax Pokémon!', + 'If you\'re interested, you should go take a look!', +], { + image: 'assets/images/npcs/Peonia.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('The Lair of Giants'), new QuestLineStepCompletedRequirement('The Lair of Giants', 1, GameConstants.AchievementOption.less)]), +}); +const Peonia2 = new NPC('Peonia', [ + 'You\'re back! So I take it you saw one? A Gigantamax Pikachu, huh? Yeah, I saw one of those too! I also saw 2 others: Meowth and Eevee. Maybe you\'ll see them when you go back in.', + 'Unfortunately, it seems these 3 are the only ones here at the moment. However, there\'s something you could do if you want to lure in more of them.', + 'I imagine you\'ve noticed some hexagonal rock formations on your journey, right? Those are called Raid Dens. You can find them in the mainland\'s Wild Area, the Isle of Armor, and here in the Crown Tundra.', + 'Every day some of them glow red and emit a purple beam. It seems there are 10 a day, consistently, for some unknown reason. Here, download this app, and they\'ll show up on your map!', + 'Anyway, in each of these Raid Dens, there\'s a Gigantamax Pokémon! You can\'t catch \'em though, they\'ll turn back to their regular form and run before you get the chance.', + 'However! They\'ll each drop a stone called a Wishing Piece. If you gather enough of those stones here, more Gigantamax Pokémon\'ll show up! Dunno which ones, probably just your luck.', + 'Including the 3 already here, there are 33 Gigantamax Pokémon. I imagine you\'ll need more than 200 Wishing Pieces to get all of \'em to show up.', +], { + image: 'assets/images/npcs/Peonia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', 1), new QuestLineStepCompletedRequirement('The Lair of Giants', 32, GameConstants.AchievementOption.less)]), +}); +const Peonia3 = new NPC('Peonia', [ + 'They\'re all here! That took quite a while, but it was well worth it!', + 'Hey, what\'s that purple glow? It looks to be around... Hammerlocke?', + 'Hang on, this looks a lot like when uncle Rose started the Darkest Day! You were the one who stopped that whole thing, right? You should probably get going!', +], { + image: 'assets/images/npcs/Peonia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', 32), new QuestLineStepCompletedRequirement('The Lair of Giants', 34, GameConstants.AchievementOption.less)]), +}); +const GigantamaxLeon1 = new NPC('Leon', [ + 'Champion?! What are you.... no matter, I\'m glad you\'re here!', + 'Eternamax Eternatus has appeared again! There is no time to talk! Let\'s fight it together!', +], { + image: 'assets/images/npcs/Leon.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', 33), new QuestLineStepCompletedRequirement('The Lair of Giants', 35, GameConstants.AchievementOption.less)]), +}); +const GigantamaxLeon2 = new NPC('Leon', [ + 'Wow. You\'re just as amazing as ever. You\'re truly worthy of your title.', + 'I think Eternatus absorbed the leftover power it used to transform the first time to do so again. There\'s none left now, though, so that should be the last time. It flew south...', + 'I have a feeling it\'ll come back here, but it shouldn\'t be a problem if it can\'t return to its Eternamax form here, right?', + 'Anyway, thanks for your help! Feel free to come over to Wyndon Stadium anytime if you fancy a match!', +], { + image: 'assets/images/npcs/Leon.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', 35), new QuestLineStepCompletedRequirement('The Lair of Giants', 37, GameConstants.AchievementOption.less)]), +}); +const Peonia4 = new NPC('Peonia', [ + 'Was it really was Eternatus again? Given that the purple glow has vanished, I guess you\'ve already taken care of it. Congrats!', + 'Actually, I just saw some purple and red Pokémon fly into the caves. Maybe that was Eternatus? I think this place might let it return to its Eternamax form. Maybe you can catch it!', + 'At any rate, I\'m real thankful for all your help. There\'s so many more people coming here now there\'s more Gigantamax Pokémon to find. It\'s been a lot of fun!', +], { + image: 'assets/images/npcs/Peonia.png', + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('The Lair of Giants', 36), new QuestLineCompletedRequirement('The Lair of Giants', GameConstants.AchievementOption.less)]), +}); +const MaxLairScientist = new NPC('Scientist', [ + 'I\'m sure you\'ll have noticed that there\'s quite a few Gigantamax Pokémon. As more get here, it\'s going to get progressively harder to find the one you want.', + 'I have some good news for you though! It seems that those you\'ve already caught will show up less often. That should make it easier to catch \'em all!', +], { image: 'assets/images/npcs/Scientist (female).png' }); +const ProfMagnolia = new ProfNPC('Prof. Magnolia', GameConstants.Region.galar, 'Ahhh, how incredible. Look how far you have come, dear trainer. Congratulations on another complete Pokédex.', 'I hear word of an exotic region on the horizon, but there has been no word yet when the blimp will be able to reach such faraway lands.', +//*TODO*: Change second line to this text when Paldea is available: 'Now be on your way, the illustrious Paldea region awaits over the horizons.', +'assets/images/npcs/Professor Magnolia.png'); +const MagearnaMysteryGift = new NPC('Mystery Gift', [ + 'You have received a Mystery Gift for completing the National Shiny Dex!', +], { + image: 'assets/images/pokemon/801.01.png', + requirement: new MultiRequirement([new QuestLineStartedRequirement('A Mystery Gift'), new QuestLineCompletedRequirement('A Mystery Gift', GameConstants.AchievementOption.less)]), +}); +//Galar Towns +TownList.Postwick = new Town('Postwick', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [new BulletinBoard(GameConstants.BulletinBoards.Galar), PostwickShop], { + requirements: [new GymBadgeRequirement(BadgeEnums.Champion_Stamp)], + npcs: [PostwickMum, MagearnaMysteryGift], +}); +TownList['Slumbering Weald'] = new Town('Slumbering Weald', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [TemporaryBattleList.Mirages, new MoveToDungeon(dungeonList['Slumbering Weald Shrine'])], { + requirements: [new TemporaryBattleRequirement('Hop 1')], +}); +TownList.Wedgehurst = new Town('Wedgehurst', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [TemporaryBattleList['Sordward & Shielbert'], WedgehurstShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 1)], + npcs: [WedgehurstRailStaff, SouthGalarRoamerNPC, SordwardShielbert2], +}); +TownList['Professor Magnolia\'s House'] = new Town('Professor Magnolia\'s House', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 2)], + npcs: [ProfMagnolia, AssistantHenry], +}); +TownList.Motostoke = new Town('Motostoke', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [TemporaryBattleList['Marnie 1'], TemporaryBattleList['Rampaging Torkoal'], MotostokeShop, new ShardTraderShop(GameConstants.ShardTraderLocations.Motostoke), new BattleCafe()], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 6)], + npcs: [BattleCafeMaster, MotostokeArtist], +}); +TownList.Turffield = new Town('Turffield', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [TemporaryBattleList['Rampaging Tsareena'], TurffieldShop, new ShardTraderShop(GameConstants.ShardTraderLocations.Turffield)], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 13)], + npcs: [TurffieldCook], +}); +TownList.Hulbury = new Town('Hulbury', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [TemporaryBattleList['Rampaging Gyarados'], HulburyShop, new ShardTraderShop(GameConstants.ShardTraderLocations.Hulbury)], { + requirements: [new TemporaryBattleRequirement('Hop 4')], + npcs: [Meteorologist], +}); +TownList['Stow-on-Side'] = new Town('Stow-on-Side', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [TemporaryBattleList['Rampaging Conkeldurr'], TemporaryBattleList['Rampaging Dusknoir'], GymList['Stow-on-Side1'], GymList['Stow-on-Side2'], StowonSideShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Stow-on-Side']), new ShardTraderShop(GameConstants.ShardTraderLocations['Route 6'], 'Fossil Master', true, 'Fossils')], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 23)], + npcs: [AncientMural1, AncientMural2, StowonSideSonia, Archaeologist], +}); +TownList.Ballonlea = new Town('Ballonlea', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [TemporaryBattleList['Gym Leader Bede'], BallonleaShop, new ShardTraderShop(GameConstants.ShardTraderLocations.Ballonlea)], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Glimwood Tangle'))], +}); +TownList.Hammerlocke = new Town('Hammerlocke', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [TemporaryBattleList['Rampaging Haxorus'], new MoveToDungeon(dungeonList['Energy Plant']), HammerlockeShop, new ShardTraderShop(GameConstants.ShardTraderLocations.Hammerlocke), new BattleCafe()], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 22)], + npcs: [HammerlockeHiker], +}); +TownList.Circhester = new Town('Circhester', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [TemporaryBattleList['Rampaging Gigalith'], TemporaryBattleList['Rampaging Froslass'], GymList.Circhester1, GymList.Circhester2, CirchesterShop, new ShardTraderShop(GameConstants.ShardTraderLocations.Circhester)], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 26)], + npcs: [HerosBath, CirchesterHop, CirchesterSonia, CirchesterGuitarist], +}); +TownList.Spikemuth = new Town('Spikemuth', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [TemporaryBattleList['Gym Leader Marnie'], SpikemuthShop, new ShardTraderShop(GameConstants.ShardTraderLocations.Spikemuth), new DockTownContent()], { + requirements: [new TemporaryBattleRequirement('Marnie 2')], + npcs: [TeamYellGrunts], +}); +TownList.Wyndon = new Town('Wyndon', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [WyndonShop, new MoveToDungeon(dungeonList['Rose Tower']), new BattleCafe()], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 32)], + npcs: [WyndonBattleCafeRichard], +}); +TownList['Wyndon Stadium'] = new Town('Wyndon Stadium', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [GymList['Elite Trainer Marnie'], GymList['Elite Gym Leader Bede'], GymList['Elite Trainer Hop'], GymList['Champion Leon'], pokeLeagueShop()], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 32)], + npcs: [RoseBroadcast, WyndonHop, Leon], +}); +//Isle of Armor Towns +TownList['Armor Station'] = new Town('Armor Station', GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor, [], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion)], +}); +TownList['Master Dojo'] = new Town('Master Dojo', GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor, [new BulletinBoard(GameConstants.BulletinBoards.Armor), TemporaryBattleList.Mustard, TemporaryBattleList.Kubfu, MasterDojoShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Master Dojo']), new DockTownContent()], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 33)], + npcs: [Mustard1, Mustard2, Mustard3, Mustard4, Mustard5, Klara2, Avery2, Mustard6, Mustard7, Mustard8, Mustard9, JungleAsh1, JungleAsh2, IsleofArmorRoamerNPC], +}); +TownList['Master Dojo Battle Court'] = new Town('Master Dojo Battle Court', GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor, [GymList['Elite Gym Leader Klara'], GymList['Elite Gym Leader Avery'], GymList['Elite Dojo Matron Honey'], GymList['Elite Dojo Master Mustard']], { + requirements: [new QuestLineCompletedRequirement('The Dojo\'s Armor')], +}); +//Crown Tundra Towns +TownList['Crown Tundra Station'] = new Town('Crown Tundra Station', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new DockTownContent(), TemporaryBattleList.Peony], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_GalarChampion)], +}); +TownList.Freezington = new Town('Freezington', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new BulletinBoard(GameConstants.BulletinBoards.Crown), GymList['Elite Trainer Peony'], TemporaryBattleList.Calyrex, TemporaryBattleList.Glastrier, TemporaryBattleList.Spectrier, FreezingtonShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.galar, 46)], + npcs: [CrownPeony1, Calyrex1, Calyrex2, Calyrex3, CrownPeony2, BirdPeony1, BirdPeony2, BirdPeony3, BirdPeony4, GolemPeony1, GolemPeony2, GolemPeony3, GolemPeony4, GolemPeony5, GolemPeony6, PeonyComplete, Peonia1, CrownTundraRoamerNPC], +}); +//Galar Dungeons +TownList['Slumbering Weald Shrine'] = new DungeonTown('Slumbering Weald Shrine', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [new QuestLineStepCompletedRequirement('The Darkest Day', 12)], [TemporaryBattleList['Hop 8'], TemporaryBattleList['Sordward 1'], TemporaryBattleList['Shielbert 1']], { + npcs: [SlumberingHop1, SlumberingHop2, SordwardShielbert1], +}); +TownList['Galar Mine'] = new DungeonTown('Galar Mine', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [new RouteKillRequirement(10, GameConstants.Region.galar, 12)], [TemporaryBattleList['Bede 1']]); +TownList['Galar Mine No. 2'] = new DungeonTown('Galar Mine No. 2', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [new GymBadgeRequirement(BadgeEnums.Galar_Water)], [TemporaryBattleList['Bede 2']]); +TownList['Glimwood Tangle'] = new DungeonTown('Glimwood Tangle', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [new QuestLineStepCompletedRequirement('The Darkest Day', 2)], [TemporaryBattleList['Zarude Tribe 1'], TemporaryBattleList['Zarude Tribe 2'], TemporaryBattleList['Zarude Tribe 3'], TemporaryBattleList['Zarude (Dada)'], TemporaryBattleList['Flowering Celebi'], GlimwoodTangleShop], { + npcs: [JungleKoko1, JungleKoko2, JungleKoko3, JungleKoko4, JungleKoko5, JungleAsh3, JungleKoko6], +}); +TownList['Rose Tower'] = new DungeonTown('Rose Tower', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [new GymBadgeRequirement(BadgeEnums.Elite_Hop)]); +TownList['Energy Plant'] = new DungeonTown('Energy Plant', GameConstants.Region.galar, GameConstants.GalarSubRegions.NorthGalar, [new QuestLineStepCompletedRequirement('The Darkest Day', 14)], [TemporaryBattleList.Eternatus, TemporaryBattleList['Sordward 2'], TemporaryBattleList['Shielbert 2'], TemporaryBattleList['Rampaging Zacian'], TemporaryBattleList['Rampaging Zamazenta'], TemporaryBattleList['The Darkest Day'], TemporaryBattleList['Eternamax Eternatus']], { + npcs: [EnergyPlantRose, EternatusCatch, SordwardShielbert3, SordwardShielbert4, Piers, EnergyPlantHop, GigantamaxLeon1, GigantamaxLeon2], +}); +TownList['Dusty Bowl'] = new DungeonTown('Dusty Bowl', GameConstants.Region.galar, GameConstants.GalarSubRegions.SouthGalar, [new RouteKillRequirement(10, GameConstants.Region.galar, 18)]); +TownList['Courageous Cavern'] = new DungeonTown('Courageous Cavern', GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor, [new RouteKillRequirement(10, GameConstants.Region.galar, 33)]); +TownList['Brawlers\' Cave'] = new DungeonTown('Brawlers\' Cave', GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor, [ + new OneFromManyRequirement([ + new RouteKillRequirement(10, GameConstants.Region.galar, 34), + new RouteKillRequirement(10, GameConstants.Region.galar, 40), + ]), +]); +TownList['Warm-Up Tunnel'] = new DungeonTown('Warm-Up Tunnel', GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor, [new RouteKillRequirement(10, GameConstants.Region.galar, 38)], [TemporaryBattleList['Klara 2'], TemporaryBattleList['Avery 2']], { + npcs: [Klara1, Avery1], +}); +TownList['Tower of Darkness'] = new DungeonTown('Tower of Darkness', GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor, [ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 17), + new RouteKillRequirement(10, GameConstants.Region.galar, 40), + ]), +], [], { + npcs: [Mustard10], +}); +TownList['Tower of Waters'] = new DungeonTown('Tower of Waters', GameConstants.Region.galar, GameConstants.GalarSubRegions.IsleofArmor, [ + new MultiRequirement([ + new QuestLineStepCompletedRequirement('The Dojo\'s Armor', 17), + new RouteKillRequirement(10, GameConstants.Region.galar, 36), + ]), +], [], { + npcs: [Mustard10], +}); +TownList['Roaring-Sea Caves'] = new DungeonTown('Roaring-Sea Caves', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new RouteKillRequirement(10, GameConstants.Region.galar, 50)], [], { + npcs: [GalarFossilHiker], +}); +TownList['Rock Peak Ruins'] = new DungeonTown('Rock Peak Ruins', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new RouteKillRequirement(10, GameConstants.Region.galar, 48)]); +TownList['Iron Ruins'] = new DungeonTown('Iron Ruins', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new RouteKillRequirement(10, GameConstants.Region.galar, 48)]); +TownList['Iceberg Ruins'] = new DungeonTown('Iceberg Ruins', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new RouteKillRequirement(10, GameConstants.Region.galar, 54)]); +TownList['Split-Decision Ruins'] = new DungeonTown('Split-Decision Ruins', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new QuestLineStepCompletedRequirement('The Ancient Golems', 8)]); +TownList['Lakeside Cave'] = new DungeonTown('Lakeside Cave', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new RouteKillRequirement(10, GameConstants.Region.galar, 53)]); +TownList['Dyna Tree Hill'] = new DungeonTown('Dyna Tree Hill', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new RouteKillRequirement(10, GameConstants.Region.galar, 53)]); +TownList['Tunnel to the Top'] = new DungeonTown('Tunnel to the Top', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new RouteKillRequirement(10, GameConstants.Region.galar, 54)]); +TownList['Crown Shrine'] = new DungeonTown('Crown Shrine', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new RouteKillRequirement(10, GameConstants.Region.galar, 55)], [], { + npcs: [Calyrex4, Calyrex5, CrownShrineExplorer], +}); +TownList['Max Lair'] = new DungeonTown('Max Lair', GameConstants.Region.galar, GameConstants.GalarSubRegions.CrownTundra, [new QuestLineStepCompletedRequirement('The Lair of Giants', 0)], [], { + npcs: [Peonia2, Peonia3, Peonia4, MaxLairScientist], +}); +//Hisui shops +const JubilifeVillageShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Black_augurite, +]); +// Hisui NPCs +const ForcesCogita1 = new NPC('Cogita', [ + 'I\'ve just been told of the foul plan Volo had concocted. Well, think no more on that scoundrel. Just another tale of passion burning too bright and consuming its bearer. This is what happens, if you allow it to.', + 'But what of you? Are you making any progress with your...what do you call your studies of Pokémon? Surveying, was it?', + 'Indeed? Well, Hisui still holds more fascinating Pokémon.', + 'Such as Tornadus... In every direction it flies, stirring up tremendous storms as it goes. When a blizzard batters the Alabaster Icelands, Tornadus may be about.', + 'Also, Thundurus: as it flies around, it fires bolts of lightning every which way. When a rainstorm lashes the Cobalt Coastlands, Tornadus may be about.', + 'Lastly, Landorus, the Pokémon hailed as the Guardian of the Fields. It seems it can be glimpsed in the Obsidian Fieldlands. Perhaps you\'d be so good as to catch it for me?', + 'I know not why these three have chosen to show themselves. Perhaps the cause lies with the space-time rift...or simply within their own whims...', +], { + requirement: new MultiRequirement([new QuestLineStartedRequirement('Incarnate Forces of Hisui'), new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 1, GameConstants.AchievementOption.less)]), +}); +const ForcesCogita2 = new NPC('Cogita', [ + 'Ah, you\'ve arrived. You now know much about Landorus, Tornadus and even Thundurus. Well done.', + 'In more normal times, I would bid you to let these three fly free as is their nature.', + 'But we are fresh from the tearing of the space-time rift. Until its aftereffects fade entirely, perhaps its best to keep our trio contained.', + 'And now, it is time to tell you the rest. There is one more of that cohort. Come.', + '', + 'This is Enamorus, a Pokémon hailed as the Herald of Spring. Enamorus is not particularly given to ill behaviour. But I imagine you\'d like to document her for your Pokédex, wouldn\'t you?', + 'Catch her then, if you like. She always flits about in the Crimson Mirelands.', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 1), new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 3, GameConstants.AchievementOption.less)]), +}); +const ForcesCogita3 = new NPC('Cogita', [ + 'Aha, you\'ve caught Enamorus as well. And you know so much about her.', + 'Enamorus arrives in Hisui once winter has passed. Hence the epithet Herald of Spring.', + 'Her company, when I have the pleasure, is of great help, she ferries me hither and yon across Hisui. But I\'ll leave her in your care for now, I suppose.', + 'Indeed, even you can hardly expect to live for all time, surely, but she will be in your care for now.', + 'You, Enamorus and her brethren have something in common: you tend to stir the pot of life. Do not mistake me - I mean this positively.', + 'If everything were straightforward, what meaning would there be in living as long as we do?', + '"Once there was a god of field, and once there was a god of spring. Upon Hisui\'s winds it wheeled, brought life to every growing thing..." Was that how that old verse went?', + 'I have passed on to you all there is to pass. Where history goes from here...I leave to you and your companions to see through.', +], { + requirement: new MultiRequirement([new QuestLineStepCompletedRequirement('Incarnate Forces of Hisui', 4), new QuestLineCompletedRequirement('Incarnate Forces of Hisui', GameConstants.AchievementOption.less)]), +}); +//Hisui Towns +TownList['Prelude Beach'] = new Town('Prelude Beach', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['The Galaxy Team\'s Kamado']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Jubilife Village'] = new Town('Jubilife Village', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [JubilifeVillageShop, new ShardTraderShop(GameConstants.ShardTraderLocations['Jubilife Village']), TemporaryBattleList['Volo 1'], TemporaryBattleList['Akari 1'], TemporaryBattleList['Akari 2'], TemporaryBattleList['Adaman 1']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Galaxy Hall'] = new Town('Galaxy Hall', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new BulletinBoard(GameConstants.BulletinBoards.Hisui)], { + requirements: [new DevelopmentRequirement()], + npcs: [ForcesCogita1], +}); +TownList['Fieldlands Camp'] = new Town('Fieldlands Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Warden Mai']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Heights Camp'] = new Town('Heights Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Alpha Kricketune']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Grandtree Arena'] = new Town('Grandtree Arena', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Warden Lian'], TemporaryBattleList['Irida 1'], TemporaryBattleList['Lord of the Woods: Kleavor']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Mirelands Camp'] = new Town('Mirelands Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Coin 1']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Bogbound Camp'] = new Town('Bogbound Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Sludge Mound'] = new Town('Sludge Mound', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList.Ursaluna], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Diamond Settlement'] = new Town('Diamond Settlement', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Brava Arena'] = new Town('Brava Arena', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Lady of the Ridge: Lilligant']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Beachside Camp'] = new Town('Beachside Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Irida 2']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Coastlands Camp'] = new Town('Coastlands Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Iscan\'s Cabin'] = new Town('Iscan\'s Cabin', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Molten Arena'] = new Town('Molten Arena', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList.Clover, TemporaryBattleList['Coin 2'], TemporaryBattleList['Charm 1'], TemporaryBattleList['Lord of the Isles: Arcanine']], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Firespit Island'))], +}); +TownList['Highlands Camp'] = new Town('Highlands Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Mountain Camp'] = new Town('Mountain Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Summit Camp'] = new Town('Summit Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Moonview Arena'] = new Town('Moonview Arena', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Melli 2'], TemporaryBattleList['Lord of the Hollow: Electrode']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Snowfields Camp'] = new Town('Snowfields Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Icepeak Camp'] = new Town('Icepeak Camp', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Pearl Settlement'] = new Town('Pearl Settlement', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Irida 3']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Icepeak Arena'] = new Town('Icepeak Arena', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList['Lord of the Tundra: Avalugg']], { + requirements: [new DevelopmentRequirement()], +}); +TownList['Ancient Retreat'] = new Town('Ancient Retreat', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [], { + requirements: [new DevelopmentRequirement()], + npcs: [ForcesCogita2, ForcesCogita3], +}); +TownList['Stone Portal'] = new Town('Stone Portal', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [TemporaryBattleList.Beni], { + requirements: [new DevelopmentRequirement()], +}); +//Hisui Dungeons +TownList['Floaro Gardens'] = new DungeonTown('Floaro Gardens', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Oreburrow Tunnel'] = new DungeonTown('Oreburrow Tunnel', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList.Heartwood = new DungeonTown('Heartwood', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], undefined, { + npcs: [MossRock], +}); +TownList['Ancient Solaceon Ruins'] = new DungeonTown('Ancient Solaceon Ruins', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [TemporaryBattleList['Volo 2']]); +TownList['Shrouded Ruins'] = new DungeonTown('Shrouded Ruins', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Veilstone Cape'] = new DungeonTown('Veilstone Cape', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Firespit Island'] = new DungeonTown('Firespit Island', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [new MoveToTown('Molten Arena')]); +TownList['Ancient Wayward Cave'] = new DungeonTown('Ancient Wayward Cave', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [TemporaryBattleList['Melli 1']]); +TownList['Ancient Quarry'] = new DungeonTown('Ancient Quarry', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Primeval Grotto'] = new DungeonTown('Primeval Grotto', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [TemporaryBattleList['Charm 2']]); +TownList['Clamberclaw Cliffs'] = new DungeonTown('Clamberclaw Cliffs', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [TemporaryBattleList['Warden Ingo']]); +TownList['Celestica Ruins'] = new DungeonTown('Celestica Ruins', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Sacred Plaza'] = new DungeonTown('Sacred Plaza', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Avalugg\'s Legacy'] = new DungeonTown('Avalugg\'s Legacy', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [TemporaryBattleList['Warden Gaeric']]); +TownList['Ice Column Chamber'] = new DungeonTown('Ice Column Chamber', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Icepeak Cavern'] = new DungeonTown('Icepeak Cavern', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], undefined, { + npcs: [IceRock], +}); +TownList['Ancient Snowpoint Temple'] = new DungeonTown('Ancient Snowpoint Temple', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [TemporaryBattleList['Warden Sabi'], TemporaryBattleList['Hisuian Braviary']]); +TownList['Seaside Hollow'] = new DungeonTown('Seaside Hollow', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [ + new DevelopmentRequirement(), + new ObtainedPokemonRequirement('Overqwil'), +]); +TownList['Ancient Lake Verity'] = new DungeonTown('Ancient Lake Verity', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Ancient Lake Valor'] = new DungeonTown('Ancient Lake Valor', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [TemporaryBattleList['Adaman 2']]); +TownList['Ancient Lake Acuity'] = new DungeonTown('Ancient Lake Acuity', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +TownList['Temple of Sinnoh'] = new DungeonTown('Temple of Sinnoh', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()], [TemporaryBattleList['Dialga (Origin)'], TemporaryBattleList['Palkia (Origin)'], TemporaryBattleList['Volo 3'], TemporaryBattleList.Arceus]); +TownList['Turnback Cave'] = new DungeonTown('Turnback Cave', GameConstants.Region.hisui, GameConstants.HisuiSubRegions.Hisui, [new DevelopmentRequirement()]); +//Paldea Shops +const ZapapicoShop = new Shop([ + ItemList.Pokeball, + ItemList.Greatball, + ItemList.Ultraball, + ItemList.Auspicious_armor, + ItemList.Malicious_armor, +]); +// Paldea NPCs +const PaldeaRoamerNPC = new RoamerNPC('Student Emily', [ + 'Hey, hey, did you hear? A group of students saw some super rare Pokémon on {ROUTE_NAME}!', +], GameConstants.Region.paldea, RoamingPokemonList.findGroup(GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea)); +//Paldea Towns +TownList['Cabo Poco'] = new Town('Cabo Poco', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [new BulletinBoard(GameConstants.BulletinBoards.Paldea)], { + requirements: [new GymBadgeRequirement(BadgeEnums.Azure)], +}); +TownList['Poco Path Lighthouse'] = new Town('Poco Path Lighthouse', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [GymList['Pokémon Trainer Arven']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Los Platos'] = new Town('Los Platos', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList.Mesagoza = new Town('Mesagoza', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [GymList['Champion Nemona']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +//Dunno what do about Naranja and Uva Academy's names. For now I've merged them. +TownList['Naranjuva Academy'] = new Town('Naranjuva Academy', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [GymList['Director Clavell'], GymList['Penny of Team Star']], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], + npcs: [PaldeaRoamerNPC], +}); +TownList.Cortondo = new Town('Cortondo', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList.Artazon = new Town('Artazon', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList.Levincia = new Town('Levincia', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList.Alfornada = new Town('Alfornada', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList.Cascarrafa = new Town('Cascarrafa', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Porto Marinada'] = new Town('Porto Marinada', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList.Medali = new Town('Medali', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList.Zapapico = new Town('Zapapico', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [ZapapicoShop], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList.Montenevera = new Town('Montenevera', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Pokémon League Paldea'] = new Town('Pokémon League Paldea', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [GymList['Elite Rika'], GymList['Elite Poppy'], GymList['Elite Larry'], GymList['Elite Hassel'], GymList['Top Champion Geeta'], pokeLeagueShop()], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Segin Squad\'s Base'] = new Town('Segin Squad\'s Base', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Schedar Squad\'s Base'] = new Town('Schedar Squad\'s Base', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Navi Squad\'s Base'] = new Town('Navi Squad\'s Base', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Ruchbah Squad\'s Base'] = new Town('Ruchbah Squad\'s Base', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Caph Squad\'s Base'] = new Town('Caph Squad\'s Base', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Zero Gate'] = new Town('Zero Gate', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [], { + requirements: [new RouteKillRequirement(10, GameConstants.Region.paldea, 2)], +}); +TownList['Zero Lab'] = new Town('Zero Lab', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [GymList['AI Sada'], GymList['AI Turo'], TemporaryBattleList['Paradise Protection Protocol']], { + requirements: [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Area Zero Depths'))], +}); +// Paldea Dungeons +TownList['Inlet Grotto'] = new DungeonTown('Inlet Grotto', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [new RouteKillRequirement(10, GameConstants.Region.paldea, 1)]); +TownList['Glaseado Mountain'] = new DungeonTown('Glaseado Mountain', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [new RouteKillRequirement(10, GameConstants.Region.paldea, 1)]); +TownList['Grasswither Shrine'] = new DungeonTown('Grasswither Shrine', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [new RouteKillRequirement(10, GameConstants.Region.paldea, 1)]); +TownList['Icerend Shrine'] = new DungeonTown('Icerend Shrine', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [new RouteKillRequirement(10, GameConstants.Region.paldea, 1)]); +TownList['Groundblight Shrine'] = new DungeonTown('Groundblight Shrine', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [new RouteKillRequirement(10, GameConstants.Region.paldea, 1)]); +TownList['Firescourge Shrine'] = new DungeonTown('Firescourge Shrine', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [new RouteKillRequirement(10, GameConstants.Region.paldea, 1)]); +TownList['Area Zero'] = new DungeonTown('Area Zero', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, +/*[new MultiRequirement([ + new QuestLineCompletedRequirement('Path of Legends'), + new QuestLineCompletedRequirement('Victory Road'), + new QuestLineCompletedRequirement('Starfall Street'), +])]*/ +[new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Inlet Grotto'))]); +TownList['Area Zero Depths'] = new DungeonTown('Area Zero Depths', GameConstants.Region.paldea, GameConstants.PaldeaSubRegions.Paldea, [new ClearDungeonRequirement(1, GameConstants.getDungeonIndex('Area Zero'))]); +// Used to check if next region can be reached, for example for professor NPC +TownList['Final Region Town'] = new Town('Final Region Town', GameConstants.Region.final, GameConstants.FinalSubRegions.Final, [], { + requirements: [new GymBadgeRequirement(BadgeEnums.Elite_PaldeaChampion)], +}); +class Preload { + static itemLoading(item = 0) { + this.itemsToLoad.push(item); + this.updateProgressBar(); + } + static itemLoaded(item = 0) { + this.itemsLoaded.push(item); + this.updateProgressBar(); + } + static itemErrored(item = 0) { + this.itemsErrored.push(item); + this.updateProgressBar(); + } + static updateProgressBar() { + const toLoad = this.itemsToLoad.length; + const loaded = this.itemsLoaded.length; + const errored = this.itemsErrored.length; + // Update the progress bar + const progressBarEl = document.getElementById('preload-progress-bar'); + progressBarEl.style.width = `${(loaded + errored) / toLoad * 100}%`; + // Update the text + const progressTextEl = document.getElementById('preload-progress-text'); + progressTextEl.innerText = `${loaded + errored} / ${toLoad}`; + } + static hideSplashScreen(fast = false) { + $('#game').removeClass('loading'); + if (fast) { + $('#loader').hide(); + } + else { + $('#loader').fadeOut('slow'); + } + // Remove the splash screen + setTimeout(() => { + $('#loader').remove(); + }, 1000); + } + static load(skipWait = false) { + console.log(`[${GameConstants.formatDate(new Date())}] %cPreloading Images..`, 'color:#8e44ad;font-weight:900;'); + if (skipWait) { + return new Promise(resolve => { + //If you want to skip waiting, resolve immediately + resolve(); + // Preload.loadTowns(); + // Preload.loadUndergroundItems(); + // Preload.loadMap(); + // Preload.loadPokemon(), + Preload.hideSplashScreen(true); + }); + } + else { + return new Promise(resolve => { + // Incase something is taking too long to load + const forceLoad = setTimeout(() => { + console.log(`[${GameConstants.formatDate(new Date())}] %cPreloading images taking too long, Skipping..`, 'color:#c0392b;font-weight:900;'); + resolve(); + }, GameConstants.MAX_LOAD_TIME); + Promise.all([ + // Preload.loadTowns(), + // Preload.loadUndergroundItems(), + // Preload.loadMap(), + // Preload.loadPokemon(), + Preload.minimumTime(), + ]).then(() => { + clearTimeout(forceLoad); + console.log(`[${GameConstants.formatDate(new Date())}] %cPreloaded images`, 'color:#2ecc71;font-weight:900;'); + // Give the progress bar a little bit of time to finish the animation + setTimeout(() => { + resolve(); + }, 600); + }).catch((reason => { + console.log(`[${GameConstants.formatDate(new Date())}] %cPreload images failed..`, 'color:#c0392b;font-weight:900;'); + console.error('Preload images failed:', reason); + clearTimeout(forceLoad); + resolve(); + })); + }); + } + } + static loadTowns() { + var _a; + const p = Array(); + for (const name in TownList) { + // Skip unreleased towns unless a feature flag has enabled them + if (!((_a = window.featureFlags) === null || _a === void 0 ? void 0 : _a.preloadUnreleasedTowns) && TownList[name].region > GameConstants.MAX_AVAILABLE_REGION) { + continue; + } + // Skip fake towns that exist for the Elite + if (name.includes('Elite') || name.includes('Champion')) { + continue; + } + Preload.itemLoading(name); + p.push(new Promise(resolve => { + const img = new Image(); + img.onload = () => { + Preload.itemLoaded(`town-${name}`); + resolve(); + }; + img.onerror = () => { + Preload.itemErrored(`town-${name}`); + console.warn('Failed to load town image:', name); + resolve(); + }; + img.src = `assets/images/towns/${name}.png`; + })); + } + return Promise.all(p); + } + static loadPokemon() { + const p = Array(); + for (let i = 1; i <= GameConstants.MaxIDPerRegion[GameConstants.MAX_AVAILABLE_REGION]; i++) { + Preload.itemLoading(i); + p.push(new Promise(resolve => { + const img = new Image(); + img.onload = () => { + Preload.itemLoaded(i); + resolve(); + }; + img.onerror = () => { + Preload.itemErrored(i); + console.warn('Failed to load image for pokemon:', i); + resolve(); + }; + img.src = `assets/images/pokemon/${i}.png`; + })); + } + return Promise.all(p); + } + static loadUndergroundItems() { + const p = Array(); + UndergroundItems.list.forEach(item => { + Preload.itemLoading(item.id); + p.push(new Promise(resolve => { + const img = new Image(); + img.onload = () => { + Preload.itemLoaded(item.id); + resolve(); + }; + img.onerror = () => { + Preload.itemErrored(item.id); + console.warn('Failed to load image for Underground item:', item.name); + resolve(); + }; + img.src = item.undergroundImage; + })); + }); + return Promise.all(p); + } + static minimumTime() { + return new Promise(resolve => { + setTimeout(() => { + resolve(); + }, GameConstants.MIN_LOAD_TIME); + }); + } + static loadMap() { + // TODO: preload the map background images? + /* + return new Promise(resolve => { + let img = new Image(); + img.onload = () => { + document.querySelector('image') + .setAttributeNS('http://www.w3.org/1999/xlink', 'href', 'assets/images/kanto.png'); + resolve(); + }; + img.onerror = () => { + console.log('Failed to load map image:', name); + resolve(); + } + img.src = 'assets/images/kanto.png'; + }) + */ + } +} +Preload.itemsToLoad = []; +Preload.itemsLoaded = []; +Preload.itemsErrored = []; +/// +/// +/** + * Helper class to retrieve information from RoutePokemon + */ +class RouteHelper { + /** + * Retrieves a list of all Pokémon that can be caught on that route. + * @param route + * @param region + * @param includeHeadbutt + * @returns {string[]} list of all Pokémon that can be caught + */ + static getAvailablePokemonList(route, region, includeHeadbutt = true) { + var _a; + // If the route is somehow higher than allowed, use the first route to generateWildPokemon Pokémon + const possiblePokemons = (_a = Routes.getRoute(region, route)) === null || _a === void 0 ? void 0 : _a.pokemon; + if (!possiblePokemons) { + return ['Rattata']; + } + // Land Pokémon + let pokemonList = possiblePokemons.land; + // Water Pokémon + if (App.game.keyItems.hasKeyItem(KeyItemType.Super_rod) || possiblePokemons.land.length == 0) { + pokemonList = pokemonList.concat(possiblePokemons.water); + } + // Headbutt Pokémon + if (includeHeadbutt) { + pokemonList = pokemonList.concat(possiblePokemons.headbutt); + } + // Special requirement Pokémon + pokemonList = pokemonList.concat(...possiblePokemons.special.filter(p => p.isAvailable()).map(p => p.pokemon)); + return pokemonList; + } + static routePokerusEVs(route, region) { + const possiblePokemon = RouteHelper.getAvailablePokemonList(route, region); + if (this.minPokerus(possiblePokemon) == GameConstants.Pokerus.Resistant) { + return 'All Pokémon on this route are resistant!'; + } + const currentEVs = this.getEvs(possiblePokemon); + return `EVs until all Pokémon are resistant on this route: ${currentEVs} / ${50 * possiblePokemon.length}.`; + } + static dungeonPokerusEVs(dungeon) { + const possiblePokemon = [...new Set(dungeon.allAvailablePokemon())]; + if (this.minPokerus(possiblePokemon) == GameConstants.Pokerus.Resistant) { + return 'All Pokémon in this dungeon are resistant!'; + } + const currentEVs = this.getEvs(possiblePokemon); + return `EVs until all Pokémon are resistant in this dungeon: ${currentEVs} / ${50 * possiblePokemon.length}.`; + } + static getEvs(possiblePokemon) { + let currentEVs = 0; + possiblePokemon.forEach(pkmn => { + const partyPokemon = App.game.party.getPokemonByName(pkmn); + if (partyPokemon.pokerus == GameConstants.Pokerus.Resistant) { + currentEVs += 50; + } + else if (partyPokemon.pokerus == GameConstants.Pokerus.Contagious) { + currentEVs += partyPokemon.evs(); + } + }); + return Math.round(currentEVs); + } + /** + * Checks if all Pokémon on this route are caught by the player. + * @param route + * @param region + * @param includeShiny + * @param includeHeadbutt + * @returns {boolean} true if all Pokémon on this route are caught. + */ + static routeCompleted(route, region, includeShiny, includeHeadbutt = true) { + return RouteHelper.listCompleted(RouteHelper.getAvailablePokemonList(route, region, includeHeadbutt), includeShiny); + } + static listCompleted(possiblePokemon, includeShiny) { + for (let i = 0; i < possiblePokemon.length; i++) { + if (!App.game.party.alreadyCaughtPokemon(PokemonHelper.getPokemonByName(possiblePokemon[i]).id)) { + return false; + } + if (includeShiny && !App.game.party.alreadyCaughtPokemon(PokemonHelper.getPokemonByName(possiblePokemon[i]).id, true)) { + return false; + } + } + return true; + } + static minPokerus(possiblePokemon) { + var _a; + let pokerus = 3; + for (let i = 0; i < possiblePokemon.length; i++) { + const pokerusStatus = (_a = App.game.party.getPokemonByName(possiblePokemon[i])) === null || _a === void 0 ? void 0 : _a.pokerus; + pokerus = Math.min(pokerus, pokerusStatus); + } + return pokerus; + } + static minPokerusCheck(possiblePokemon) { + if (possiblePokemon.length == 0) { + return false; + } + return this.minPokerus(possiblePokemon) > 0; + } + static isAchievementsComplete(route, region) { + return AchievementHandler.achievementList.every(achievement => { + return !(achievement.property instanceof RouteKillRequirement && achievement.property.region === region && achievement.property.route === route && !achievement.isCompleted()); + }); + } + static isThereQuestAtLocation(route, region) { + return App.game.quests.currentQuests().some(q => { + return q instanceof DefeatPokemonsQuest && q.route == route && q.region == region; + }); + } +} +class Blimp { + constructor(name, width, height, image) { + this.name = name; + this.width = width; + this.height = height; + this.image = image; + } +} +/// +/// +var areaStatus; +(function (areaStatus) { + areaStatus[areaStatus["locked"] = 0] = "locked"; + areaStatus[areaStatus["incomplete"] = 1] = "incomplete"; + areaStatus[areaStatus["questAtLocation"] = 2] = "questAtLocation"; + areaStatus[areaStatus["uncaughtPokemon"] = 3] = "uncaughtPokemon"; + areaStatus[areaStatus["uncaughtShadowPokemon"] = 4] = "uncaughtShadowPokemon"; + areaStatus[areaStatus["uncaughtShinyPokemonAndMissingAchievement"] = 5] = "uncaughtShinyPokemonAndMissingAchievement"; + areaStatus[areaStatus["uncaughtShinyPokemon"] = 6] = "uncaughtShinyPokemon"; + areaStatus[areaStatus["missingAchievement"] = 7] = "missingAchievement"; + areaStatus[areaStatus["missingResistant"] = 8] = "missingResistant"; + areaStatus[areaStatus["completed"] = 9] = "completed"; +})(areaStatus || (areaStatus = {})); +class MapHelper { + static getUsableFilters() { + return GameHelper.enumStrings(areaStatus).map(status => Settings.getSetting(`--${status}`)).filter(setting => setting.isUnlocked()); + } + static routeExist(route, region) { + return !!Routes.getRoute(region, route); + } + static normalizeRoute(route, region, skipIgnoredRoutes = true) { + return Routes.normalizedNumber(region, route, skipIgnoredRoutes); + } + static getEnvironments(area, region) { + // Environments aren't stored in the locations themselves, so we need to refer to the record in GameConstants.Environments to get an array (list) of all the environments we've written it under + const envs = Object.keys(GameConstants.Environments).filter((env) => { var _a; return (_a = GameConstants.Environments[env][region]) === null || _a === void 0 ? void 0 : _a.has(area); }); // keeping everything as GameConstants.Environment makes them easier to refer to with an IDE (like VSCode). Environments will show up in a dropdown when you type + // Now that we have an array we can push (add) environments straight up + // determine Hisui environments for Burmy and electric friends + if (region === GameConstants.Region.hisui) { + const hisuilands = ['AlabasterIcelands', 'CobaltCoastlands', 'CoronetHighlands', 'CrimsonMirelands', 'JubilifeVillage', 'ObsidianFieldlands']; + const blanklands = hisuilands.find(land => envs.includes(land)); // find which __land the area is part of + switch (blanklands) { + case 'ObsidianFieldlands': + case 'JubilifeVillage': + envs.push('PlantCloak'); + break; // group cloaks together to keep the switch breaks tidy, only three needed + case 'CoronetHighlands': + envs.push('MagneticField'); // no break after this because we want to add SandyCloak to CoronetHighlands too + case 'CrimsonMirelands': + envs.push('SandyCloak'); + break; + case 'AlabasterIcelands': + case 'CobaltCoastlands': + envs.push('TrashCloak'); + break; + } + // if not in Hisui, add general envs for Burmy + } + else if (envs.includes('Cave')) { + envs.push('SandyCloak'); + } + else if (typeof area === 'string' && ['City', 'League', 'Tower'].some(word => area.includes(word))) { + envs.push('TrashCloak'); + } + // if not in Cave or TrashCloak, Burmy evolves into (Plant). (this is mainly for realEvos challenge) + const burmyCloaks = ['PlantCloak', 'SandyCloak', 'TrashCloak']; + // if some element (cloak) of the "burmyCloaks" array is not (!) included in the "envs" array, add (push) the 'PlantCloak' environment + if (!burmyCloaks.some(cloak => envs.includes(cloak))) { + envs.push('PlantCloak'); + } + // Get environments from Gym and Temp battles lists, if any + const battleArea = (App.game.gameState == GameConstants.GameState.temporaryBattle + ? TemporaryBattleRunner.getEnvironmentArea() : undefined) || + (App.game.gameState == GameConstants.GameState.gym + ? GymRunner.getEnvironmentArea() : undefined) || + undefined; + // Add the battle environment arrays + if (battleArea != undefined) { + envs.push(...battleArea); + } + return (envs); + } + static getCurrentEnvironments() { + var _a; + const area = player.route || + ((_a = player.town) === null || _a === void 0 ? void 0 : _a.name) || + undefined; + return this.getEnvironments(area, player.region); + } + static getBattleBackground() { + var _a; + const area = player.route || + (App.game.gameState == GameConstants.GameState.temporaryBattle + ? TemporaryBattleRunner.getBattleBackgroundImage() : undefined) || + (App.game.gameState == GameConstants.GameState.gym + ? GymRunner.getBattleBackgroundImage() : undefined) || + (App.game.gameState == GameConstants.GameState.battleFrontier + ? BattleFrontierRunner.battleBackground() : undefined) || + ((_a = player.town) === null || _a === void 0 ? void 0 : _a.name) || + undefined; + if (area in GameConstants.BattleBackgrounds) { + return area; + } + const [img] = Object.entries(GameConstants.BattleBackgrounds).find(([, regions]) => { var _a; return (_a = regions[player.region]) === null || _a === void 0 ? void 0 : _a.has(area); }) || []; + return img; + } + static calculateBattleCssClass() { + return GameConstants.BattleBackgroundImage[this.getBattleBackground()]; + } + static calculateRouteCssClass(route, region) { + var _a; + let cls = ''; + if (!MapHelper.accessToRoute(route, region)) { + cls = areaStatus[areaStatus.locked]; + } + else if (App.game.statistics.routeKills[region][route]() < GameConstants.ROUTE_KILLS_NEEDED) { + cls = areaStatus[areaStatus.incomplete]; + } + else if (RouteHelper.isThereQuestAtLocation(route, region)) { + cls = areaStatus[areaStatus.questAtLocation]; + } + else if (!RouteHelper.routeCompleted(route, region, false)) { + cls = areaStatus[areaStatus.uncaughtPokemon]; + } + else if (!RouteHelper.routeCompleted(route, region, true) && !RouteHelper.isAchievementsComplete(route, region)) { + cls = areaStatus[areaStatus.uncaughtShinyPokemonAndMissingAchievement]; + } + else if (!RouteHelper.routeCompleted(route, region, true)) { + cls = areaStatus[areaStatus.uncaughtShinyPokemon]; + } + else if (!RouteHelper.isAchievementsComplete(route, region)) { + cls = areaStatus[areaStatus.missingAchievement]; + } + else if (Settings.getSetting(`--${areaStatus[areaStatus.missingResistant]}`).isUnlocked() && RouteHelper.minPokerus(RouteHelper.getAvailablePokemonList(route, region, true)) < GameConstants.Pokerus.Resistant) { + cls = areaStatus[areaStatus.missingResistant]; + } + else { + cls = areaStatus[areaStatus.completed]; + } + // Water routes + if ((_a = GameConstants.Environments.Water[region]) === null || _a === void 0 ? void 0 : _a.has(route)) { + cls = `${cls} waterRoute`; + } + return cls; + } + static isRouteCurrentLocation(route, region) { + return player.route == route && player.region == region; + } + static isTownCurrentLocation(townName) { + if (App.game.gameState == GameConstants.GameState.temporaryBattle) { + return TemporaryBattleRunner.battleObservable().getTown().name == townName; + } + return !player.route && player.town.name == townName; + } + static calculateTownCssClass(townName) { + var _a; + // We don't want to spoil easter eggs with map colors + if ((_a = TownList[townName]) === null || _a === void 0 ? void 0 : _a.ignoreAreaStatus) { + return ''; + } + // Check if this location is locked + if (!MapHelper.accessToTown(townName)) { + return areaStatus[areaStatus.locked]; + } + const states = []; + // Is this location a dungeon + if (dungeonList[townName] && dungeonList[townName].isUnlocked()) { + const possiblePokemon = dungeonList[townName].allAvailablePokemon(); + const shadowPokemon = dungeonList[townName].allAvailableShadowPokemon(); + if (!App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(townName)]()) { + states.push(areaStatus.incomplete); + } + else if (dungeonList[townName].isThereQuestAtLocation()) { + states.push(areaStatus.questAtLocation); + } + else if (!RouteHelper.listCompleted(possiblePokemon, false)) { + states.push(areaStatus.uncaughtPokemon); + } + else if (Settings.getSetting(`--${areaStatus[areaStatus.uncaughtShadowPokemon]}`).isUnlocked() + && shadowPokemon.some(pokemon => { var _a; return ((_a = App.game.party.getPokemonByName(pokemon)) === null || _a === void 0 ? void 0 : _a.shadow) < GameConstants.ShadowStatus.Shadow; })) { + states.push(areaStatus.uncaughtShadowPokemon); + } + else if (!RouteHelper.listCompleted(possiblePokemon, true)) { + if (!DungeonRunner.isAchievementsComplete(dungeonList[townName])) { + states.push(areaStatus.uncaughtShinyPokemonAndMissingAchievement); + } + else { + states.push(areaStatus.uncaughtShinyPokemon); + } + } + else if (!DungeonRunner.isAchievementsComplete(dungeonList[townName])) { + states.push(areaStatus.missingAchievement); + } + else if (Settings.getSetting(`--${areaStatus[areaStatus.missingResistant]}`).isUnlocked() && RouteHelper.minPokerus(possiblePokemon) < GameConstants.Pokerus.Resistant) { + states.push(areaStatus.missingResistant); + } + } + const town = TownList[townName]; + town.content.forEach(c => { + // If the town itself is not locked, it should never show locked + if (c.areaStatus() != areaStatus.locked) { + states.push(c.areaStatus()); + } + }); + if (states.length) { + const importantState = Math.min(...states); + if (importantState >= areaStatus.uncaughtShinyPokemon && states.includes(areaStatus.uncaughtShinyPokemon) && states.includes(areaStatus.missingAchievement)) { + return areaStatus[areaStatus.uncaughtShinyPokemonAndMissingAchievement]; + } + return areaStatus[importantState]; + } + return areaStatus[areaStatus.completed]; + } + static accessToTown(townName) { + const town = TownList[townName]; + if (!town) { + return false; + } + return town.isUnlocked(); + } + static moveToTown(townName) { + var _a; + if (MapHelper.accessToTown(townName)) { + App.game.gameState = GameConstants.GameState.idle; + player.route = 0; + Battle.route = 0; + Battle.catching(false); + const town = TownList[townName]; + player.region = town.region; + player.subregion = town.subRegion; + player.town = town; + Battle.enemyPokemon(null); + //this should happen last, so all the values all set beforehand + App.game.gameState = GameConstants.GameState.town; + } + else { + const town = TownList[townName]; + const reqsList = []; + (_a = town.requirements) === null || _a === void 0 ? void 0 : _a.forEach(requirement => { + if (!requirement.isCompleted()) { + reqsList.push(requirement.hint()); + } + }); + Notifier.notify({ + message: `You don't have access to that location yet.\n${reqsList.join('\n')}`, + type: NotificationConstants.NotificationOption.warning, + }); + } + } + static validRoute(route = 0, region = 0) { + return !!Routes.getRoute(region, route); + } + static openShipModal() { + const openModal = () => { + $('#ShipModal').modal('show'); + }; + if (player.highestRegion() > 0 && (TownList[GameConstants.DockTowns[player.region]].isUnlocked())) { + openModal(); + } + else { + Notifier.notify({ + message: `You cannot access this dock yet!${player.region > GameConstants.Region.kanto ? '\nProgress further to return to previous regions!' : ''}`, + type: NotificationConstants.NotificationOption.warning, + }); + } + } + static ableToTravel() { + var _a, _b; + // If player already reached highest region, they can't move on + if (player.highestRegion() >= GameConstants.MAX_AVAILABLE_REGION) { + return false; + } + const challengeActive = App.game.challenges.list.requireCompletePokedex.active(); + const nextStartingTownUnlocked = (_b = (_a = TownList[GameConstants.StartingTowns[player.highestRegion() + 1]]) === null || _a === void 0 ? void 0 : _a.isUnlocked()) !== null && _b !== void 0 ? _b : false; + const fullDex = AchievementHandler.findByName(`${GameConstants.camelCaseToString(GameConstants.Region[player.highestRegion()])} Master`).isCompleted(); + return nextStartingTownUnlocked && (fullDex || !challengeActive); + } + static travelToNextRegion() { + if (MapHelper.ableToTravel()) { + // Gain queue slots based on highest region + App.game.breeding.gainQueueSlot(App.game.breeding.queueSlotsGainedFromRegion(player.highestRegion())); + GameHelper.incrementObservable(player.highestRegion); + player.highestSubRegion(0); + MapHelper.moveToTown(GameConstants.StartingTowns[player.highestRegion()]); + player.region = player.highestRegion(); + // Update hatchery region filter to include new region if all previous regions selected + const previousRegionFullMask = (2 << (player.highestRegion() - 1)) - 1; + const regionFilterMask = Settings.getSetting('breedingRegionFilter').value & previousRegionFullMask; + if (regionFilterMask == previousRegionFullMask) { + const newRegionFullMask = (2 << player.highestRegion()) - 1; + Settings.setSettingByName('breedingRegionFilter', newRegionFullMask); + } + $('#pickStarterModal').modal('show'); + } + } + static getBlimpData(professorName = '') { + const baseProps = { + name: `${professorName}'s Blimp`, + width: 6 * 16, + height: 3 * 16, + image: '', + }; + if (!MapHelper.ableToTravel()) { + return baseProps; + } + if (player.regionStarters[GameConstants.Region.kanto]() == GameConstants.Starter.Special) { + return new Blimp(baseProps.name, baseProps.width, baseProps.height, 'assets/images/map/blimp_pikachu.png'); + } + else if (!App.game.challenges.list.requireCompletePokedex.active()) { + return new Blimp('Team Rocket\'s Blimp', 4 * 16, 8 * 16, 'assets/images/map/blimp_meowth.png'); + } + else { + return new Blimp(baseProps.name, baseProps.width, baseProps.height, 'assets/images/map/blimp_empty.png'); + } + } +} +MapHelper.moveToRoute = function (route, region) { + var _a, _b; + if (isNaN(route)) { + return; + } + const routeData = Routes.getRoute(region, route); + let genNewEnemy = false; + if (route != Battle.route) { + genNewEnemy = true; + } + if (this.accessToRoute(route, region)) { + if (player.region != region) { + player.region = region; + } + player.subregion = (_a = routeData.subRegion) !== null && _a !== void 0 ? _a : 0; + player.route = route; + if (genNewEnemy && !Battle.catching()) { + Battle.generateNewEnemy(); + } + App.game.gameState = GameConstants.GameState.fighting; + } + else { + if (!MapHelper.routeExist(route, region)) { + return Notifier.notify({ + message: `${Routes.getName(route, region)} does not exist in the ${GameConstants.Region[region]} region.`, + type: NotificationConstants.NotificationOption.danger, + }); + } + const reqsList = []; + (_b = routeData.requirements) === null || _b === void 0 ? void 0 : _b.forEach(requirement => { + if (!requirement.isCompleted()) { + reqsList.push(requirement.hint()); + } + }); + Notifier.notify({ + message: `You don't have access to that route yet.\n${reqsList.join('\n')}`, + type: NotificationConstants.NotificationOption.warning, + }); + } +}; +MapHelper.accessToRoute = function (route, region) { + return this.routeExist(route, region) && Routes.getRoute(region, route).isUnlocked(); +}; +MapHelper; +/// +/// +class ZMoves { + constructor() { + this.name = 'Z Moves'; + this.saveKey = 'zMoves'; + this.counter = 0; + this.type = ko.observable(PokemonType.Normal); + this.time = ko.observable(0); + this.formattedTime = ko.computed(() => GameConstants.formatTime(this.time() / GameConstants.SECOND).split(':').slice(1).join(':')); + this.status = ko.observable(GameConstants.ZMoveStatus.inactive); + } + initialize() { + } + getMultiplier(...types) { + if (this.status() === GameConstants.ZMoveStatus.inactive) { + return 1; + } + return types.includes(this.type()) || !types.length ? this.multiplier : 1; + } + isActive() { + return this.status() > GameConstants.ZMoveStatus.inactive; + } + activate(type) { + if (this.isActive()) { + return; + } + this.type(type); + this.time(GameConstants.ZMOVE_ACTIVE_TIME); + this.status(GameConstants.ZMoveStatus.active); + } + fromJSON(json) { + var _a, _b, _c; + if (!json) { + return; + } + this.type((_a = json.type) !== null && _a !== void 0 ? _a : PokemonType.None); + this.time((_b = json.time) !== null && _b !== void 0 ? _b : 0); + this.status((_c = json.status) !== null && _c !== void 0 ? _c : GameConstants.ZMoveStatus.inactive); + } + toJSON() { + return { + type: this.type(), + time: this.time(), + status: this.status(), + }; + } + canAccess() { + return App.game.keyItems.hasKeyItem(KeyItemType['Z-Power_Ring']); + } + update(delta) { } // This method intentionally left blank + tick() { + if (this.status() !== GameConstants.ZMoveStatus.inactive) { + GameHelper.incrementObservable(this.time, -GameConstants.ZMOVE_TICK); + if (this.time() === 0) { + GameHelper.incrementObservable(this.status, -1); + if (this.status() === GameConstants.ZMoveStatus.counteractive) { + this.time(GameConstants.ZMOVE_COUNTERACTIVE_TIME); + } + } + } + this.counter = 0; + } + get multiplier() { + return GameConstants[`ZMOVE_${GameConstants.ZMoveStatus[this.status()].toUpperCase()}_MULTIPLIER`]; + } +} diff --git a/docs/preview/pr-5723/styles/styles.min.css b/docs/preview/pr-5723/styles/styles.min.css new file mode 100644 index 00000000000..a25d130dee1 --- /dev/null +++ b/docs/preview/pr-5723/styles/styles.min.css @@ -0,0 +1 @@ +.achievement-row{cursor:pointer}#loader,#saveSelector{overflow:hidden}#loader,#saveSelector,body{background:url(../assets/images/background.png) center no-repeat fixed,center no-repeat fixed #7dad71;background-size:cover;min-height:100vh;overflow-x:hidden}#loader.background-day,#saveSelector.background-day,body.background-day{background:url(../assets/images/background.png) center no-repeat fixed,center no-repeat fixed #7dad71;background-size:cover;min-height:100vh}#loader.background-night,#saveSelector.background-night,body.background-night{background:url(../assets/images/background-night.png) center no-repeat fixed,center no-repeat fixed #030206;background-size:cover;min-height:100vh}#dynamic-background{display:none}body.background-dynamic #dynamic-background{display:block;position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:-10;pointer-events:none}body.background-dynamic #dynamic-background .sky{width:100vw;height:100vh;position:fixed;left:0;top:0;background-size:auto 120vh;background-repeat:repeat-x;z-index:-5}body.background-dynamic #dynamic-background .sky-0{background-image:url(../assets/images/dynamic-background/sky/10.png)}body.background-dynamic #dynamic-background .sky-1{background-image:url(../assets/images/dynamic-background/sky/01.png)}body.background-dynamic #dynamic-background .sky-2{background-image:url(../assets/images/dynamic-background/sky/02.png)}body.background-dynamic #dynamic-background .sky-3{background-image:url(../assets/images/dynamic-background/sky/03.png)}body.background-dynamic #dynamic-background .sky-4,body.background-dynamic #dynamic-background .sky-5,body.background-dynamic #dynamic-background .sky-6{background-image:url(../assets/images/dynamic-background/sky/04.png)}body.background-dynamic #dynamic-background .sky-7{background-image:url(../assets/images/dynamic-background/sky/07.png)}body.background-dynamic #dynamic-background .sky-8{background-image:url(../assets/images/dynamic-background/sky/08.png)}body.background-dynamic #dynamic-background .sky-9{background-image:url(../assets/images/dynamic-background/sky/09.png)}body.background-dynamic #dynamic-background .sky-10{background-image:url(../assets/images/dynamic-background/sky/10.png)}body.background-dynamic #dynamic-background .sky-11{background-image:url(../assets/images/dynamic-background/sky/11.png)}body.background-dynamic #dynamic-background .ground{height:20vh;width:100vw;position:fixed;left:0;bottom:0;background-repeat:repeat-x;background-size:auto 22vh;z-index:-2}body.background-dynamic #dynamic-background .ground-0{background-image:url(../assets/images/dynamic-background/ground/10.png)}body.background-dynamic #dynamic-background .ground-1{background-image:url(../assets/images/dynamic-background/ground/01.png)}body.background-dynamic #dynamic-background .ground-2{background-image:url(../assets/images/dynamic-background/ground/02.png)}body.background-dynamic #dynamic-background .ground-3{background-image:url(../assets/images/dynamic-background/ground/03.png)}body.background-dynamic #dynamic-background .ground-4,body.background-dynamic #dynamic-background .ground-5,body.background-dynamic #dynamic-background .ground-6{background-image:url(../assets/images/dynamic-background/ground/04.png)}body.background-dynamic #dynamic-background .ground-7{background-image:url(../assets/images/dynamic-background/ground/07.png)}body.background-dynamic #dynamic-background .ground-8{background-image:url(../assets/images/dynamic-background/ground/08.png)}body.background-dynamic #dynamic-background .ground-9{background-image:url(../assets/images/dynamic-background/ground/09.png)}body.background-dynamic #dynamic-background .ground-10{background-image:url(../assets/images/dynamic-background/ground/10.png)}body.background-dynamic #dynamic-background .ground-11{background-image:url(../assets/images/dynamic-background/ground/11.png)}body.background-dynamic #dynamic-background #orbital{height:140vh;width:100vw;position:fixed;overflow:hidden;top:10vh;left:0;z-index:-4}body.background-dynamic #dynamic-background #sun{position:absolute;background:url(../assets/images/dynamic-background/sun.png);background-size:cover;top:0;left:0;display:block;width:18vh;height:18vh;z-index:-4}body.background-dynamic #dynamic-background #moon{position:absolute;background:url(../assets/images/dynamic-background/moon.png);background-size:cover;bottom:0;right:0;display:block;width:14.2vh;height:15vh;z-index:-4}body.background-dynamic #dynamic-background .cloud-container{width:100vw;height:100vh;top:0;position:fixed;z-index:-2}body.background-dynamic #dynamic-background .cloud{width:20vw;height:5vh;z-index:-2;position:relative}body.background-dynamic #dynamic-background .x2{left:200px;-webkit-transform:scale(.6);transform:scale(.6);opacity:.6;-webkit-animation:moveclouds 50s linear infinite;animation:moveclouds 50s linear infinite}body.background-dynamic #dynamic-background .x3{left:-250px;bottom:-20vh;-webkit-transform:scale(.8);transform:scale(.8);opacity:.8;-webkit-animation:moveclouds 45s linear infinite;animation:moveclouds 45s linear infinite}body.background-dynamic #dynamic-background .x4{left:470px;bottom:-10vh;-webkit-transform:scale(.75);transform:scale(.75);opacity:.75;-webkit-animation:moveclouds 37s linear infinite;animation:moveclouds 37s linear infinite}@-webkit-keyframes moveclouds{0%{margin-left:100vw}100%{margin-left:-100vw}}@keyframes moveclouds{0%{margin-left:100vw}100%{margin-left:-100vw}}body.background-dynamic #dynamic-background .cloud1{left:200px;width:65vh;height:25vh;-webkit-transform:scale(.8);transform:scale(.8);opacity:.3;-webkit-animation:moveclouds 60s linear infinite;animation:moveclouds 60s linear infinite;z-index:-3;background-size:cover;bottom:20vh;position:fixed}body.background-dynamic #dynamic-background .cloud1-0{background-image:url(../assets/images/dynamic-background/cloud/09.png)}body.background-dynamic #dynamic-background .cloud1-1{background-image:url(../assets/images/dynamic-background/cloud/01.png)}body.background-dynamic #dynamic-background .cloud1-2{background-image:url(../assets/images/dynamic-background/cloud/02.png)}body.background-dynamic #dynamic-background .cloud1-3,body.background-dynamic #dynamic-background .cloud1-4,body.background-dynamic #dynamic-background .cloud1-5,body.background-dynamic #dynamic-background .cloud1-6{background-image:url(../assets/images/dynamic-background/cloud/04.png)}body.background-dynamic #dynamic-background .cloud1-7{background-image:url(../assets/images/dynamic-background/cloud/07.png)}body.background-dynamic #dynamic-background .cloud1-8{background-image:url(../assets/images/dynamic-background/cloud/08.png)}body.background-dynamic #dynamic-background .cloud1-9{background-image:url(../assets/images/dynamic-background/cloud/08.1.png)}body.background-dynamic #dynamic-background .cloud1-10{background-image:url(../assets/images/dynamic-background/cloud/09.png)}body.background-dynamic #dynamic-background .cloud1-11{background-image:url(../assets/images/dynamic-background/cloud/10.png)}body.background-dynamic #dynamic-background .pokemonSprite{position:fixed;height:4vh;width:4vh;z-index:0;left:-4vh;background-position:0 33.3333%}.eggSlot,.eggSlotModal{background-position:center;background-repeat:no-repeat;-webkit-box-sizing:border-box}body.background-dynamic #dynamic-background .pokemonSprite.speed-0{-webkit-animation:walkLeft 1s steps(4) infinite,moveLeft 120s linear;animation:walkLeft 1s steps(4) infinite,moveLeft 120s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-1{-webkit-animation:walkLeft .9s steps(4) infinite,moveLeft 100s linear;animation:walkLeft .9s steps(4) infinite,moveLeft 100s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-2{-webkit-animation:walkLeft .85s steps(4) infinite,moveLeft 90s linear;animation:walkLeft .85s steps(4) infinite,moveLeft 90s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-3{-webkit-animation:walkLeft .8s steps(4) infinite,moveLeft 80s linear;animation:walkLeft .8s steps(4) infinite,moveLeft 80s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-4{-webkit-animation:walkLeft .65s steps(4) infinite,moveLeft 70s linear;animation:walkLeft .65s steps(4) infinite,moveLeft 70s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-5{-webkit-animation:walkLeft .52s steps(4) infinite,moveLeft 60s linear;animation:walkLeft .52s steps(4) infinite,moveLeft 60s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-6{-webkit-animation:walkLeft .5s steps(4) infinite,moveLeft 55s linear;animation:walkLeft .5s steps(4) infinite,moveLeft 55s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-7{-webkit-animation:walkLeft .48s steps(4) infinite,moveLeft 50s linear;animation:walkLeft .48s steps(4) infinite,moveLeft 50s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-8{-webkit-animation:walkLeft .44s steps(4) infinite,moveLeft 42s linear;animation:walkLeft .44s steps(4) infinite,moveLeft 42s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-9{-webkit-animation:walkLeft .41s steps(4) infinite,moveLeft 37s linear;animation:walkLeft .41s steps(4) infinite,moveLeft 37s linear}body.background-dynamic #dynamic-background .pokemonSprite.speed-10{-webkit-animation:walkLeft .4s steps(4) infinite,moveLeft 30s linear;animation:walkLeft .4s steps(4) infinite,moveLeft 30s linear}@-webkit-keyframes moveLeft{0%{left:4000px}100%{left:-1000px}}@keyframes moveLeft{0%{left:4000px}100%{left:-1000px}}#battleItemContainer table{display:table;table-layout:fixed;width:100%}#battleItemContainer .battle-item-small{width:36px;height:36px;margin:5px;border:1px solid #000}#battleItemContainer .battle-item-small-selected{width:36px;height:36px;margin:5px;border:1px solid #ff2f39}#battleItemContainer .battle-item-none{-webkit-filter:brightness(.8);filter:brightness(.8);opacity:.4}#battleItemContainer .meter{width:0%;background-color:#3aff3a;height:2px}#battleItemContainer .amount{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:16.6%}.player-animated{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.player-animated-counter{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite;animation-direction:reverse}#battleCafeModal .sweet-display{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}#battleCafeModal .alcremie-display{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:2px}#battleCafeModal .pokeball-smallest{margin:0}.breedingListItem,.evolutionListItem{text-align:left;margin-bottom:3px}#battleCafeModal .pokeball-image,#battleCafeModal .pokerus-image{line-height:0}#battleCafeModal .pokerus-image img{height:12px}@-webkit-keyframes wobble-hor-bottom{0%,100%,20%,80%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}30%{-webkit-transform:translateX(-10px) rotate(-6deg);transform:translateX(-10px) rotate(-6deg)}40%{-webkit-transform:translateX(5px) rotate(6deg);transform:translateX(5px) rotate(6deg)}50%{-webkit-transform:translateX(-5px) rotate(-3.6deg);transform:translateX(-5px) rotate(-3.6deg)}60%{-webkit-transform:translateX(3px) rotate(2.4deg);transform:translateX(3px) rotate(2.4deg)}70%{-webkit-transform:translateX(-2px) rotate(-1.2deg);transform:translateX(-2px) rotate(-1.2deg)}}@keyframes wobble-hor-bottom{0%,100%,20%,80%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}30%{-webkit-transform:translateX(-10px) rotate(-6deg);transform:translateX(-10px) rotate(-6deg)}40%{-webkit-transform:translateX(5px) rotate(6deg);transform:translateX(5px) rotate(6deg)}50%{-webkit-transform:translateX(-5px) rotate(-3.6deg);transform:translateX(-5px) rotate(-3.6deg)}60%{-webkit-transform:translateX(3px) rotate(2.4deg);transform:translateX(3px) rotate(2.4deg)}70%{-webkit-transform:translateX(-2px) rotate(-1.2deg);transform:translateX(-2px) rotate(-1.2deg)}}#breedingModal .modal-body.p-0{overflow-x:hidden}#breeding-helpers .progress{height:25px}.breedingListItem img{margin-left:-10px;margin-right:-30px}.breedingListItem .sparkle{position:absolute;right:15px;top:0}.eggSlot{box-sizing:border-box;background-image:url(../assets/images/breeding/breedingSlot.png);background-size:100% 100%}.eggSlot.disabled{opacity:.5;pointer-events:none}.eggSlot .content{position:absolute;width:100%;height:100%;top:0;left:0}.eggSlot .content .progress{position:absolute;bottom:10px;left:10%;width:80%;margin:0 auto}.eggSlot .content .progress span{position:absolute;display:block;width:100%}.eggSlot .content img.lockedSlotImage{height:90%;width:90%;margin-top:5px}.eggSlot .content img.hatcheryHelperImage{position:absolute;left:5px;top:5px;height:auto;width:auto;-ms-interpolation-mode:nearest-neighbor;image-rendering:-webkit-optimize-contrast;image-rendering:-o-pixelated;image-rendering:pixelated}.tile-player,.wandererSprite{-ms-interpolation-mode:nearest-neighbor;image-rendering:-o-pixelated}.eggSlot:nth-child(5n+0) .hatching svg,.eggSlot:nth-child(5n+0) .hatchingSoon svg,.eggSlot:nth-child(5n+0) img.hatching,.eggSlot:nth-child(5n+0) img.hatchingSoon{-webkit-animation-delay:.48s;animation-delay:.48s}.eggSlot:nth-child(5n+1) .hatching svg,.eggSlot:nth-child(5n+1) .hatchingSoon svg,.eggSlot:nth-child(5n+1) img.hatching,.eggSlot:nth-child(5n+1) img.hatchingSoon{-webkit-animation-delay:.22s;animation-delay:.22s}.eggSlot:nth-child(5n+2) .hatching svg,.eggSlot:nth-child(5n+2) .hatchingSoon svg,.eggSlot:nth-child(5n+2) img.hatching,.eggSlot:nth-child(5n+2) img.hatchingSoon{-webkit-animation-delay:.35s;animation-delay:.35s}.eggSlot:nth-child(5n+3) .hatching svg,.eggSlot:nth-child(5n+3) .hatchingSoon svg,.eggSlot:nth-child(5n+3) img.hatching,.eggSlot:nth-child(5n+3) img.hatchingSoon{-webkit-animation-delay:.15s;animation-delay:.15s}.eggSlot .hatching svg,.eggSlot img.hatching{-webkit-animation:wobble-hor-bottom 3s infinite both;animation:wobble-hor-bottom 3s infinite both}.eggSlot .hatchingSoon svg,.eggSlot img.hatchingSoon{-webkit-animation:wobble-hor-bottom 5s infinite both;animation:wobble-hor-bottom 5s infinite both}.eggSlot::before{content:'';width:0;white-space:normal;display:inline-block;vertical-align:middle;max-width:100%;padding-top:100%}#eggList{background-color:#aaa}#middle-column .eggSlot{-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}#middle-column #hatcheryQueue .queuePokemon{width:11%}#hatcheryQueue{overflow:hidden;overflow-x:auto;white-space:nowrap;text-align:left}#hatcheryQueue .queuePokemon{border-radius:50%;border:1px solid rgba(51,51,51,.5);padding:0;width:23%;display:inline-block}#hatcheryQueue .queuePokemon img{width:100%}.egg{width:60%}.egg[data-type1=Bug] .egg-main{fill:#b9cc33}.egg[data-type1=Dark] .egg-main{fill:#3d3d3d}.egg[data-type1=Dragon] .egg-main{fill:#ff0006}.egg[data-type1=Electric] .egg-main{fill:#ffe600}.egg[data-type1=Fairy] .egg-main{fill:#f36ec2}.egg[data-type1=Fighting] .egg-main{fill:#fbbd47}.egg[data-type1=Fire] .egg-main{fill:#d94c32}.egg[data-type1=Flying] .egg-main{fill:#a0c7e8}.egg[data-type1=Ghost] .egg-main{fill:#dbdbdb}.egg[data-type1=Grass] .egg-main{fill:#a1f173}.egg[data-type1=Ground] .egg-main{fill:#ad5840}.egg[data-type1=Ice] .egg-main{fill:#0af}.egg[data-type1=Normal] .egg-main{fill:#e8e0a0}.egg[data-type1=Poison] .egg-main{fill:#c183c1}.egg[data-type1=Psychic] .egg-main{fill:#fa92b2}.egg[data-type1=Rock] .egg-main{fill:#d2c8ac}.egg[data-type1=Steel] .egg-main{fill:#b5b4b1}.egg[data-type1=Water] .egg-main{fill:#379eff}.egg[data-type2=Bug] .egg-spot{fill:#5ab690}.egg[data-type2=Dark] .egg-spot{fill:#111}.egg[data-type2=Dragon] .egg-spot{fill:#432489}.egg[data-type2=Electric] .egg-spot{fill:#cb0}.egg[data-type2=Fairy] .egg-spot{fill:#a1382b}.egg[data-type2=Fighting] .egg-spot{fill:#b94a00}.egg[data-type2=Fire] .egg-spot{fill:#ff9100}.egg[data-type2=Flying] .egg-spot{fill:#6896c6}.egg[data-type2=Ghost] .egg-spot{fill:#7c7c7c}.egg[data-type2=Grass] .egg-spot{fill:#2f9f59}.egg[data-type2=Ground] .egg-spot{fill:#763900}.egg[data-type2=Ice] .egg-spot{fill:#00ffbe}.egg[data-type2=Normal] .egg-spot{fill:#689050}.egg[data-type2=Poison] .egg-spot{fill:#682a68}.egg[data-type2=Psychic] .egg-spot{fill:#a13959}.egg[data-type2=Rock] .egg-spot{fill:#6d6d6d}.egg[data-type2=Steel] .egg-spot{fill:#7088b5}.egg[data-type2=Water] .egg-spot{fill:#445e9c}.pokemonCategory{position:absolute!important;left:2px;bottom:18px;height:24px;padding-top:4px}.pokemonCategory .category-0,.pokemonCategory .dropdown-item.category:nth-child(0){background:var(--pokemon-category-0)}.pokemonCategory .category-1,.pokemonCategory .dropdown-item.category:nth-child(1){background:var(--pokemon-category-1)}.pokemonCategory .category-2,.pokemonCategory .dropdown-item.category:nth-child(2){background:var(--pokemon-category-2)}.pokemonCategory .category-3,.pokemonCategory .dropdown-item.category:nth-child(3){background:var(--pokemon-category-3)}.pokemonCategory .category-4,.pokemonCategory .dropdown-item.category:nth-child(4){background:var(--pokemon-category-4)}.pokemonCategory .category-5,.pokemonCategory .dropdown-item.category:nth-child(5){background:var(--pokemon-category-5)}.pokemonCategory .category-6,.pokemonCategory .dropdown-item.category:nth-child(6){background:var(--pokemon-category-6)}.pokemonCategory .category-7,.pokemonCategory .dropdown-item.category:nth-child(7){background:var(--pokemon-category-7)}.pokemonCategory .category-8,.pokemonCategory .dropdown-item.category:nth-child(8){background:var(--pokemon-category-8)}.pokemonCategory .category-9,.pokemonCategory .dropdown-item.category:nth-child(9){background:var(--pokemon-category-9)}.pokemonCategory .category-10,.pokemonCategory .dropdown-item.category:nth-child(10){background:var(--pokemon-category-10)}.pokemonCategory .category-11,.pokemonCategory .dropdown-item.category:nth-child(11){background:var(--pokemon-category-11)}.pokemonCategory .category-12,.pokemonCategory .dropdown-item.category:nth-child(12){background:var(--pokemon-category-12)}.pokemonCategory .category-13,.pokemonCategory .dropdown-item.category:nth-child(13){background:var(--pokemon-category-13)}.pokemonCategory .category-14,.pokemonCategory .dropdown-item.category:nth-child(14){background:var(--pokemon-category-14)}.pokemonCategory .category-15,.pokemonCategory .dropdown-item.category:nth-child(15){background:var(--pokemon-category-15)}.pokemonCategory .category-16,.pokemonCategory .dropdown-item.category:nth-child(16){background:var(--pokemon-category-16)}.pokemonCategory .category-17,.pokemonCategory .dropdown-item.category:nth-child(17){background:var(--pokemon-category-17)}.pokemonCategory .category-18,.pokemonCategory .dropdown-item.category:nth-child(18){background:var(--pokemon-category-18)}.pokemonCategory .category-19,.pokemonCategory .dropdown-item.category:nth-child(19){background:var(--pokemon-category-19)}.pokemonCategory .category-20,.pokemonCategory .dropdown-item.category:nth-child(20){background:var(--pokemon-category-20)}.pokemonCategory button{width:16px;height:16px;border:1px solid #333;border-radius:50%;vertical-align:top}#damageCalcTypeDetailTable td,#pokemonList span,#pokemonList td,.centerSpan{vertical-align:middle}.pokemonCategory .category-display button{margin-right:-12px;-webkit-transition:margin-right .5s ease;transition:margin-right .5s ease}.pokemonCategory .category-display:hover button{margin-right:-6px;-webkit-transition:margin-right .5s ease;transition:margin-right .5s ease}.breeding-modal{max-width:1250px!important}.scrolling-div-breeding-filters,.scrolling-div-breeding-list{overflow-y:auto}@media (min-width:992px){.scrolling-div-breeding-list{height:calc(100vh - 190px)}.scrolling-div-breeding-filters{height:calc(100vh - 234px)}}@media (max-width:992px){.scrolling-div-breeding-list{height:calc(100vh - 300px)}.scrolling-div-breeding-filters{height:calc(100vh - 340px)}}.breedingListShiny{position:absolute;right:2px;bottom:35px;text-shadow:1px 1px 0 #000,-1px 1px 0 #000,1px -1px 0 #000,-1px -1px 0 #000}.breedingListPokerus{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;right:2px;bottom:7px}.hatchery-warnings{cursor:none;text-shadow:0 0 10px #000}.eggSlotModal{box-sizing:border-box;background-image:url(../assets/images/breeding/breedingSlot.png);background-size:100% 100%}.breeding-shadow-icon{position:absolute;right:2px;bottom:35px}#bulletinBoardModal div,#bulletinBoardModal tr{background-size:cover}#bulletinBoardModal td,#bulletinBoardModal tr{border:0}#bulletinBoardModal .card-body{font-size:1.15rem;overflow-y:auto}.bulletin-paper{min-height:365px;height:365px}.type-damage-bar{height:25px;cursor:pointer;margin:0 1px}.tile{position:relative;height:45px;border:1px solid #000;margin:1px;cursor:pointer}.tile-boss::after,.tile-chest::after{height:70%;top:15%;left:15%;content:'';display:block;width:70%}.tile:hover{opacity:.8}.tile:not(.tile-visited,.tile-invisible,.tile-player){-webkit-filter:brightness(50%);filter:brightness(50%)}.tile-invisible{background-color:#333}.tile-player{background-color:#2ecc71;position:relative;background-position:center center;background-repeat:no-repeat;background-image:var(--trainer-image);image-rendering:-webkit-optimize-contrast;image-rendering:pixelated}.tile-empty{background-color:#f5f5f5}.tile-entrance{background-color:#3498db}.tile-enemy{background-color:#e74c3c}.tile-chest{background-color:#f1c40f}.tile-chest::after{position:absolute;background:center/contain no-repeat var(--chest-image)}.tile-chest.tile-chest-common::after{--chest-image:url(../assets/images/dungeons/chest-common.png)}.tile-chest.tile-chest-rare::after{--chest-image:url(../assets/images/dungeons/chest-rare.png)}.tile-chest.tile-chest-epic::after{--chest-image:url(../assets/images/dungeons/chest-epic.png)}.tile-chest.tile-chest-legendary::after{--chest-image:url(../assets/images/dungeons/chest-legendary.png)}.tile-chest.tile-chest-mythic::after{--chest-image:url(../assets/images/dungeons/chest-mythic.png)}.tile-boss{background-color:#9b59b6}.tile-boss::after{position:absolute;background:url(../assets/images/dungeons/boss.svg) center/contain no-repeat}.tile-ladder{background-color:#5b5a40}.tile-ladder::after{position:absolute;top:15%;left:15%;content:'';display:block;height:90%;width:70%;background:url(../assets/images/dungeons/ladder.png) center/contain no-repeat}.healthbar-boss{background-color:#9b59b6}@media (max-width:768px){.dungeon-enemy{margin-top:-15px}.progress.hitpoints.dungeonhitpoints{bottom:65px}}.dungeon-board{width:100%;padding:20px;margin:auto}.dungeon-chest{margin-top:25px}@media (max-width:768px){.dungeon-chest{margin-top:20px;position:absolute;left:10%}.chest-button{position:absolute;margin-top:30px;right:10%}}.chest-button p{font-size:small;margin-bottom:0}.dungeon-button{margin-top:80px}@media (max-width:768px){.dungeon-button{margin-top:50px}}.dungeon-pokemon-locked{-webkit-filter:brightness(0);filter:brightness(0);opacity:.2}.dungeon-pokemon-preview{max-height:64px;height:auto;width:auto;margin:-10px -10px -12px;position:relative;z-index:1}#dungeonPokemonList .boss{z-index:1;position:absolute;bottom:-10px;left:-10px;width:35%}.dungeon-pokemon-pkrs{position:absolute;bottom:-12px;left:8px;width:70%;z-index:2}#farmModal ul.nav{width:100%}#farmView{margin:0!important}#seedList{padding-top:10px;min-height:362px}#mulchList{padding-top:10px}.seed-list-item{cursor:pointer;padding:3px;text-align:left!important}.seed-list-item :first-child{margin-right:3px}.berryLocked{-webkit-filter:brightness(0);filter:brightness(0);opacity:.2}.BerrySelected{cursor:url(../assets/images/farm/berry.png),auto}.MulchSelected{cursor:url(../assets/images/farm/mulch.png),auto}.ShovelSelected{cursor:url(../assets/images/farm/shovel.png),auto}.MulchShovelSelected{cursor:url(../assets/images/farm/mulchShovel.png),auto}.PlotSafeLockSelected,.ShiftPressed .plot-content{cursor:url(../assets/images/farm/plotSafeLock.png),auto}.WandererHandling{cursor:url(../assets/images/farm/wandererHandling.png),auto}#farmHandsView .plot:hover,#map path,#map rect,#plotList .plot:hover,#plotListCard .row .plot:hover,.clickable,.toggler-wrapper,[data-toggle=collapse],button{cursor:pointer}.Boost_Mulch{-webkit-filter:hue-rotate(200deg);filter:hue-rotate(200deg)}.Rich_Mulch{-webkit-filter:hue-rotate(90deg);filter:hue-rotate(90deg)}.Surprise_Mulch{-webkit-filter:hue-rotate(300deg);filter:hue-rotate(300deg)}.Amaze_Mulch{-webkit-filter:hue-rotate(250deg);filter:hue-rotate(250deg)}.Freeze_Mulch{-webkit-filter:brightness(200%) hue-rotate(210deg);filter:brightness(200%) hue-rotate(210deg)}.Gooey_Mulch{-webkit-filter:hue-rotate(30deg) saturate(200%);filter:hue-rotate(30deg) saturate(200%)}#plotList,#plotListCard .row{padding:10px}#plotList .plot,#plotListCard .row .plot{padding:2px}#plotList .plot .lock,#plotListCard .row .plot .lock{position:absolute;width:80%;left:10%;bottom:10%}#plotList .plot:hover,#plotListCard .row .plot:hover{-webkit-filter:brightness(95%);filter:brightness(95%)}#plotList .plot:hover .plotLockHover,#plotListCard .row .plot:hover .plotLockHover{display:-webkit-box;display:-ms-flexbox;display:flex}#plotList .plotLocked,#plotListCard .row .plotLocked{opacity:.7}#plotList .plotLockHover,#plotListCard .row .plotLockHover{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#plotList .plotImage,#plotListCard .row .plotImage{aspect-ratio:1;width:100%;position:relative}#plotList .plotImage .plotSafeLockIcon,#plotListCard .row .plotImage .plotSafeLockIcon{position:absolute;bottom:5px;right:5px;height:16px;width:16px;-webkit-filter:drop-shadow(.2px .2px 0 #000) drop-shadow(-.2px .2px 0 #000) drop-shadow(.2px -.2px 0 #000) drop-shadow(-.2px -.2px 0 #000);filter:drop-shadow(.2px .2px 0 #000) drop-shadow(-.2px .2px 0 #000) drop-shadow(.2px -.2px 0 #000) drop-shadow(-.2px -.2px 0 #000)}#plotList .plotButton,#plotListCard .row .plotButton{top:0;left:0;width:100%;height:100%;position:absolute}#farmDisplay #plotListCard .row .plotImage .plotSafeLockIcon{bottom:3px;right:3px;height:12px;width:12px;-webkit-filter:none;filter:none}#farmDisplay #plotListCard .row .plotImage .wandererCapture,#farmDisplay #plotListCard .row .plotImage .wandererSprite{height:60%;width:60%;position:absolute;pointer-events:none;top:-10%;left:-10%}#farmHandsView .plotEnabled{-webkit-filter:hue-rotate(90deg);filter:hue-rotate(90deg)}#farmHandsView .plotDisabled{-webkit-filter:brightness(50%) opacity(90%);filter:brightness(50%) opacity(90%)}@media (min-width:992px){.berryDexPreviewColumn{max-height:calc(100vh - 205px)}}@media (max-width:991px){.berryDexPreviewColumn{max-height:calc(100vh - 225px)}}@media (max-width:767px){#berryDexPreviewContainer{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}#berryDexPreviewList{max-height:calc(47vh - 5px)}#berryDexPreviewTable{max-height:calc(50vh - 205px)}}@media (max-width:767px) and (max-height:550px){#berryDexPreviewList{max-height:calc(40vh - 50px)}}#berryDexPreviewTable{scrollbar-width:thin}#berryDexModal .wanderPokemonList,#berryDexPreviewTable .wanderPokemonList{width:100%}#berryDexModal .wanderPokemonList .list-inline-item,#berryDexPreviewTable .wanderPokemonList .list-inline-item{position:relative;margin-top:7px}#berryDexModal .wanderPokemonList .list-inline-item .lock,#berryDexPreviewTable .wanderPokemonList .list-inline-item .lock{position:absolute;width:100%;left:0;bottom:0;z-index:10}#berryDexModal .wanderPokemonList .list-inline-item .shiny,#berryDexPreviewTable .wanderPokemonList .list-inline-item .shiny{position:absolute;top:10px;right:-5px}#berryDexModal .wanderPokemonList .list-inline-item:nth-child(n+6),#berryDexPreviewTable .wanderPokemonList .list-inline-item:nth-child(n+6){margin-top:14px}.wandererCapture,.wandererSprite{height:80px;width:80px;position:absolute;pointer-events:none;top:-16px;left:-16px}.wandererSprite{image-rendering:-webkit-optimize-contrast;image-rendering:pixelated}.safari-item,img.pixelated{-ms-interpolation-mode:nearest-neighbor;image-rendering:-o-pixelated}@-webkit-keyframes flash{0%,100%{opacity:1}50%{opacity:.25}}@keyframes flash{0%,100%{opacity:1}50%{opacity:.25}}@-webkit-keyframes flee{from{opacity:1}to{opacity:0}}@keyframes flee{from{opacity:1}to{opacity:0}}.pokemonSprite.walkDownFlash{background-position:0 0;opacity:1;-webkit-animation:walkDown .6s steps(4) infinite,flash 1.5s linear infinite;animation:walkDown .6s steps(4) infinite,flash 1.5s linear infinite}.pokemonSprite.walkDownFlee{background-position:0 0;opacity:1;-webkit-animation:walkDown .6s steps(4) infinite,flee .25s linear 1;animation:walkDown .6s steps(4) infinite,flee .25s linear 1}.pokeball-defeated{opacity:.6!important}#gymGoContainer,#temporaryBattleGoContainer{position:absolute;display:block;top:30px;left:0;z-index:10;width:100%;height:100%}.bounce,.centerSpan,.centeredBySpan,.mineReward{display:inline-block}.trainer{position:absolute;left:65%;top:25%}.stop-auto{position:absolute;top:68px;left:10px}@media (max-width:768px){.trainer{top:30%}.progress.hitpoints.trainerhitpoints{bottom:50px}.stop-auto{top:85px}}#showItemsModal .smallImage{padding-right:10px}.item-selected{background-color:#529ede!important;border-radius:5px;color:#fff!important}.pokemon-selected{background-color:#529ede!important;color:#fff!important}.amount-button{height:50px;text-align:center}.stoneEvolutionStatuses knockout{position:relative}.stoneEvolutionStatuses .lock{position:absolute;left:40%;bottom:-36%;width:15px;height:15px}.key-item,.key-item-selected{width:48px;height:48px;margin:10px}.key-item{border:2px solid #000;padding:8px}.key-item-selected{border:2px solid #ff2f39}.key-item-locked{-webkit-filter:brightness(0);filter:brightness(0);opacity:.2}.item-bag-item{margin:10px}@font-face{font-family:pokemonFont;src:url(../assets/fonts/firered.ttf)}#toaster{position:fixed;left:0;top:0;padding:10px;width:370px;z-index:10020;pointer-events:none}#toaster .toast{pointer-events:all}#toaster .toast-body .close{color:#f5f5f5}#toaster img.icon{height:28px;margin-right:5px}#toaster img.pokemonIcon{height:38px;margin:-5px 0 -5px -5px}#oakItemLoadout .tight .btn{padding-left:unset!important;padding-right:unset!important}@media (min-width:1200px){.container{width:70%}}@media (min-width:768px){.scrolling-div{overflow-y:auto;max-height:calc(100vh - 290px);min-height:150px}#left-column:empty,#middle-sort-column:empty,#right-column:empty{height:30px;border-color:rgba(129,129,129,.3);border-style:dashed;border-width:1px;margin-bottom:15px}#left-column:empty::after,#middle-sort-column:empty::after,#right-column:empty::after{color:rgba(129,129,129,.3);font-size:10px;content:'DRAG AND DROP MODULES HERE'}}@media (max-width:768px){#gameTitle{margin-right:160px}.mobileBattleTitle{height:29%}.mobileBattleTitle .left,.mobileBattleTitle .right{margin-top:52px}.hitpoints{bottom:85px}.pageItemFooter{font-size:14px!important}}@media (max-width:992px){.table-sm td,.table-sm th{padding:.1rem!important}}.bg-ocean{background:url(../assets/images/safari/tiles/waterC.png)}.modal.show .bg-ocean{-webkit-animation:animatedOcean 60s linear infinite;animation:animatedOcean 60s linear infinite}@-webkit-keyframes animatedOcean{0%{background-position:0 0}50%{background-position:100% -50%}100%{background-position:200% -100%}}@keyframes animatedOcean{0%{background-position:0 0}50%{background-position:100% -50%}100%{background-position:200% -100%}}@-webkit-keyframes bounceBackground{from{background-position:top left}to{background-position:bottom right}}@keyframes bounceBackground{from{background-position:top left}to{background-position:bottom right}}.flash{color:#f2f;-webkit-animation:flash linear .5s infinite;animation:flash linear .5s infinite}.slow-flash{color:#f2f;-webkit-animation:flash linear 1s infinite;animation:flash linear 1s infinite}img.pixelated{image-rendering:-webkit-optimize-contrast;image-rendering:pixelated}@keyframes flash{0%,100%{opacity:1}50%{opacity:.1}}.centerSpan{height:100%}.pokemon-font{font-family:pokemonFont,"Helvetica Neue",sans-serif}.smallButton{padding:7px}.smallFont{font-size:14px}#battleContainer{min-height:200px}div.progress{position:relative;min-height:15px;background-color:#555;color:#f5f5f5}.progress .progress-bar span{text-align:center;position:absolute;display:block;width:100%;line-height:1rem;color:#f5f5f5}#pokemonList .pokemonAttack,.card span{text-align:left}.progress .progress-bar{color:#f5f5f5}body:hover{cursor:default}#startMenu .dropdown-menu{border:1px solid #000}#startMenu .dropdown-item,#startMenu .dropdown-toggle{font-family:pokemonFont,"Helvetica Neue",sans-serif}.card span{line-height:40px}.card span span{margin-left:0}.dungeon .card span{margin-left:5px}.image-starter{border:1px solid #fff}.image-starter:hover{border:1px solid #1d93d1}.table{font-size:14px;margin-bottom:0}.smallImage{max-height:56px;height:auto;width:auto;margin:-10px}td{background-clip:padding-box}#pokemonList span{line-height:inherit}#pokemonList td{padding:.3rem}#pokemonList td>div{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#saveTab2 input,.col-lg-3 #pokemonList thead .pokemonName,.hidden{display:none}#pokemonList .pokemonName{width:100%;-webkit-box-flex:10;-ms-flex-positive:10;flex-grow:10}#pokemonList .pokemonAttack,#pokemonList .pokemonLevel{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;min-width:45px}#pokemonList .pokemonLevel{text-align:right}.col-lg-6 #pokemonList thead{line-height:10px}.col-lg-6 #pokemonList thead .pokemonName{margin-right:15px}.col-lg-6 #pokemonList .pokemonName{width:100%}.col-lg-6 #pokemonList .pokemonAttack{text-align:left}.no-select :not(input){-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none}.btn-static,.no-click{pointer-events:none}.featureList{margin-top:6px}.featureList .btn{padding:6px;white-space:normal}.vertical-middle{vertical-align:middle!important}.modal{text-align:center}.questDescription,.tooltip-inner .pokeballFilterOptionDescriptions li{text-align:left}.badgeEntry{list-style-type:none}.badgeEntry p::after{content:' Badge'}.badge-not-acquired{-webkit-filter:grayscale(70%) contrast(3%);filter:grayscale(70%) contrast(3%)}.saveTextArea{height:200px;width:100%;font-size:14px}#saveTab3 .container{padding-top:10px}.enemy{min-height:96px;margin-top:40px}@media (max-width:768px){.enemy{margin-top:20px}}.battle-view{min-height:280px!important;background-image:url(../assets/images/battleBackground/default.png);background-size:cover;background-position:bottom}.battle-view.forest{background-image:url(../assets/images/battleBackground/forest.png);background-position:top}.battle-view.water{background-image:url(../assets/images/battleBackground/water.png);background-position:top}.battle-view.ice{background-image:url(../assets/images/battleBackground/ice.png);background-position:top}.battle-view.fire{background-image:url(../assets/images/battleBackground/fire.png);background-position:0 -20px}.battle-view.cave{background-image:url(../assets/images/battleBackground/cave.png);background-position:top}.battle-view.cave-gem,.battle-view.gem{background-image:url(../assets/images/battleBackground/cave-gem.png);background-position:center}.battle-view.desert{background-image:url(../assets/images/battleBackground/desert.png);background-position:center}.battle-view.power-plant{background-image:url(../assets/images/battleBackground/power-plant.png);background-position:center}.battle-view.mansion{background-image:url(../assets/images/battleBackground/mansion.png);background-position:center}.battle-view.graveyard{background-image:url(../assets/images/battleBackground/graveyard.png);background-position:center}.battle-view h2{font-size:2rem}.pageItemFooter .left,.pageItemFooter .right,.pageItemTitle .left,.pageItemTitle .right{position:absolute;font-size:16px}.battle-view span{line-height:1.5}.battle-view .timer{position:absolute;width:100%;height:20px;top:36px}.battle-view .pokeball-animated{margin-top:25px}@media (max-width:768px){.battle-view .pokeball-animated{margin-top:10px}}.battle-view .catchChance{color:#000}.battle-view .hitpoints{height:20px;position:absolute;bottom:70px;width:90%;left:5%}.pageItemFooter,.pageItemTitle{width:100%;color:#f5f5f5;background-color:rgba(0,0,0,.7);margin:0}@media (max-width:768px){.battle-view .hitpoints{bottom:90px}}.pageItemTitle .right{right:4px;top:4px}.pageItemTitle .left{left:4px;top:4px}.pageItemTitle .title-left,.pageItemTitle .title-right{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pageItemFooter{position:absolute;bottom:0}.pageItemFooter .right{right:4px;bottom:4px}.pageItemFooter .left{left:4px;bottom:4px}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:0;background-color:#F5F5F5}::-webkit-scrollbar{width:8px;height:8px;background-color:#F5F5F5}::-webkit-scrollbar-thumb{border-radius:8px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#555}img.fit-width{max-width:100%;max-height:auto}td.tight{width:1px;white-space:nowrap}.all-pointers{pointer-events:all!important}#map .iconLocation,#map text,#mapTooltip,.animated-currency,.modal-open .resizable-container,.weatherForecastPassed{pointer-events:none}.introjs-fixParent.modal,.introjs-fixParent.modal-dialog{position:absolute!important}.bg-locked{background-color:var(--locked)}.bg-incomplete{background-color:var(--incomplete)}.bg-questAtLocation{background-color:var(--questAtLocation)}.bg-uncaughtPokemon{background-color:var(--uncaughtPokemon)}.bg-uncaughtShadowPokemon{background-color:var(--uncaughtShadowPokemon)}.bg-uncaughtShinyPokemon{background-color:var(--uncaughtShinyPokemon)}.bg-uncaughtShinyPokemonAndMissingAchievement{background-color:var(--uncaughtShinyPokemonAndMissingAchievement)}.bg-missingAchievement{background-color:var(--missingAchievement)}.bg-missingResistant{background-color:var(--missingResistant)}.bg-completed{background-color:var(--completed)}.text-locked{color:var(--locked)}.text-incomplete{color:var(--incomplete)}.text-uncaughtPokemon{color:var(--uncaughtPokemon)}.text-uncaughtShinyPokemon{color:var(--uncaughtShinyPokemon)}.text-completed{color:var(--completed)}.animated-currency{position:absolute;opacity:1;z-index:50}.popover{max-width:450px!important}.map-legend>[class*=col-]{padding-top:2px;padding-bottom:2px}.legend-item>span::before{content:"- "}.toggler-wrapper{display:block;width:45px;height:25px;position:relative}.toggler-wrapper input[type=checkbox]{display:none}.toggler-wrapper input[type=checkbox]:checked+.toggler-slider{background-color:var(--primary)}.toggler-wrapper .toggler-slider{background-color:#ccc;position:absolute;border-radius:100px;top:0;left:0;width:100%;height:100%;-webkit-transition:all .3s ease;transition:all .3s ease}.toggler-wrapper .toggler-knob{position:absolute;-webkit-transition:all .3s ease;transition:all .3s ease}.toggler-wrapper.style-1 input[type=checkbox]:checked+.toggler-slider .toggler-knob{left:calc(100% - 19px - 3px)}.toggler-wrapper.style-1 .toggler-knob{width:calc(25px - 6px);height:calc(25px - 6px);border-radius:50%;left:3px;top:3px;background-color:#fff}.gender-toggle.toggler-wrapper .toggler-knob::after{content:'M';position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:65%;text-transform:uppercase;color:#000}.gender-toggle.toggler-wrapper .toggler-slider{background-color:#499FFF}.gender-toggle.toggler-wrapper.style-1 input[type=checkbox]:checked+.toggler-slider .toggler-knob::after{content:'F'}.gender-toggle.toggler-wrapper input[type=checkbox]:checked+.toggler-slider{background-color:#F6807A}.gender-icon-female{color:#F6807A}.gender-icon-male{color:#499FFF}i[class*=gender-icon-]{font-size:24px}#profile-trainer-card{max-width:330px;margin:auto}.checkbox-disabled{opacity:.5}.overlay{position:absolute;top:0;left:0;width:100%;height:100%}@media (min-width:992px){.collapse.dont-collapse-lg{display:block!important;height:auto!important;visibility:visible}#pokemonStatisticsModal .modal-dialog{max-width:600px}}button.btn-circle{width:1.5em;height:1.5em;border-radius:50%;text-shadow:none;opacity:1;font-weight:700;line-height:1;float:right;border:0;padding:0}.shadow-icon{-webkit-filter:drop-shadow(0 0 2px #000);filter:drop-shadow(0 0 2px #000);width:20px}.darker-25{-webkit-filter:brightness(75%);filter:brightness(75%)}.breeding-modal h4,.pokedex-modal h4{font-size:1.5rem}.weatherForecastPassed{opacity:.25}@media (max-width:992px){#pokemonStatisticsModal .table-sm td,#pokemonStatisticsModal .table-sm th{padding:.3rem!important}}.category-dropdown,.multiselect-dropdown{max-height:50vh;overflow-y:auto}.resizable-container{resize:vertical;overflow:auto;min-height:50px}.lazy-loader-container{height:90px;padding-bottom:10px;overflow:hidden}#middle-column .currency-wrapper .currency-line{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly}#middle-column .currency-wrapper.short-currencies{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly}#middle-column .currency-wrapper.short-currencies>.currency-line{display:contents}#middle-column .currency-wrapper.short-currencies .currency-display{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#left-column .currency-wrapper,#left-column-2 .currency-wrapper,#right-column .currency-wrapper,#right-column-2 .currency-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly}#left-column .currency-wrapper .currency-line,#left-column-2 .currency-wrapper .currency-line,#right-column .currency-wrapper .currency-line,#right-column-2 .currency-wrapper .currency-line{display:contents}#left-column .currency-wrapper .currency-display,#left-column-2 .currency-wrapper .currency-display,#right-column .currency-wrapper .currency-display,#right-column-2 .currency-wrapper .currency-display{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.dropdown-toggle-no-arrow::after{content:none!important}.no-emoji-font{font-family:Lato,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}#map path,#map rect{fill:transparent}#map .locked{fill:var(--locked);opacity:.5}#map .incomplete{fill:var(--incomplete);opacity:.6}#map .questAtLocation{fill:var(--questAtLocation);opacity:.6}#map .uncaughtPokemon{fill:var(--uncaughtPokemon);opacity:.6}#map .uncaughtShadowPokemon{fill:var(--uncaughtShadowPokemon);opacity:.6}#map .uncaughtShinyPokemon{fill:var(--uncaughtShinyPokemon);opacity:.6}#map .uncaughtShinyPokemonAndMissingAchievement{fill:var(--uncaughtShinyPokemonAndMissingAchievement);opacity:.6}#map .missingAchievement{fill:var(--missingAchievement);opacity:.6}#map .missingResistant{fill:var(--missingResistant);opacity:.6}#map .completed{fill:var(--completed);opacity:.6}#map .flash,#map .slow-flash{opacity:1;fill:gold;stroke:#000}#map .iconLocation{transform-box:fill-box;-webkit-transform-origin:center;transform-origin:center}#map .hide{opacity:0}#mapTooltip{position:absolute;left:0;font-size:13px;font-family:pokemonFont,"Helvetica Neue",sans-serif;padding:3px;border:1px solid #7f7f7f}.npc-name{font-weight:400}.npc-image{margin-top:8px}.npc-roamer-image{margin-top:-10px}.npc-dialog{margin-top:20px;margin-bottom:20px}#oakItemsContainer button,#oakItemsContainer button img{width:100%}.oak-item-locked{-webkit-filter:brightness(0);filter:brightness(0);opacity:.2}.pokeball-animated{height:96px;padding:10px;-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}@-webkit-keyframes spin{0%,30%,80%{-webkit-transform:rotate(0);transform:rotate(0)}15%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}50%{-webkit-transform:rotate 0deg;transform:rotate 0deg}65%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}}@keyframes spin{0%,30%,80%{-webkit-transform:rotate(0);transform:rotate(0)}15%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}50%{-webkit-transform:rotate 0deg;transform:rotate 0deg}65%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}}.pokeball-small{width:32px;height:32px;opacity:.2}.pokeball-smallest{width:16px;height:16px;margin-bottom:3px;margin-left:3px;-webkit-box-sizing:content-box;box-sizing:content-box}#routeBattleContainer .pokeball-smallest{margin:0}.pokeball-selected{opacity:1}#dig.disabled,.pokedexEntry.disabled{opacity:.5;pointer-events:none}#pokeballSelector .card-body span{line-height:32px}#pokeballSelector .card-body table{table-layout:fixed}#pokeballSelector .card-body table tr.pokeballFilterDisabled{background-color:gray;color:#d3d3d3}#pokeballSelector .card-body table td:nth-child(1),#pokeballSelector .card-body table th:nth-child(1){width:50%;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}#pokeballSelector .card-body table td,#pokeballSelector .card-body table th{padding:.3rem}#pokeballFilterConfigs .pokeballFilterWrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:0 auto 1rem;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilterDragHandle,#townView{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilterDragHandle{width:1.5rem;cursor:-webkit-grab;cursor:grab;display:-webkit-box;display:-ms-flexbox;display:flex;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:1px solid rgba(200,200,200,.3);border-radius:.25rem 0 0 .25rem}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilterDragHandle::after{content:"⣶";display:block;padding:50% 0}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilterDragHandle:active{cursor:-webkit-grabbing;cursor:grabbing}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter{border:1px solid rgba(200,200,200,.3);border-width:1px 0}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterHeader{background-color:rgba(0,0,0,.1);padding:.3rem 1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterHeader .pokeballFilterName{margin:0 1rem}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterHeader .pokeballFilterEnableToggle{margin-right:1rem}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterBody .pokeballFilterSettings{border-top:1px solid rgba(120,120,120,.3);border-bottom:1px solid rgba(120,120,120,.3);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.3rem}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterBody .pokeballFilterSettings>*{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterBody .pokeballFilterOptions{width:100%}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterBody .pokeballFilterOptions .bg-faded{background-color:rgba(1,1,1,.5)}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterBody .pokeballFilterOptions .bg-faded td,#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterBody .pokeballFilterOptions .bg-faded thead{background-color:transparent}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterBody .pokeballFilterOptions .bg-faded td:last-child{width:140px}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilter .pokeballFilterExpandBtn{font-size:.75em;padding:.5em 0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilterDelete{width:1.5rem}#pokeballFilterConfigs .pokeballFilterWrapper .pokeballFilterDelete .deleteButton{height:100%;width:100%;display:block;padding:0;border-radius:0 .25rem .25rem 0}#pokeballFilterTestTab #pokeballFilterTestInput table{margin:0 auto}#pokeballFilterTestTab #pokeballFilterTestResults{margin-top:1rem;border-top:1px solid gray}#pokeballFilterTestTab #pokeballFilterTestResults #pokeballFilterTestMatch{border-bottom:1px solid gray;padding:1rem 2rem;margin-bottom:1rem;position:relative}#pokeballFilterTestTab #pokeballFilterTestResults #pokeballFilterTestMatch>img{position:absolute;right:0;top:calc(50% - 16px)}#pokeballFilterTestTab #pokeballFilterTestResults .pokeballFilterDisabled{background-color:gray;color:#d3d3d3}.tooltip-inner .pokeballFilterOptionDescriptions{padding-left:20px}.pokedexEntry{border-radius:6px;list-style-type:none;margin:12px;max-width:calc(50% - 24px)}.pokedexEntry img{padding:16px 0}.pokedexEntry .pokedex-pokemon-sprite{width:80px;height:112px}.pokedexEntry span{position:absolute;color:#f5f5f5;background-color:rgba(0,0,0,.5);left:0;right:0;font-size:14px}.pokedexEntry span.id::before{content:'#'}.pokedexEntry span.attack::before{content:'Attack: '}.pokedexEntry.category-highlight{-webkit-box-shadow:0 0 6px 8px var(--danger);box-shadow:0 0 6px 8px var(--danger)}.pokemon-not-seen{-webkit-filter:brightness(0);filter:brightness(0);opacity:.6}.pokemon-seen-but-not-caught{-webkit-filter:brightness(.5) grayscale(1);filter:brightness(.5) grayscale(1);opacity:.6}.pokedex-border-bottom{border-bottom:1px solid grey}@media (min-width:768px){.checkbox-border-x{border-left:1px solid grey;border-right:1px solid grey}.scrolling-div-pokedex{overflow-y:auto;height:calc(100vh - 140px)}}@media (max-width:768px){.filters-container{overflow-y:auto;max-height:calc(100vh - 200px)}.scrolling-div-pokedex{overflow-y:auto;height:calc(100vh - 240px)}}.pokedex-modal{max-width:1250px!important}@media (min-width:768px){.pokemon-list{position:relative}.pokemon-list::before{content:"";position:absolute;left:-1px;height:100%;border-left:1px solid grey}}.pokedex-top-text{top:0;border-top-left-radius:6px;border-top-right-radius:6px}.pokedex-bottom-text{bottom:0;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.dropdown .dropdown-item,.dropdown button{word-wrap:break-word;white-space:normal!important;overflow:hidden}.dropdown-item:hover{background-color:var(--secondary)!important}.btn-dropdown:hover{color:#444!important}.pokemonSprite{background-size:400% 400%}.pokemonSprite.walkDown{background-position:0 0;-webkit-animation:walkDown .6s steps(4) infinite;animation:walkDown .6s steps(4) infinite}@-webkit-keyframes walkDown{100%{background-position:133.333% 0}}@keyframes walkDown{100%{background-position:133.333% 0}}.pokemonSprite.walkLeft{background-position:0 33.3333%;-webkit-animation:walkLeft .6s steps(4) infinite;animation:walkLeft .6s steps(4) infinite}@-webkit-keyframes walkLeft{100%{background-position:133.333% 33.3333%}}@keyframes walkLeft{100%{background-position:133.333% 33.3333%}}.pokemonSprite.walkRight{background-position:0 66.6666%;-webkit-animation:walkRight .6s steps(4) infinite;animation:walkRight .6s steps(4) infinite}@-webkit-keyframes walkRight{100%{background-position:133.333% 66.6666%}}@keyframes walkRight{100%{background-position:133.333% 66.6666%}}.pokemonSprite.walkUp{background-position:0 100%;-webkit-animation:walkUp .6s steps(4) infinite;animation:walkUp .6s steps(4) infinite}@-webkit-keyframes walkUp{100%{background-position:133.333% 100%}}@keyframes walkUp{100%{background-position:133.333% 100%}}#questHead{margin-bottom:15px}.quest{padding:5px 0}#refreshQuests{margin-right:auto}.questReward{vertical-align:middle}.questDisplayBlock .btn{height:20px;line-height:0}.questDisplayBlock .progress{position:relative;height:20px}.questDisplayBlock .progress .progress-bar span{text-align:center;position:absolute;display:block;width:100%;line-height:1rem}.questDisplayBlock .card-header{position:relative;margin-top:1px}.questDisplayBlock .card-header .info{position:absolute;top:0;right:5px}.questDisplayBlock table{margin-bottom:4px}.questDisplayBlock:last-child table{margin-bottom:0}.safariSquare{height:32px;width:32px!important;max-width:32px;margin:0!important;padding:0!important;text-align:center}#safariModal .controls{position:fixed;bottom:10px;z-index:500;max-width:180px;font-size:40px}#safariModal .pokemonSprite{position:absolute;width:40px;height:40px}#sprite{height:56px;width:56px;z-index:2;background-image:url(../assets/images/safari/player.png);background-size:400% 400%}#sprite.water{background-image:url(../assets/images/safari/player-surf.png)}#sprite.water.walkdown{-webkit-animation:walkdown 4s steps(4) infinite;animation:walkdown 4s steps(4) infinite}@-webkit-keyframes walkdown{100%{background-position:133.333% 0}}#sprite.water.walkleft{-webkit-animation:walkleft 4s steps(4) infinite;animation:walkleft 4s steps(4) infinite}@-webkit-keyframes walkleft{100%{background-position:133.333% 33.3333%}}#sprite.water.walkright{-webkit-animation:walkright 4s steps(4) infinite;animation:walkright 4s steps(4) infinite}@-webkit-keyframes walkright{100%{background-position:133.333% 66.6666%}}#sprite.water.walkup{-webkit-animation:walkup 4s steps(4) infinite;animation:walkup 4s steps(4) infinite}@-webkit-keyframes walkup{100%{background-position:133.333% 100%}}#sprite.walkdown{background-position:0 0}#sprite.walkleft{background-position:0 33.3333%}#sprite.walkright{background-position:0 66.6666%}#sprite.walkup{background-position:0 100%}#sprite.moving.walkdown{-webkit-animation:walkdown .6s steps(4) infinite;animation:walkdown .6s steps(4) infinite}@keyframes walkdown{100%{background-position:133.333% 0}}#sprite.moving.walkleft{-webkit-animation:walkleft .6s steps(4) infinite;animation:walkleft .6s steps(4) infinite}@keyframes walkleft{100%{background-position:133.333% 33.3333%}}#sprite.moving.walkright{-webkit-animation:walkright .6s steps(4) infinite;animation:walkright .6s steps(4) infinite}@keyframes walkright{100%{background-position:133.333% 66.6666%}}#sprite.moving.walkup{-webkit-animation:walkup .6s steps(4) infinite;animation:walkup .6s steps(4) infinite}.bounce,.safari-roll-left{-webkit-animation-timing-function:ease-in-out}@keyframes walkup{100%{background-position:133.333% 100%}}.bounce{position:relative;-webkit-transform:translateY(62px);transform:translateY(62px);-webkit-animation-name:bounceall;animation-name:bounceall;animation-timing-function:ease-in-out}@-webkit-keyframes bounceall{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%,20%,55%,80%,95%{-webkit-transform:translateY(62px);transform:translateY(62px)}40%{-webkit-transform:translateY(22px);transform:translateY(22px)}70%{-webkit-transform:translateY(47px);transform:translateY(47px)}90%{-webkit-transform:translateY(57px);transform:translateY(57px)}}@keyframes bounceall{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%,20%,55%,80%,95%{-webkit-transform:translateY(62px);transform:translateY(62px)}40%{-webkit-transform:translateY(22px);transform:translateY(22px)}70%{-webkit-transform:translateY(47px);transform:translateY(47px)}90%{-webkit-transform:translateY(57px);transform:translateY(57px)}}.safari-roll-left{-webkit-animation-name:roll-left;animation-name:roll-left;animation-timing-function:ease-in-out}@-webkit-keyframes roll-left{0%,100%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(-45deg) translate(-8px,-10px);transform:rotate(-45deg) translate(-8px,-10px)}}@keyframes roll-left{0%,100%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(-45deg) translate(-8px,-10px);transform:rotate(-45deg) translate(-8px,-10px)}}.safari-roll-right{-webkit-animation-name:roll-right;animation-name:roll-right;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes roll-right{0%,100%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(45deg) translate(8px,-10px);transform:rotate(45deg) translate(8px,-10px)}}@keyframes roll-right{0%,100%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(45deg) translate(8px,-10px);transform:rotate(45deg) translate(8px,-10px)}}.pulse{-webkit-animation-name:pulseAnimation;animation-name:pulseAnimation;-webkit-animation-duration:350ms;animation-duration:350ms;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes pulseAnimation{0%,100%{-webkit-transform:scale(1);transform:scale(1)}45%,55%{-webkit-transform:scale(1.3);transform:scale(1.3)}}@keyframes pulseAnimation{0%,100%{-webkit-transform:scale(1);transform:scale(1)}45%,55%{-webkit-transform:scale(1.3);transform:scale(1.3)}}.spin{-webkit-animation-name:spin;animation-name:spin;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-timing-function:linear;animation-timing-function:linear}@keyframes spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.safariCapture{-webkit-transform:scale(0) translate(50px,-150px);transform:scale(0) translate(50px,-150px)}#safariBody{background-image:url(../assets/images/safari/tiles/ground.png)}#safariBattleModal .message{width:100%;text-align:center}#safariBattleModal .modal-body.p-0{overflow:hidden}#safariBattleModal .pageItemFooter{z-index:10000}@media (max-width:768px){#safariBattleModal .pageItemFooter{font-size:25px}#safariBattleModal .enemy{margin-top:50px}}#safariBattleModal .modal-footer.p-0 .dropdown-menu{z-index:10001}.safari-item{background-image:url(../assets/images/safari/item.png);position:absolute;width:32px;height:32px;background-size:100% 100%;image-rendering:-webkit-optimize-contrast;image-rendering:pixelated;z-index:1}.play-button{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;-webkit-transform:scale(var(--ggs,1));transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:20px}.play-button::before{content:"";display:block;-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;width:0;height:10px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:6px solid;top:4px;left:7px}.shopItem{margin-top:10px;margin-bottom:10px;padding:0 5px}.shopItem p{margin-top:-16px}.shopItem p:first-of-type{margin-top:-5px}.shopItem p:last-of-type{margin-bottom:5px}.shopItem:hover{background-color:#ededed}.shopItemSelected,.shopItemSelected:hover{background-color:#dedede}.currencyImage{height:20px}.loader-content{position:absolute;top:50%;left:50%;margin-top:-48px;margin-left:-48px}.loader-pokeball{max-width:80px;-webkit-animation-name:loader;animation-name:loader;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes loader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cerulean img[src="assets/images/dungeons/boss.svg"],.cosmo img[src="assets/images/dungeons/boss.svg"],.cyborg img[src="assets/images/pokeball/None.svg"],.cyborg img[src="assets/images/fa-cog.svg"],.darkly img[src="assets/images/pokeball/None.svg"],.darkly img[src="assets/images/fa-cog.svg"],.flatly img[src="assets/images/dungeons/boss.svg"],.journal img[src="assets/images/dungeons/boss.svg"],.litera img[src="assets/images/dungeons/boss.svg"],.lumen img[src="assets/images/dungeons/boss.svg"],.lux img[src="assets/images/dungeons/boss.svg"],.materia img[src="assets/images/dungeons/boss.svg"],.minty img[src="assets/images/dungeons/boss.svg"],.pulse img[src="assets/images/dungeons/boss.svg"],.sandstone img[src="assets/images/dungeons/boss.svg"],.simplex img[src="assets/images/dungeons/boss.svg"],.sketchy img[src="assets/images/dungeons/boss.svg"],.slate img[src="assets/images/pokeball/None.svg"],.slate img[src="assets/images/fa-cog.svg"],.solar img[src="assets/images/pokeball/None.svg"],.solar img[src="assets/images/fa-cog.svg"],.spacelab img[src="assets/images/dungeons/boss.svg"],.superhero img[src="assets/images/pokeball/None.svg"],.superhero img[src="assets/images/fa-cog.svg"],.united img[src="assets/images/dungeons/boss.svg"],.yeti img[src="assets/images/dungeons/boss.svg"]{-webkit-filter:invert(1) brightness(90%);filter:invert(1) brightness(90%)}.cyborg .dungeon-pokemon-locked,.darkly .dungeon-pokemon-locked,.slate .dungeon-pokemon-locked,.solar .dungeon-pokemon-locked,.superhero .dungeon-pokemon-locked{-webkit-filter:brightness(0) invert(100%);filter:brightness(0) invert(100%);opacity:.3}.cyborg code,.darkly code,.slate code,.solar code,.superhero code{color:#f291bf}.cosmo img[src="assets/images/volume-high.svg"],.cosmo img[src="assets/images/volume-xmark.svg"],.cosmo img[src="assets/images/floppy-disk.svg"],.cyborg img[src="assets/images/volume-high.svg"],.cyborg img[src="assets/images/volume-xmark.svg"],.cyborg img[src="assets/images/floppy-disk.svg"],.darkly img[src="assets/images/volume-high.svg"],.darkly img[src="assets/images/volume-xmark.svg"],.darkly img[src="assets/images/floppy-disk.svg"],.flatly img[src="assets/images/volume-high.svg"],.flatly img[src="assets/images/volume-xmark.svg"],.flatly img[src="assets/images/floppy-disk.svg"],.journal img[src="assets/images/volume-high.svg"],.journal img[src="assets/images/volume-xmark.svg"],.journal img[src="assets/images/floppy-disk.svg"],.litera img[src="assets/images/volume-high.svg"],.litera img[src="assets/images/volume-xmark.svg"],.litera img[src="assets/images/floppy-disk.svg"],.minty img[src="assets/images/volume-high.svg"],.minty img[src="assets/images/volume-xmark.svg"],.minty img[src="assets/images/floppy-disk.svg"],.sandstone img[src="assets/images/volume-high.svg"],.sandstone img[src="assets/images/volume-xmark.svg"],.sandstone img[src="assets/images/floppy-disk.svg"],.sketchy img[src="assets/images/volume-high.svg"],.sketchy img[src="assets/images/volume-xmark.svg"],.sketchy img[src="assets/images/floppy-disk.svg"],.slate img[src="assets/images/volume-high.svg"],.slate img[src="assets/images/volume-xmark.svg"],.slate img[src="assets/images/floppy-disk.svg"],.solar img[src="assets/images/volume-high.svg"],.solar img[src="assets/images/volume-xmark.svg"],.solar img[src="assets/images/floppy-disk.svg"],.spacelab img[src="assets/images/volume-high.svg"],.spacelab img[src="assets/images/volume-xmark.svg"],.spacelab img[src="assets/images/floppy-disk.svg"],.superhero img[src="assets/images/volume-high.svg"],.superhero img[src="assets/images/volume-xmark.svg"],.superhero img[src="assets/images/floppy-disk.svg"],.united img[src="assets/images/volume-high.svg"],.united img[src="assets/images/volume-xmark.svg"],.united img[src="assets/images/floppy-disk.svg"]{-webkit-filter:invert(1) brightness(100%);filter:invert(1) brightness(100%)}@media (max-width:992px){.cerulean #pokemonVitaminExpandedModal .tight .btn,.cyborg #pokemonVitaminExpandedModal .tight .btn,.darkly #pokemonVitaminExpandedModal .tight .btn,.flatly #pokemonVitaminExpandedModal .tight .btn,.journal #pokemonVitaminExpandedModal .tight .btn,.litera #pokemonVitaminExpandedModal .tight .btn,.materia #pokemonVitaminExpandedModal .tight .btn,.minty #pokemonVitaminExpandedModal .tight .btn,.pulse #pokemonVitaminExpandedModal .tight .btn,.sandstone #pokemonVitaminExpandedModal .tight .btn,.simplex #pokemonVitaminExpandedModal .tight .btn,.sketchy #pokemonVitaminExpandedModal .tight .btn,.slate #pokemonVitaminExpandedModal .tight .btn,.spacelab #pokemonVitaminExpandedModal .tight .btn,.superhero #pokemonVitaminExpandedModal .tight .btn,.united #pokemonVitaminExpandedModal .tight .btn,.yeti #pokemonVitaminExpandedModal .tight .btn{padding-left:5px!important;padding-right:5px!important}}.journal .table-warning.text-light,.lux .table-warning.text-light,.materia .table-warning.text-light,.pulse .table-warning.text-light,.sketchy .table-warning.text-light,.spacelab .table-warning.text-light,.united .table-warning.text-light{color:#000!important}.cerulean #evo-item-list .item-selected,.cerulean #evo-item-list .pokemon-selected,.cerulean #evo-pokemon-list .item-selected,.cerulean #evo-pokemon-list .pokemon-selected{color:#f5f5f5;background-image:-webkit-gradient(linear,left top,left bottom,from(#4e5458),color-stop(40%,#565b60),to(#5b6165));background-image:linear-gradient(#4e5458,#565b60 40%,#5b6165)}.cerulean .dropdown-item:hover{color:#495057}.cosmo .progress .progress-bar{font-size:12px}.cosmo #evo-item-list .list-group-item-action,.cosmo #evo-pokemon-list .list-group-item-action{color:#f5f5f5}.cosmo #evo-item-list .list-group-item-action:hover,.cosmo #evo-pokemon-list .list-group-item-action:hover{color:#000}.cosmo .dropdown-item:hover{color:#fff}.cyborg .text-light{color:#f5f5f5!important}.cyborg #evo-item-list .list-group-item-action,.cyborg #evo-pokemon-list .list-group-item-action{color:#f5f5f5}.darkly .text-light,.darkly .text-primary{color:#f5f5f5!important}.flatly #evo-item-list .list-group-item-action:hover,.flatly #evo-pokemon-list .list-group-item-action:hover,.lumen .dropdown-item.active:hover,.lux .dropdown-item.active:hover{color:#000}.darkly #FAQModal .border-bottom.border-dark{border-color:var(--secondary)!important}@media (max-width:767px) and (max-height:650px){.litera #berryDexPreviewList{max-height:calc(40vh - 50px)}}.lumen .btn-weather-dock{border-color:rgba(0,0,0,.25)}.lux .pageItemFooter{font-size:12px!important}.lux .pageItemTitle{font-size:30px!important}.lux #pokemonVitaminExpandedModal .tight .btn{padding-left:5px!important;padding-right:5px!important}.lux #berryDexModal .table-sm td,.lux #berryDexModal .table-sm th{padding:.3rem}.lux #pokemonStatisticsModal .table-sm td,.lux #pokemonStatisticsModal .table-sm th{padding:.3rem 0}@media (max-width:991px){.lux .berryDexPreviewColumn{max-height:calc(100vh - 240px)}.sandstone #berryDexPreviewFlavors{font-size:small}}@media (max-width:767px){.lux #berryDexPreviewList{max-height:calc(50vh - 50px)}}@media (max-width:767px) and (max-height:393px){.lux #berryDexPreviewList{max-height:calc(40vh - 55px)}}.materia .stop-auto{position:absolute}.materia #evo-item-list .item-selected,.materia #evo-item-list .pokemon-selected,.materia #evo-pokemon-list .item-selected,.materia #evo-pokemon-list .pokemon-selected{background:-webkit-gradient(linear,left top,left bottom,from(#42a6f5),to(#2196f3)) repeat-x #2196f3;background:linear-gradient(180deg,#42a6f5,#2196f3) repeat-x #2196f3}.minty .btn:not([class*=btn-]){color:#495057}.minty #evo-item-list .list-group-item-action:hover,.minty #evo-pokemon-list .list-group-item-action:hover{color:#000}.minty .btn-dropdown{color:#5a5a5a}.sandstone .dropdown-item:hover{color:#fff}.simplex #evo-item-list .item-selected,.simplex #evo-item-list .pokemon-selected,.simplex #evo-pokemon-list .item-selected,.simplex #evo-pokemon-list .pokemon-selected{background:#d9230f!important}.simplex .dropdown-item:hover{color:#000}.sketchy #toaster .toast-body .close,.sketchy #toaster .toast-body .close:hover,.sketchy .text-light .close,.sketchy .text-light .close:hover{color:transparent}.sketchy #toaster .toast-body .close::before,.sketchy #toaster .toast-body .close:active::before,.sketchy #toaster .toast-body .close:focus::before,.sketchy #toaster .toast-body .close:hover::before,.sketchy .text-light .close::before,.sketchy .text-light .close:active::before,.sketchy .text-light .close:focus::before,.sketchy .text-light .close:hover::before{color:#f5f5f5}.sketchy #toaster .toast-header .close,.sketchy #toaster .toast-header .close:hover{color:transparent}.sketchy #toaster .toast-header .close::before,.sketchy #toaster .toast-header .close:active::before,.sketchy #toaster .toast-header .close:focus::before,.sketchy #toaster .toast-header .close:hover::before{color:#333}.sketchy .close span{visibility:hidden!important}.sketchy #battleContainer table .row{margin:0!important}.sketchy .save-container table td{background-color:unset!important}.sketchy .modal-header{border-radius:0}.sketchy .pageItemFooter{background-color:#fff;color:#000;font-weight:700}.sketchy #evo-item-list .list-group-item-action,.sketchy #evo-pokemon-list .list-group-item-action{color:#f5f5f5}.sketchy #evo-item-list .list-group-item-action:hover,.sketchy #evo-pokemon-list .list-group-item-action:hover{color:#000}.sketchy .multiselect-dropdown .form-check-input{margin-left:0!important}.slate #achievementsModal .text-primary,.slate #toaster .text-primary{color:#f5f5f5!important}@media (max-width:991px){.slate .berryDexPreviewColumn{max-height:calc(100vh - 240px)}}@media (max-width:767px){.slate #berryDexPreviewList{max-height:calc(50vh - 50px)}}@media (max-width:767px) and (max-height:393px){.slate #berryDexPreviewList{max-height:calc(40vh - 50px)}}.slate #showItemsModal .item-selected{color:#f5f5f5}.slate #showItemsModal .pokemon-selected{background-image:-webkit-gradient(linear,left top,left bottom,from(#4e5458),color-stop(40%,#565b60),to(#5b6165));background-image:linear-gradient(#4e5458,#565b60 40%,#5b6165)}.slate .card.border-secondary{color:#ddd}.slate .modal-header{color:#f5f5f5}.solar .seed-list-item.active{background:rgba(255,255,255,.2)}.solar .berryDexButtons.btn-secondary{background:rgba(0,0,0,0)}.solar .berryDexButtons.btn-secondary span{color:var(--secondary)}.solar .berryDexButtons:hover span{color:#f5f5f5}.solar #evo-item-list .item-selected,.solar #evo-item-list .pokemon-selected,.solar #evo-pokemon-list .item-selected,.solar #evo-pokemon-list .pokemon-selected{color:#f5f5f5;background:-webkit-gradient(linear,left top,left bottom,from(#c09b26),to(#b58900)) repeat-x #b58900;background:linear-gradient(180deg,#c09b26,#b58900) repeat-x #b58900}.solar #evo-item-list .list-group-item-action,.solar #evo-pokemon-list .list-group-item-action{color:#f5f5f5}.solar #pokemonList,.solar .card.border-secondary{color:#a0b6b8}.spacelab #evo-item-list .item-selected,.spacelab #evo-item-list .pokemon-selected,.spacelab #evo-pokemon-list .item-selected,.spacelab #evo-pokemon-list .pokemon-selected{background:-webkit-gradient(linear,left top,left bottom,from(#6d94bf),color-stop(50%,#446e9b),to(#3e648d));background:linear-gradient(#6d94bf,#446e9b 50%,#3e648d)}#townView,.mineReward,.trainer-card.trainer-bg-35{background-repeat:no-repeat}.superhero .text-light{color:#f5f5f5!important}.yeti .btn-group .dropdown-toggle.btn-primary~.dropdown-menu .dropdown-item:hover,.yeti .dropdown-item.active:hover{color:#222}#townView{min-height:280px;background-size:cover;background-position:top;display:-webkit-box;display:-ms-flexbox;display:flex;flex-direction:column;-webkit-animation:bounceBackground 60s linear infinite alternate;animation:bounceBackground 60s linear infinite alternate}#townView .featureList li{min-width:100%;padding-bottom:3px}#townView #dungeonPokemonList{width:100%;white-space:nowrap;overflow-x:auto}#townView #dungeonPokemonList .list-inline-item{position:relative}#townView #dungeonPokemonList .list-inline-item .lock{position:absolute;z-index:10;width:100%;left:0;bottom:0}#townView #dungeonPokemonList .list-inline-item .shiny{position:absolute;z-index:1;top:10px;right:-5px}#townView #dungeonPokemonList .list-inline-item .shadow-icon{position:absolute;z-index:1;top:26px;right:-6px;width:16px}#townView #dungeonPokemonList .list-inline-item .shadow-trainer{position:relative;z-index:0;margin-left:-15px;margin-right:-5px}#townView #dungeonPokemonList .list-inline-item .uncaught-shadow{position:absolute;z-index:0;left:0}#townView #dungeonPokemonList .list-inline-item .uncaught-shadow.uncaught-pokemon{opacity:.1}#townView .btn-dungeon-guide,#townView .btn-gym-auto-restart{-webkit-box-flex:0;-ms-flex:0 0 36px;flex:0 0 36px}.trainer-card{-webkit-transition:all .2s;transition:all .2s;background-clip:content-box!important;background-attachment:local}.trainer-card:hover{-webkit-transform:scale(1.04);transform:scale(1.04);-webkit-box-shadow:0 10px 20px rgba(0,0,0,.12),0 4px 8px rgba(0,0,0,.06);box-shadow:0 10px 20px rgba(0,0,0,.12),0 4px 8px rgba(0,0,0,.06)}.trainer-card .trainer-pokemon-image{position:absolute;top:40px;right:10px}.trainer-card .trainer-time{white-space:nowrap}.trainer-card .trainer-version{position:absolute;left:6px;bottom:3px}.trainer-card .challenge-badges{position:absolute;width:90%;right:0;bottom:0;text-align:right}.trainer-card.trainer-bg-0{background-color:#fa0;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1600 800'%3E%3Cg %3E%3Cpath fill='%23ffb100' d='M486 705.8c-109.3-21.8-223.4-32.2-335.3-19.4C99.5 692.1 49 703 0 719.8V800h843.8c-115.9-33.2-230.8-68.1-347.6-92.2C492.8 707.1 489.4 706.5 486 705.8z'/%3E%3Cpath fill='%23ffb800' d='M1600 0H0v719.8c49-16.8 99.5-27.8 150.7-33.5c111.9-12.7 226-2.4 335.3 19.4c3.4 0.7 6.8 1.4 10.2 2c116.8 24 231.7 59 347.6 92.2H1600V0z'/%3E%3Cpath fill='%23ffbf00' d='M478.4 581c3.2 0.8 6.4 1.7 9.5 2.5c196.2 52.5 388.7 133.5 593.5 176.6c174.2 36.6 349.5 29.2 518.6-10.2V0H0v574.9c52.3-17.6 106.5-27.7 161.1-30.9C268.4 537.4 375.7 554.2 478.4 581z'/%3E%3Cpath fill='%23ffc500' d='M0 0v429.4c55.6-18.4 113.5-27.3 171.4-27.7c102.8-0.8 203.2 22.7 299.3 54.5c3 1 5.9 2 8.9 3c183.6 62 365.7 146.1 562.4 192.1c186.7 43.7 376.3 34.4 557.9-12.6V0H0z'/%3E%3Cpath fill='%23ffcc00' d='M181.8 259.4c98.2 6 191.9 35.2 281.3 72.1c2.8 1.1 5.5 2.3 8.3 3.4c171 71.6 342.7 158.5 531.3 207.7c198.8 51.8 403.4 40.8 597.3-14.8V0H0v283.2C59 263.6 120.6 255.7 181.8 259.4z'/%3E%3Cpath fill='%23ffd624' d='M1600 0H0v136.3c62.3-20.9 127.7-27.5 192.2-19.2c93.6 12.1 180.5 47.7 263.3 89.6c2.6 1.3 5.1 2.6 7.7 3.9c158.4 81.1 319.7 170.9 500.3 223.2c210.5 61 430.8 49 636.6-16.6V0z'/%3E%3Cpath fill='%23ffe038' d='M454.9 86.3C600.7 177 751.6 269.3 924.1 325c208.6 67.4 431.3 60.8 637.9-5.3c12.8-4.1 25.4-8.4 38.1-12.9V0H288.1c56 21.3 108.7 50.6 159.7 82C450.2 83.4 452.5 84.9 454.9 86.3z'/%3E%3Cpath fill='%23ffeb49' d='M1600 0H498c118.1 85.8 243.5 164.5 386.8 216.2c191.8 69.2 400 74.7 595 21.1c40.8-11.2 81.1-25.2 120.3-41.7V0z'/%3E%3Cpath fill='%23fff558' d='M1397.5 154.8c47.2-10.6 93.6-25.3 138.6-43.8c21.7-8.9 43-18.8 63.9-29.5V0H643.4c62.9 41.7 129.7 78.2 202.1 107.4C1020.4 178.1 1214.2 196.1 1397.5 154.8z'/%3E%3Cpath fill='%23ffff66' d='M1315.3 72.4c75.3-12.6 148.9-37.1 216.8-72.4h-723C966.8 71 1144.7 101 1315.3 72.4z'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-1{background-color:#e52;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 200 200'%3E%3Cdefs%3E%3ClinearGradient id='a' gradientUnits='userSpaceOnUse' x1='100' y1='33' x2='100' y2='-3'%3E%3Cstop offset='0' stop-color='%23000' stop-opacity='0'/%3E%3Cstop offset='1' stop-color='%23000' stop-opacity='1'/%3E%3C/linearGradient%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='100' y1='135' x2='100' y2='97'%3E%3Cstop offset='0' stop-color='%23000' stop-opacity='0'/%3E%3Cstop offset='1' stop-color='%23000' stop-opacity='1'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg fill='%23ca481d' fill-opacity='0.6'%3E%3Crect x='100' width='100' height='100'/%3E%3Crect y='100' width='100' height='100'/%3E%3C/g%3E%3Cg fill-opacity='0.5'%3E%3Cpolygon fill='url(%23a)' points='100 30 0 0 200 0'/%3E%3Cpolygon fill='url(%23b)' points='100 100 0 130 0 100 200 100 200 130'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-12,.trainer-card.trainer-bg-2,.trainer-card.trainer-bg-3{background-color:#fff;background-size:cover}.trainer-card.trainer-bg-2{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 800 800'%3E%3Cdefs%3E%3CradialGradient id='a' cx='400' cy='400' r='50%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23ffffff'/%3E%3Cstop offset='1' stop-color='%230EF'/%3E%3C/radialGradient%3E%3CradialGradient id='b' cx='400' cy='400' r='70%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23ffffff'/%3E%3Cstop offset='1' stop-color='%230FF'/%3E%3C/radialGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='800' height='800'/%3E%3Cg fill-opacity='.8'%3E%3Cpath fill='url(%23b)' d='M998.7 439.2c1.7-26.5 1.7-52.7 0.1-78.5L401 399.9c0 0 0-0.1 0-0.1l587.6-116.9c-5.1-25.9-11.9-51.2-20.3-75.8L400.9 399.7c0 0 0-0.1 0-0.1l537.3-265c-11.6-23.5-24.8-46.2-39.3-67.9L400.8 399.5c0 0 0-0.1-0.1-0.1l450.4-395c-17.3-19.7-35.8-38.2-55.5-55.5l-395 450.4c0 0-0.1 0-0.1-0.1L733.4-99c-21.7-14.5-44.4-27.6-68-39.3l-265 537.4c0 0-0.1 0-0.1 0l192.6-567.4c-24.6-8.3-49.9-15.1-75.8-20.2L400.2 399c0 0-0.1 0-0.1 0l39.2-597.7c-26.5-1.7-52.7-1.7-78.5-0.1L399.9 399c0 0-0.1 0-0.1 0L282.9-188.6c-25.9 5.1-51.2 11.9-75.8 20.3l192.6 567.4c0 0-0.1 0-0.1 0l-265-537.3c-23.5 11.6-46.2 24.8-67.9 39.3l332.8 498.1c0 0-0.1 0-0.1 0.1L4.4-51.1C-15.3-33.9-33.8-15.3-51.1 4.4l450.4 395c0 0 0 0.1-0.1 0.1L-99 66.6c-14.5 21.7-27.6 44.4-39.3 68l537.4 265c0 0 0 0.1 0 0.1l-567.4-192.6c-8.3 24.6-15.1 49.9-20.2 75.8L399 399.8c0 0 0 0.1 0 0.1l-597.7-39.2c-1.7 26.5-1.7 52.7-0.1 78.5L399 400.1c0 0 0 0.1 0 0.1l-587.6 116.9c5.1 25.9 11.9 51.2 20.3 75.8l567.4-192.6c0 0 0 0.1 0 0.1l-537.3 265c11.6 23.5 24.8 46.2 39.3 67.9l498.1-332.8c0 0 0 0.1 0.1 0.1l-450.4 395c17.3 19.7 35.8 38.2 55.5 55.5l395-450.4c0 0 0.1 0 0.1 0.1L66.6 899c21.7 14.5 44.4 27.6 68 39.3l265-537.4c0 0 0.1 0 0.1 0L207.1 968.3c24.6 8.3 49.9 15.1 75.8 20.2L399.8 401c0 0 0.1 0 0.1 0l-39.2 597.7c26.5 1.7 52.7 1.7 78.5 0.1L400.1 401c0 0 0.1 0 0.1 0l116.9 587.6c25.9-5.1 51.2-11.9 75.8-20.3L400.3 400.9c0 0 0.1 0 0.1 0l265 537.3c23.5-11.6 46.2-24.8 67.9-39.3L400.5 400.8c0 0 0.1 0 0.1-0.1l395 450.4c19.7-17.3 38.2-35.8 55.5-55.5l-450.4-395c0 0 0-0.1 0.1-0.1L899 733.4c14.5-21.7 27.6-44.4 39.3-68l-537.4-265c0 0 0-0.1 0-0.1l567.4 192.6c8.3-24.6 15.1-49.9 20.2-75.8L401 400.2c0 0 0-0.1 0-0.1L998.7 439.2z'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-3{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25'%3E%3Cdefs%3E%3ClinearGradient id='a' gradientUnits='userSpaceOnUse' x1='0' x2='0' y1='0' y2='100%25' gradientTransform='rotate(240)'%3E%3Cstop offset='0' stop-color='%23ffffff'/%3E%3Cstop offset='1' stop-color='%234FE'/%3E%3C/linearGradient%3E%3Cpattern patternUnits='userSpaceOnUse' id='b' width='540' height='450' x='0' y='0' viewBox='0 0 1080 900'%3E%3Cg fill-opacity='0.1'%3E%3Cpolygon fill='%23444' points='90 150 0 300 180 300'/%3E%3Cpolygon points='90 150 180 0 0 0'/%3E%3Cpolygon fill='%23AAA' points='270 150 360 0 180 0'/%3E%3Cpolygon fill='%23DDD' points='450 150 360 300 540 300'/%3E%3Cpolygon fill='%23999' points='450 150 540 0 360 0'/%3E%3Cpolygon points='630 150 540 300 720 300'/%3E%3Cpolygon fill='%23DDD' points='630 150 720 0 540 0'/%3E%3Cpolygon fill='%23444' points='810 150 720 300 900 300'/%3E%3Cpolygon fill='%23FFF' points='810 150 900 0 720 0'/%3E%3Cpolygon fill='%23DDD' points='990 150 900 300 1080 300'/%3E%3Cpolygon fill='%23444' points='990 150 1080 0 900 0'/%3E%3Cpolygon fill='%23DDD' points='90 450 0 600 180 600'/%3E%3Cpolygon points='90 450 180 300 0 300'/%3E%3Cpolygon fill='%23666' points='270 450 180 600 360 600'/%3E%3Cpolygon fill='%23AAA' points='270 450 360 300 180 300'/%3E%3Cpolygon fill='%23DDD' points='450 450 360 600 540 600'/%3E%3Cpolygon fill='%23999' points='450 450 540 300 360 300'/%3E%3Cpolygon fill='%23999' points='630 450 540 600 720 600'/%3E%3Cpolygon fill='%23FFF' points='630 450 720 300 540 300'/%3E%3Cpolygon points='810 450 720 600 900 600'/%3E%3Cpolygon fill='%23DDD' points='810 450 900 300 720 300'/%3E%3Cpolygon fill='%23AAA' points='990 450 900 600 1080 600'/%3E%3Cpolygon fill='%23444' points='990 450 1080 300 900 300'/%3E%3Cpolygon fill='%23222' points='90 750 0 900 180 900'/%3E%3Cpolygon points='270 750 180 900 360 900'/%3E%3Cpolygon fill='%23DDD' points='270 750 360 600 180 600'/%3E%3Cpolygon points='450 750 540 600 360 600'/%3E%3Cpolygon points='630 750 540 900 720 900'/%3E%3Cpolygon fill='%23444' points='630 750 720 600 540 600'/%3E%3Cpolygon fill='%23AAA' points='810 750 720 900 900 900'/%3E%3Cpolygon fill='%23666' points='810 750 900 600 720 600'/%3E%3Cpolygon fill='%23999' points='990 750 900 900 1080 900'/%3E%3Cpolygon fill='%23999' points='180 0 90 150 270 150'/%3E%3Cpolygon fill='%23444' points='360 0 270 150 450 150'/%3E%3Cpolygon fill='%23FFF' points='540 0 450 150 630 150'/%3E%3Cpolygon points='900 0 810 150 990 150'/%3E%3Cpolygon fill='%23222' points='0 300 -90 450 90 450'/%3E%3Cpolygon fill='%23FFF' points='0 300 90 150 -90 150'/%3E%3Cpolygon fill='%23FFF' points='180 300 90 450 270 450'/%3E%3Cpolygon fill='%23666' points='180 300 270 150 90 150'/%3E%3Cpolygon fill='%23222' points='360 300 270 450 450 450'/%3E%3Cpolygon fill='%23FFF' points='360 300 450 150 270 150'/%3E%3Cpolygon fill='%23444' points='540 300 450 450 630 450'/%3E%3Cpolygon fill='%23222' points='540 300 630 150 450 150'/%3E%3Cpolygon fill='%23AAA' points='720 300 630 450 810 450'/%3E%3Cpolygon fill='%23666' points='720 300 810 150 630 150'/%3E%3Cpolygon fill='%23FFF' points='900 300 810 450 990 450'/%3E%3Cpolygon fill='%23999' points='900 300 990 150 810 150'/%3E%3Cpolygon points='0 600 -90 750 90 750'/%3E%3Cpolygon fill='%23666' points='0 600 90 450 -90 450'/%3E%3Cpolygon fill='%23AAA' points='180 600 90 750 270 750'/%3E%3Cpolygon fill='%23444' points='180 600 270 450 90 450'/%3E%3Cpolygon fill='%23444' points='360 600 270 750 450 750'/%3E%3Cpolygon fill='%23999' points='360 600 450 450 270 450'/%3E%3Cpolygon fill='%23666' points='540 600 630 450 450 450'/%3E%3Cpolygon fill='%23222' points='720 600 630 750 810 750'/%3E%3Cpolygon fill='%23FFF' points='900 600 810 750 990 750'/%3E%3Cpolygon fill='%23222' points='900 600 990 450 810 450'/%3E%3Cpolygon fill='%23DDD' points='0 900 90 750 -90 750'/%3E%3Cpolygon fill='%23444' points='180 900 270 750 90 750'/%3E%3Cpolygon fill='%23FFF' points='360 900 450 750 270 750'/%3E%3Cpolygon fill='%23AAA' points='540 900 630 750 450 750'/%3E%3Cpolygon fill='%23FFF' points='720 900 810 750 630 750'/%3E%3Cpolygon fill='%23222' points='900 900 990 750 810 750'/%3E%3Cpolygon fill='%23222' points='1080 300 990 450 1170 450'/%3E%3Cpolygon fill='%23FFF' points='1080 300 1170 150 990 150'/%3E%3Cpolygon points='1080 600 990 750 1170 750'/%3E%3Cpolygon fill='%23666' points='1080 600 1170 450 990 450'/%3E%3Cpolygon fill='%23DDD' points='1080 900 1170 750 990 750'/%3E%3C/g%3E%3C/pattern%3E%3C/defs%3E%3Crect x='0' y='0' fill='url(%23a)' width='100%25' height='100%25'/%3E%3Crect x='0' y='0' fill='url(%23b)' width='100%25' height='100%25'/%3E%3C/svg%3E")}.trainer-card.trainer-bg-4{background-color:#000;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 800 800'%3E%3Cg %3E%3Ccircle fill='%23000000' cx='400' cy='400' r='600'/%3E%3Ccircle fill='%23180d1c' cx='400' cy='400' r='500'/%3E%3Ccircle fill='%23261431' cx='400' cy='400' r='400'/%3E%3Ccircle fill='%23351947' cx='400' cy='400' r='300'/%3E%3Ccircle fill='%23451e5e' cx='400' cy='400' r='200'/%3E%3Ccircle fill='%23552277' cx='400' cy='400' r='100'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-5{background-color:#000;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='250' height='30' viewBox='0 0 1000 120'%3E%3Cg fill='none' stroke='%23222' stroke-width='10' %3E%3Cpath d='M-500 75c0 0 125-30 250-30S0 75 0 75s125 30 250 30s250-30 250-30s125-30 250-30s250 30 250 30s125 30 250 30s250-30 250-30'/%3E%3Cpath d='M-500 45c0 0 125-30 250-30S0 45 0 45s125 30 250 30s250-30 250-30s125-30 250-30s250 30 250 30s125 30 250 30s250-30 250-30'/%3E%3Cpath d='M-500 105c0 0 125-30 250-30S0 105 0 105s125 30 250 30s250-30 250-30s125-30 250-30s250 30 250 30s125 30 250 30s250-30 250-30'/%3E%3Cpath d='M-500 15c0 0 125-30 250-30S0 15 0 15s125 30 250 30s250-30 250-30s125-30 250-30s250 30 250 30s125 30 250 30s250-30 250-30'/%3E%3Cpath d='M-500-15c0 0 125-30 250-30S0-15 0-15s125 30 250 30s250-30 250-30s125-30 250-30s250 30 250 30s125 30 250 30s250-30 250-30'/%3E%3Cpath d='M-500 135c0 0 125-30 250-30S0 135 0 135s125 30 250 30s250-30 250-30s125-30 250-30s250 30 250 30s125 30 250 30s250-30 250-30'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-6{background-color:#c57;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 100 60'%3E%3Cg %3E%3Crect fill='%23cc5577' width='11' height='11'/%3E%3Crect fill='%23ce5776' x='10' width='11' height='11'/%3E%3Crect fill='%23d05a76' y='10' width='11' height='11'/%3E%3Crect fill='%23d15c75' x='20' width='11' height='11'/%3E%3Crect fill='%23d35f74' x='10' y='10' width='11' height='11'/%3E%3Crect fill='%23d46174' y='20' width='11' height='11'/%3E%3Crect fill='%23d66473' x='30' width='11' height='11'/%3E%3Crect fill='%23d76673' x='20' y='10' width='11' height='11'/%3E%3Crect fill='%23d96972' x='10' y='20' width='11' height='11'/%3E%3Crect fill='%23da6c72' y='30' width='11' height='11'/%3E%3Crect fill='%23db6e71' x='40' width='11' height='11'/%3E%3Crect fill='%23dc7171' x='30' y='10' width='11' height='11'/%3E%3Crect fill='%23dd7471' x='20' y='20' width='11' height='11'/%3E%3Crect fill='%23de7671' x='10' y='30' width='11' height='11'/%3E%3Crect fill='%23df7971' y='40' width='11' height='11'/%3E%3Crect fill='%23e07c71' x='50' width='11' height='11'/%3E%3Crect fill='%23e17e71' x='40' y='10' width='11' height='11'/%3E%3Crect fill='%23e28171' x='30' y='20' width='11' height='11'/%3E%3Crect fill='%23e38471' x='20' y='30' width='11' height='11'/%3E%3Crect fill='%23e38771' x='10' y='40' width='11' height='11'/%3E%3Crect fill='%23e48972' y='50' width='11' height='11'/%3E%3Crect fill='%23e58c72' x='60' width='11' height='11'/%3E%3Crect fill='%23e58f73' x='50' y='10' width='11' height='11'/%3E%3Crect fill='%23e69173' x='40' y='20' width='11' height='11'/%3E%3Crect fill='%23e69474' x='30' y='30' width='11' height='11'/%3E%3Crect fill='%23e79775' x='20' y='40' width='11' height='11'/%3E%3Crect fill='%23e79a75' x='10' y='50' width='11' height='11'/%3E%3Crect fill='%23e89c76' x='70' width='11' height='11'/%3E%3Crect fill='%23e89f77' x='60' y='10' width='11' height='11'/%3E%3Crect fill='%23e8a278' x='50' y='20' width='11' height='11'/%3E%3Crect fill='%23e9a47a' x='40' y='30' width='11' height='11'/%3E%3Crect fill='%23e9a77b' x='30' y='40' width='11' height='11'/%3E%3Crect fill='%23e9aa7c' x='20' y='50' width='11' height='11'/%3E%3Crect fill='%23e9ac7e' x='80' width='11' height='11'/%3E%3Crect fill='%23eaaf7f' x='70' y='10' width='11' height='11'/%3E%3Crect fill='%23eab281' x='60' y='20' width='11' height='11'/%3E%3Crect fill='%23eab482' x='50' y='30' width='11' height='11'/%3E%3Crect fill='%23eab784' x='40' y='40' width='11' height='11'/%3E%3Crect fill='%23eaba86' x='30' y='50' width='11' height='11'/%3E%3Crect fill='%23ebbc88' x='90' width='11' height='11'/%3E%3Crect fill='%23ebbf8a' x='80' y='10' width='11' height='11'/%3E%3Crect fill='%23ebc18c' x='70' y='20' width='11' height='11'/%3E%3Crect fill='%23ebc48e' x='60' y='30' width='11' height='11'/%3E%3Crect fill='%23ebc790' x='50' y='40' width='11' height='11'/%3E%3Crect fill='%23ebc992' x='40' y='50' width='11' height='11'/%3E%3Crect fill='%23ebcc94' x='90' y='10' width='11' height='11'/%3E%3Crect fill='%23ebce97' x='80' y='20' width='11' height='11'/%3E%3Crect fill='%23ebd199' x='70' y='30' width='11' height='11'/%3E%3Crect fill='%23ecd39c' x='60' y='40' width='11' height='11'/%3E%3Crect fill='%23ecd69e' x='50' y='50' width='11' height='11'/%3E%3Crect fill='%23ecd8a1' x='90' y='20' width='11' height='11'/%3E%3Crect fill='%23ecdba4' x='80' y='30' width='11' height='11'/%3E%3Crect fill='%23ecdda6' x='70' y='40' width='11' height='11'/%3E%3Crect fill='%23ece0a9' x='60' y='50' width='11' height='11'/%3E%3Crect fill='%23ede2ac' x='90' y='30' width='11' height='11'/%3E%3Crect fill='%23ede4af' x='80' y='40' width='11' height='11'/%3E%3Crect fill='%23ede7b2' x='70' y='50' width='11' height='11'/%3E%3Crect fill='%23ede9b5' x='90' y='40' width='11' height='11'/%3E%3Crect fill='%23eeecb8' x='80' y='50' width='11' height='11'/%3E%3Crect fill='%23EEB' x='90' y='50' width='11' height='11'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-7{background-color:#303;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='480' viewBox='0 0 800 800'%3E%3Cg fill='none' stroke='%23404' stroke-width='2.3'%3E%3Cpath d='M769 229L1037 260.9M927 880L731 737 520 660 309 538 40 599 295 764 126.5 879.5 40 599-197 493 102 382-31 229 126.5 79.5-69-63'/%3E%3Cpath d='M-31 229L237 261 390 382 603 493 308.5 537.5 101.5 381.5M370 905L295 764'/%3E%3Cpath d='M520 660L578 842 731 737 840 599 603 493 520 660 295 764 309 538 390 382 539 269 769 229 577.5 41.5 370 105 295 -36 126.5 79.5 237 261 102 382 40 599 -69 737 127 880'/%3E%3Cpath d='M520-140L578.5 42.5 731-63M603 493L539 269 237 261 370 105M902 382L539 269M390 382L102 382'/%3E%3Cpath d='M-222 42L126.5 79.5 370 105 539 269 577.5 41.5 927 80 769 229 902 382 603 493 731 737M295-36L577.5 41.5M578 842L295 764M40-201L127 80M102 382L-261 269'/%3E%3C/g%3E%3Cg fill='%23505'%3E%3Ccircle cx='769' cy='229' r='8'/%3E%3Ccircle cx='539' cy='269' r='8'/%3E%3Ccircle cx='603' cy='493' r='8'/%3E%3Ccircle cx='731' cy='737' r='8'/%3E%3Ccircle cx='520' cy='660' r='8'/%3E%3Ccircle cx='309' cy='538' r='8'/%3E%3Ccircle cx='295' cy='764' r='8'/%3E%3Ccircle cx='40' cy='599' r='8'/%3E%3Ccircle cx='102' cy='382' r='8'/%3E%3Ccircle cx='127' cy='80' r='8'/%3E%3Ccircle cx='370' cy='105' r='8'/%3E%3Ccircle cx='578' cy='42' r='8'/%3E%3Ccircle cx='237' cy='261' r='8'/%3E%3Ccircle cx='390' cy='382' r='8'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-8{background-color:#0b7;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E%3Cpolygon fill='%23000' fill-opacity='.1' points='120 0 120 60 90 30 60 0 0 0 0 0 60 60 0 120 60 120 90 90 120 60 120 0'/%3E%3C/svg%3E")}.trainer-card.trainer-bg-9{background-color:#dfa;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E%3Cpolygon fill='%23AE9' points='120 120 60 120 90 90 120 60 120 0 120 0 60 60 0 0 0 60 30 90 60 120 120 120 '/%3E%3C/svg%3E")}.trainer-card.trainer-bg-10{background-color:#00b7ff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='540' height='450' viewBox='0 0 1080 900'%3E%3Cg fill-opacity='.1'%3E%3Cpolygon fill='%23444' points='90 150 0 300 180 300'/%3E%3Cpolygon points='90 150 180 0 0 0'/%3E%3Cpolygon fill='%23AAA' points='270 150 360 0 180 0'/%3E%3Cpolygon fill='%23DDD' points='450 150 360 300 540 300'/%3E%3Cpolygon fill='%23999' points='450 150 540 0 360 0'/%3E%3Cpolygon points='630 150 540 300 720 300'/%3E%3Cpolygon fill='%23DDD' points='630 150 720 0 540 0'/%3E%3Cpolygon fill='%23444' points='810 150 720 300 900 300'/%3E%3Cpolygon fill='%23FFF' points='810 150 900 0 720 0'/%3E%3Cpolygon fill='%23DDD' points='990 150 900 300 1080 300'/%3E%3Cpolygon fill='%23444' points='990 150 1080 0 900 0'/%3E%3Cpolygon fill='%23DDD' points='90 450 0 600 180 600'/%3E%3Cpolygon points='90 450 180 300 0 300'/%3E%3Cpolygon fill='%23666' points='270 450 180 600 360 600'/%3E%3Cpolygon fill='%23AAA' points='270 450 360 300 180 300'/%3E%3Cpolygon fill='%23DDD' points='450 450 360 600 540 600'/%3E%3Cpolygon fill='%23999' points='450 450 540 300 360 300'/%3E%3Cpolygon fill='%23999' points='630 450 540 600 720 600'/%3E%3Cpolygon fill='%23FFF' points='630 450 720 300 540 300'/%3E%3Cpolygon points='810 450 720 600 900 600'/%3E%3Cpolygon fill='%23DDD' points='810 450 900 300 720 300'/%3E%3Cpolygon fill='%23AAA' points='990 450 900 600 1080 600'/%3E%3Cpolygon fill='%23444' points='990 450 1080 300 900 300'/%3E%3Cpolygon fill='%23222' points='90 750 0 900 180 900'/%3E%3Cpolygon points='270 750 180 900 360 900'/%3E%3Cpolygon fill='%23DDD' points='270 750 360 600 180 600'/%3E%3Cpolygon points='450 750 540 600 360 600'/%3E%3Cpolygon points='630 750 540 900 720 900'/%3E%3Cpolygon fill='%23444' points='630 750 720 600 540 600'/%3E%3Cpolygon fill='%23AAA' points='810 750 720 900 900 900'/%3E%3Cpolygon fill='%23666' points='810 750 900 600 720 600'/%3E%3Cpolygon fill='%23999' points='990 750 900 900 1080 900'/%3E%3Cpolygon fill='%23999' points='180 0 90 150 270 150'/%3E%3Cpolygon fill='%23444' points='360 0 270 150 450 150'/%3E%3Cpolygon fill='%23FFF' points='540 0 450 150 630 150'/%3E%3Cpolygon points='900 0 810 150 990 150'/%3E%3Cpolygon fill='%23222' points='0 300 -90 450 90 450'/%3E%3Cpolygon fill='%23FFF' points='0 300 90 150 -90 150'/%3E%3Cpolygon fill='%23FFF' points='180 300 90 450 270 450'/%3E%3Cpolygon fill='%23666' points='180 300 270 150 90 150'/%3E%3Cpolygon fill='%23222' points='360 300 270 450 450 450'/%3E%3Cpolygon fill='%23FFF' points='360 300 450 150 270 150'/%3E%3Cpolygon fill='%23444' points='540 300 450 450 630 450'/%3E%3Cpolygon fill='%23222' points='540 300 630 150 450 150'/%3E%3Cpolygon fill='%23AAA' points='720 300 630 450 810 450'/%3E%3Cpolygon fill='%23666' points='720 300 810 150 630 150'/%3E%3Cpolygon fill='%23FFF' points='900 300 810 450 990 450'/%3E%3Cpolygon fill='%23999' points='900 300 990 150 810 150'/%3E%3Cpolygon points='0 600 -90 750 90 750'/%3E%3Cpolygon fill='%23666' points='0 600 90 450 -90 450'/%3E%3Cpolygon fill='%23AAA' points='180 600 90 750 270 750'/%3E%3Cpolygon fill='%23444' points='180 600 270 450 90 450'/%3E%3Cpolygon fill='%23444' points='360 600 270 750 450 750'/%3E%3Cpolygon fill='%23999' points='360 600 450 450 270 450'/%3E%3Cpolygon fill='%23666' points='540 600 630 450 450 450'/%3E%3Cpolygon fill='%23222' points='720 600 630 750 810 750'/%3E%3Cpolygon fill='%23FFF' points='900 600 810 750 990 750'/%3E%3Cpolygon fill='%23222' points='900 600 990 450 810 450'/%3E%3Cpolygon fill='%23DDD' points='0 900 90 750 -90 750'/%3E%3Cpolygon fill='%23444' points='180 900 270 750 90 750'/%3E%3Cpolygon fill='%23FFF' points='360 900 450 750 270 750'/%3E%3Cpolygon fill='%23AAA' points='540 900 630 750 450 750'/%3E%3Cpolygon fill='%23FFF' points='720 900 810 750 630 750'/%3E%3Cpolygon fill='%23222' points='900 900 990 750 810 750'/%3E%3Cpolygon fill='%23222' points='1080 300 990 450 1170 450'/%3E%3Cpolygon fill='%23FFF' points='1080 300 1170 150 990 150'/%3E%3Cpolygon points='1080 600 990 750 1170 750'/%3E%3Cpolygon fill='%23666' points='1080 600 1170 450 990 450'/%3E%3Cpolygon fill='%23DDD' points='1080 900 1170 750 990 750'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-11{background-color:#7a7;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 2 1'%3E%3Cdefs%3E%3ClinearGradient id='a' gradientUnits='userSpaceOnUse' x1='0' x2='0' y1='0' y2='1'%3E%3Cstop offset='0' stop-color='%2377aa77'/%3E%3Cstop offset='1' stop-color='%234fd'/%3E%3C/linearGradient%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%23cf8' stop-opacity='0'/%3E%3Cstop offset='1' stop-color='%23cf8' stop-opacity='1'/%3E%3C/linearGradient%3E%3ClinearGradient id='c' gradientUnits='userSpaceOnUse' x1='0' y1='0' x2='2' y2='2'%3E%3Cstop offset='0' stop-color='%23cf8' stop-opacity='0'/%3E%3Cstop offset='1' stop-color='%23cf8' stop-opacity='1'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x='0' y='0' fill='url(%23a)' width='2' height='1'/%3E%3Cg fill-opacity='0.5'%3E%3Cpolygon fill='url(%23b)' points='0 1 0 0 2 0'/%3E%3Cpolygon fill='url(%23c)' points='2 1 2 0 0 0'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-12{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' %3E%3Cdefs%3E%3ClinearGradient id='a' x1='0' x2='0' y1='0' y2='1'%3E%3Cstop offset='0' stop-color='%2380F'/%3E%3Cstop offset='1' stop-color='%23f40'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpattern id='b' width='24' height='24' patternUnits='userSpaceOnUse'%3E%3Ccircle fill='%23ffffff' cx='12' cy='12' r='12'/%3E%3C/pattern%3E%3Crect width='100%25' height='100%25' fill='url(%23a)'/%3E%3Crect width='100%25' height='100%25' fill='url(%23b)' fill-opacity='0.1'/%3E%3C/svg%3E")}.trainer-card.trainer-bg-13{background-color:#f29e03;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 100 100'%3E%3Crect x='0' y='0' width='46' height='46' fill-opacity='0.6' fill='%23ffa61d'/%3E%3C/svg%3E")}.trainer-card.trainer-bg-14{background-color:#ff9;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1000 1000'%3E%3Cg fill='%23ffd573'%3E%3Cpolygon points='1000 -50 0 -50 500 450'/%3E%3Cpolygon points='550 500 1050 1000 1050 0'/%3E%3Cpolygon points='-50 0 -50 1000 450 500'/%3E%3Cpolygon points='0 1050 1000 1050 500 550'/%3E%3C/g%3E%3Cg fill='%23ffaa4d'%3E%3Cpolygon points='1000 -133.3 0 -133.3 500 366.7'/%3E%3Cpolygon points='633.3 500 1133.3 1000 1133.3 0'/%3E%3Cpolygon points='-133.3 0 -133.3 1000 366.7 500'/%3E%3Cpolygon points='0 1133.3 1000 1133.3 500 633.3'/%3E%3C/g%3E%3Cg fill='%23ff8026'%3E%3Cpolygon points='1000 -216.7 0 -216.7 500 283.3'/%3E%3Cpolygon points='716.7 500 1216.7 1000 1216.7 0'/%3E%3Cpolygon points='-216.7 0 -216.7 1000 283.3 500'/%3E%3Cpolygon points='0 1216.7 1000 1216.7 500 716.7'/%3E%3C/g%3E%3Cg fill='%23F50'%3E%3Cpolygon points='1000 -300 0 -300 500 200'/%3E%3Cpolygon points='800 500 1300 1000 1300 0'/%3E%3Cpolygon points='-300 0 -300 1000 200 500'/%3E%3Cpolygon points='0 1300 1000 1300 500 800'/%3E%3C/g%3E%3Cg fill-opacity='0.5'%3E%3Cpolygon fill='%23FE0' points='0 707.1 0 292.9 292.9 0 707.1 0 1000 292.9 1000 707.1 707.1 1000 292.9 1000'/%3E%3Cg fill='%23ffc800'%3E%3Cpolygon points='464.6 -242.5 -242.5 464.6 464.6 464.6'/%3E%3Cpolygon points='535.4 464.6 1242.5 464.6 535.4 -242.5'/%3E%3Cpolygon points='-242.5 535.4 464.6 1242.5 464.6 535.4'/%3E%3Cpolygon points='535.4 1242.5 1242.5 535.4 535.4 535.4'/%3E%3C/g%3E%3Cg fill='%23ffa200'%3E%3Cpolygon points='405.7 -301.4 -301.4 405.7 405.7 405.7'/%3E%3Cpolygon points='594.3 405.7 1301.4 405.7 594.3 -301.4'/%3E%3Cpolygon points='-301.4 594.3 405.7 1301.4 405.7 594.3'/%3E%3Cpolygon points='594.3 1301.4 1301.4 594.3 594.3 594.3'/%3E%3C/g%3E%3Cg fill='%23ff7b00'%3E%3Cpolygon points='346.8 -360.3 -360.3 346.8 346.8 346.8'/%3E%3Cpolygon points='653.2 346.8 1360.3 346.8 653.2 -360.3'/%3E%3Cpolygon points='-360.3 653.2 346.8 1360.3 346.8 653.2'/%3E%3Cpolygon points='653.2 1360.3 1360.3 653.2 653.2 653.2'/%3E%3C/g%3E%3Cg fill='%23F50'%3E%3Cpolygon points='287.9 -419.2 -419.2 287.9 287.9 287.9'/%3E%3Cpolygon points='712.1 287.9 1419.2 287.9 712.1 -419.2'/%3E%3Cpolygon points='-419.2 712.1 287.9 1419.2 287.9 712.1'/%3E%3Cpolygon points='712.1 1419.2 1419.2 712.1 712.1 712.1'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-15{background-color:#131;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='250' height='250' viewBox='0 0 20 20'%3E%3Cg %3E%3Cpolygon fill='%23242' points='20 10 10 0 0 0 20 20'/%3E%3Cpolygon fill='%23242' points='0 10 0 20 10 20'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-16{background-color:#487346;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 200 200'%3E%3Cg %3E%3Cpolygon fill='%23608f57' points='100 57.1 64 93.1 71.5 100.6 100 72.1'/%3E%3Cpolygon fill='%2374ad69' points='100 57.1 100 72.1 128.6 100.6 136.1 93.1'/%3E%3Cpolygon fill='%23608f57' points='100 163.2 100 178.2 170.7 107.5 170.8 92.4'/%3E%3Cpolygon fill='%2374ad69' points='100 163.2 29.2 92.5 29.2 107.5 100 178.2'/%3E%3Cpath fill='%2389CC7C' d='M100 21.8L29.2 92.5l70.7 70.7l70.7-70.7L100 21.8z M100 127.9L64.6 92.5L100 57.1l35.4 35.4L100 127.9z'/%3E%3Cpolygon fill='%237f8f53' points='0 157.1 0 172.1 28.6 200.6 36.1 193.1'/%3E%3Cpolygon fill='%239bad64' points='70.7 200 70.8 192.4 63.2 200'/%3E%3Cpolygon fill='%23B6CC76' points='27.8 200 63.2 200 70.7 192.5 0 121.8 0 157.2 35.3 192.5'/%3E%3Cpolygon fill='%239bad64' points='200 157.1 164 193.1 171.5 200.6 200 172.1'/%3E%3Cpolygon fill='%237f8f53' points='136.7 200 129.2 192.5 129.2 200'/%3E%3Cpolygon fill='%23B6CC76' points='172.1 200 164.6 192.5 200 157.1 200 157.2 200 121.8 200 121.8 129.2 192.5 136.7 200'/%3E%3Cpolygon fill='%237f8f53' points='129.2 0 129.2 7.5 200 78.2 200 63.2 136.7 0'/%3E%3Cpolygon fill='%23B6CC76' points='200 27.8 200 27.9 172.1 0 136.7 0 200 63.2 200 63.2'/%3E%3Cpolygon fill='%239bad64' points='63.2 0 0 63.2 0 78.2 70.7 7.5 70.7 0'/%3E%3Cpolygon fill='%23B6CC76' points='0 63.2 63.2 0 27.8 0 0 27.8'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-17{background-color:#300;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 800 400'%3E%3Cdefs%3E%3CradialGradient id='a' cx='396' cy='281' r='514' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23D18'/%3E%3Cstop offset='1' stop-color='%23330000'/%3E%3C/radialGradient%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='400' y1='148' x2='400' y2='333'%3E%3Cstop offset='0' stop-color='%23FA3' stop-opacity='0'/%3E%3Cstop offset='1' stop-color='%23FA3' stop-opacity='0.5'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='800' height='400'/%3E%3Cg fill-opacity='0.43'%3E%3Ccircle fill='url(%23b)' cx='267.5' cy='61' r='300'/%3E%3Ccircle fill='url(%23b)' cx='532.5' cy='61' r='300'/%3E%3Ccircle fill='url(%23b)' cx='400' cy='30' r='300'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-18{background-color:#a33;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1600' height='800' viewBox='0 0 1600 800'%3E%3Cpath fill='%23FF7' d='M1102.5 734.8c2.5-1.2 24.8-8.6 25.6-7.5.5.7-3.9 23.8-4.6 24.5C1123.3 752.1 1107.5 739.5 1102.5 734.8zM1226.3 229.1c0-.1-4.9-9.4-7-14.2-.1-.3-.3-1.1-.4-1.6-.1-.4-.3-.7-.6-.9-.3-.2-.6-.1-.8.1l-13.1 12.3c0 0 0 0 0 0-.2.2-.3.5-.4.8 0 .3 0 .7.2 1 .1.1 1.4 2.5 2.1 3.6 2.4 3.7 6.5 12.1 6.5 12.2.2.3.4.5.7.6.3 0 .5-.1.7-.3 0 0 1.8-2.5 2.7-3.6 1.5-1.6 3-3.2 4.6-4.7 1.2-1.2 1.6-1.4 2.1-1.6.5-.3 1.1-.5 2.5-1.9C1226.5 230.4 1226.6 229.6 1226.3 229.1zM33 770.3C33 770.3 33 770.3 33 770.3c0-.7-.5-1.2-1.2-1.2-.1 0-.3 0-.4.1-1.6.2-14.3.1-22.2 0-.3 0-.6.1-.9.4-.2.2-.4.5-.4.9 0 .2 0 4.9.1 5.9l.4 13.6c0 .3.2.6.4.9.2.2.5.3.8.3 0 0 .1 0 .1 0 7.3-.7 14.7-.9 22-.6.3 0 .7-.1.9-.3.2-.2.4-.6.4-.9C32.9 783.3 32.9 776.2 33 770.3z'/%3E%3Cpath fill='%235ff' d='M171.1 383.4c1.3-2.5 14.3-22 15.6-21.6.8.3 11.5 21.2 11.5 22.1C198.1 384.2 177.9 384 171.1 383.4zM596.4 711.8c-.1-.1-6.7-8.2-9.7-12.5-.2-.3-.5-1-.7-1.5-.2-.4-.4-.7-.7-.8-.3-.1-.6 0-.8.3L574 712c0 0 0 0 0 0-.2.2-.2.5-.2.9 0 .3.2.7.4.9.1.1 1.8 2.2 2.8 3.1 3.1 3.1 8.8 10.5 8.9 10.6.2.3.5.4.8.4.3 0 .5-.2.6-.5 0 0 1.2-2.8 2-4.1 1.1-1.9 2.3-3.7 3.5-5.5.9-1.4 1.3-1.7 1.7-2 .5-.4 1-.7 2.1-2.4C596.9 713.1 596.8 712.3 596.4 711.8zM727.5 179.9C727.5 179.9 727.5 179.9 727.5 179.9c.6.2 1.3-.2 1.4-.8 0-.1 0-.2 0-.4.2-1.4 2.8-12.6 4.5-19.5.1-.3 0-.6-.2-.8-.2-.3-.5-.4-.8-.5-.2 0-4.7-1.1-5.7-1.3l-13.4-2.7c-.3-.1-.7 0-.9.2-.2.2-.4.4-.5.6 0 0 0 .1 0 .1-.8 6.5-2.2 13.1-3.9 19.4-.1.3 0 .6.2.9.2.3.5.4.8.5C714.8 176.9 721.7 178.5 727.5 179.9zM728.5 178.1c-.1-.1-.2-.2-.4-.2C728.3 177.9 728.4 178 728.5 178.1z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M699.6 472.7c-1.5 0-2.8-.8-3.5-2.3-.8-1.9 0-4.2 1.9-5 3.7-1.6 6.8-4.7 8.4-8.5 1.6-3.8 1.7-8.1.2-11.9-.3-.9-.8-1.8-1.2-2.8-.8-1.7-1.8-3.7-2.3-5.9-.9-4.1-.2-8.6 2-12.8 1.7-3.1 4.1-6.1 7.6-9.1 1.6-1.4 4-1.2 5.3.4 1.4 1.6 1.2 4-.4 5.3-2.8 2.5-4.7 4.7-5.9 7-1.4 2.6-1.9 5.3-1.3 7.6.3 1.4 1 2.8 1.7 4.3.5 1.1 1 2.2 1.5 3.3 2.1 5.6 2 12-.3 17.6-2.3 5.5-6.8 10.1-12.3 12.5C700.6 472.6 700.1 472.7 699.6 472.7zM740.4 421.4c1.5-.2 3 .5 3.8 1.9 1.1 1.8.4 4.2-1.4 5.3-3.7 2.1-6.4 5.6-7.6 9.5-1.2 4-.8 8.4 1.1 12.1.4.9 1 1.7 1.6 2.7 1 1.7 2.2 3.5 3 5.7 1.4 4 1.2 8.7-.6 13.2-1.4 3.4-3.5 6.6-6.8 10.1-1.5 1.6-3.9 1.7-5.5.2-1.6-1.4-1.7-3.9-.2-5.4 2.6-2.8 4.3-5.3 5.3-7.7 1.1-2.8 1.3-5.6.5-7.9-.5-1.3-1.3-2.7-2.2-4.1-.6-1-1.3-2.1-1.9-3.2-2.8-5.4-3.4-11.9-1.7-17.8 1.8-5.9 5.8-11 11.2-14C739.4 421.6 739.9 421.4 740.4 421.4zM261.3 590.9c5.7 6.8 9 15.7 9.4 22.4.5 7.3-2.4 16.4-10.2 20.4-3 1.5-6.7 2.2-11.2 2.2-7.9-.1-12.9-2.9-15.4-8.4-2.1-4.7-2.3-11.4 1.8-15.9 3.2-3.5 7.8-4.1 11.2-1.6 1.2.9 1.5 2.7.6 3.9-.9 1.2-2.7 1.5-3.9.6-1.8-1.3-3.6.6-3.8.8-2.4 2.6-2.1 7-.8 9.9 1.5 3.4 4.7 5 10.4 5.1 3.6 0 6.4-.5 8.6-1.6 4.7-2.4 7.7-8.6 7.2-15-.5-7.3-5.3-18.2-13-23.9-4.2-3.1-8.5-4.1-12.9-3.1-3.1.7-6.2 2.4-9.7 5-6.6 5.1-11.7 11.8-14.2 19-2.7 7.7-2.1 15.8 1.9 23.9.7 1.4.1 3.1-1.3 3.7-1.4.7-3.1.1-3.7-1.3-4.6-9.4-5.4-19.2-2.2-28.2 2.9-8.2 8.6-15.9 16.1-21.6 4.1-3.1 8-5.1 11.8-6 6-1.4 12 0 17.5 4C257.6 586.9 259.6 588.8 261.3 590.9z'/%3E%3Ccircle cx='1013.7' cy='153.9' r='7.1'/%3E%3Ccircle cx='1024.3' cy='132.1' r='7.1'/%3E%3Ccircle cx='1037.3' cy='148.9' r='7.1'/%3E%3Cpath d='M1508.7 297.2c-4.8-5.4-9.7-10.8-14.8-16.2 5.6-5.6 11.1-11.5 15.6-18.2 1.2-1.7.7-4.1-1-5.2-1.7-1.2-4.1-.7-5.2 1-4.2 6.2-9.1 11.6-14.5 16.9-4.8-5-9.7-10-14.7-14.9-1.5-1.5-3.9-1.5-5.3 0-1.5 1.5-1.5 3.9 0 5.3 4.9 4.8 9.7 9.8 14.5 14.8-1.1 1.1-2.3 2.2-3.5 3.2-4.1 3.8-8.4 7.8-12.4 12-1.4 1.5-1.4 3.8 0 5.3 0 0 0 0 0 0 1.5 1.4 3.9 1.4 5.3-.1 3.9-4 8.1-7.9 12.1-11.7 1.2-1.1 2.3-2.2 3.5-3.3 4.9 5.3 9.8 10.6 14.6 15.9.1.1.1.1.2.2 1.4 1.4 3.7 1.5 5.2.2C1510 301.2 1510.1 298.8 1508.7 297.2zM327.6 248.6l-.4-2.6c-1.5-11.1-2.2-23.2-2.3-37 0-5.5 0-11.5.2-18.5 0-.7 0-1.5 0-2.3 0-5 0-11.2 3.9-13.5 2.2-1.3 5.1-1 8.5.9 5.7 3.1 13.2 8.7 17.5 14.9 5.5 7.8 7.3 16.9 5 25.7-3.2 12.3-15 31-30 32.1L327.6 248.6zM332.1 179.2c-.2 0-.3 0-.4.1-.1.1-.7.5-1.1 2.7-.3 1.9-.3 4.2-.3 6.3 0 .8 0 1.7 0 2.4-.2 6.9-.2 12.8-.2 18.3.1 12.5.7 23.5 2 33.7 11-2.7 20.4-18.1 23-27.8 1.9-7.2.4-14.8-4.2-21.3l0 0C347 188.1 340 183 335 180.3 333.6 179.5 332.6 179.2 332.1 179.2zM516.3 60.8c-.1 0-.2 0-.4-.1-2.4-.7-4-.9-6.7-.7-.7 0-1.3-.5-1.4-1.2 0-.7.5-1.3 1.2-1.4 3.1-.2 4.9 0 7.6.8.7.2 1.1.9.9 1.6C517.3 60.4 516.8 60.8 516.3 60.8zM506.1 70.5c-.5 0-1-.3-1.2-.8-.8-2.1-1.2-4.3-1.3-6.6 0-.7.5-1.3 1.2-1.3.7 0 1.3.5 1.3 1.2.1 2 .5 3.9 1.1 5.8.2.7-.1 1.4-.8 1.6C506.4 70.5 506.2 70.5 506.1 70.5zM494.1 64.4c-.4 0-.8-.2-1-.5-.4-.6-.3-1.4.2-1.8 1.8-1.4 3.7-2.6 5.8-3.6.6-.3 1.4 0 1.7.6.3.6 0 1.4-.6 1.7-1.9.9-3.7 2-5.3 3.3C494.7 64.3 494.4 64.4 494.1 64.4zM500.5 55.3c-.5 0-.9-.3-1.2-.7-.5-1-1.2-1.9-2.4-3.4-.3-.4-.7-.9-1.1-1.4-.4-.6-.3-1.4.2-1.8.6-.4 1.4-.3 1.8.2.4.5.8 1 1.1 1.4 1.3 1.6 2.1 2.6 2.7 3.9.3.6 0 1.4-.6 1.7C500.9 55.3 500.7 55.3 500.5 55.3zM506.7 55c-.3 0-.5-.1-.8-.2-.6-.4-.7-1.2-.3-1.8 1.2-1.7 2.3-3.4 3.3-5.2.3-.6 1.1-.9 1.7-.5.6.3.9 1.1.5 1.7-1 1.9-2.2 3.8-3.5 5.6C507.4 54.8 507.1 55 506.7 55zM1029.3 382.8c-.1 0-.2 0-.4-.1-2.4-.7-4-.9-6.7-.7-.7 0-1.3-.5-1.4-1.2 0-.7.5-1.3 1.2-1.4 3.1-.2 4.9 0 7.6.8.7.2 1.1.9.9 1.6C1030.3 382.4 1029.8 382.8 1029.3 382.8zM1019.1 392.5c-.5 0-1-.3-1.2-.8-.8-2.1-1.2-4.3-1.3-6.6 0-.7.5-1.3 1.2-1.3.7 0 1.3.5 1.3 1.2.1 2 .5 3.9 1.1 5.8.2.7-.1 1.4-.8 1.6C1019.4 392.5 1019.2 392.5 1019.1 392.5zM1007.1 386.4c-.4 0-.8-.2-1-.5-.4-.6-.3-1.4.2-1.8 1.8-1.4 3.7-2.6 5.8-3.6.6-.3 1.4 0 1.7.6.3.6 0 1.4-.6 1.7-1.9.9-3.7 2-5.3 3.3C1007.7 386.3 1007.4 386.4 1007.1 386.4zM1013.5 377.3c-.5 0-.9-.3-1.2-.7-.5-1-1.2-1.9-2.4-3.4-.3-.4-.7-.9-1.1-1.4-.4-.6-.3-1.4.2-1.8.6-.4 1.4-.3 1.8.2.4.5.8 1 1.1 1.4 1.3 1.6 2.1 2.6 2.7 3.9.3.6 0 1.4-.6 1.7C1013.9 377.3 1013.7 377.3 1013.5 377.3zM1019.7 377c-.3 0-.5-.1-.8-.2-.6-.4-.7-1.2-.3-1.8 1.2-1.7 2.3-3.4 3.3-5.2.3-.6 1.1-.9 1.7-.5.6.3.9 1.1.5 1.7-1 1.9-2.2 3.8-3.5 5.6C1020.4 376.8 1020.1 377 1019.7 377zM1329.7 573.4c-1.4 0-2.9-.2-4.5-.7-8.4-2.7-16.6-12.7-18.7-20-.4-1.4-.7-2.9-.9-4.4-8.1 3.3-15.5 10.6-15.4 21 0 1.5-1.2 2.7-2.7 2.8 0 0 0 0 0 0-1.5 0-2.7-1.2-2.7-2.7-.1-6.7 2.4-12.9 7-18 3.6-4 8.4-7.1 13.7-8.8.5-6.5 3.1-12.9 7.4-17.4 7-7.4 18.2-8.9 27.3-10.1l.7-.1c1.5-.2 2.9.9 3.1 2.3.2 1.5-.9 2.9-2.3 3.1l-.7.1c-8.6 1.2-18.4 2.5-24 8.4-3 3.2-5 7.7-5.7 12.4 7.9-1 17.7 1.3 24.3 5.7 4.3 2.9 7.1 7.8 7.2 12.7.2 4.3-1.7 8.3-5.2 11.1C1335.2 572.4 1332.6 573.4 1329.7 573.4zM1311 546.7c.1 1.5.4 3 .8 4.4 1.7 5.8 8.7 14.2 15.1 16.3 2.8.9 5.1.5 7.2-1.1 2.7-2.1 3.2-4.8 3.1-6.6-.1-3.2-2-6.4-4.8-8.3C1326.7 547.5 1317.7 545.6 1311 546.7z'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-19{background-color:#305;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 1000'%3E%3Cg %3E%3Ccircle fill='%23330055' cx='50' cy='0' r='50'/%3E%3Cg fill='%233a015d' %3E%3Ccircle cx='0' cy='50' r='50'/%3E%3Ccircle cx='100' cy='50' r='50'/%3E%3C/g%3E%3Ccircle fill='%23410165' cx='50' cy='100' r='50'/%3E%3Cg fill='%2348026e' %3E%3Ccircle cx='0' cy='150' r='50'/%3E%3Ccircle cx='100' cy='150' r='50'/%3E%3C/g%3E%3Ccircle fill='%23500376' cx='50' cy='200' r='50'/%3E%3Cg fill='%2357047e' %3E%3Ccircle cx='0' cy='250' r='50'/%3E%3Ccircle cx='100' cy='250' r='50'/%3E%3C/g%3E%3Ccircle fill='%235f0587' cx='50' cy='300' r='50'/%3E%3Cg fill='%2367068f' %3E%3Ccircle cx='0' cy='350' r='50'/%3E%3Ccircle cx='100' cy='350' r='50'/%3E%3C/g%3E%3Ccircle fill='%236f0798' cx='50' cy='400' r='50'/%3E%3Cg fill='%237707a0' %3E%3Ccircle cx='0' cy='450' r='50'/%3E%3Ccircle cx='100' cy='450' r='50'/%3E%3C/g%3E%3Ccircle fill='%238008a9' cx='50' cy='500' r='50'/%3E%3Cg fill='%238909b1' %3E%3Ccircle cx='0' cy='550' r='50'/%3E%3Ccircle cx='100' cy='550' r='50'/%3E%3C/g%3E%3Ccircle fill='%239109ba' cx='50' cy='600' r='50'/%3E%3Cg fill='%239a09c3' %3E%3Ccircle cx='0' cy='650' r='50'/%3E%3Ccircle cx='100' cy='650' r='50'/%3E%3C/g%3E%3Ccircle fill='%23a309cb' cx='50' cy='700' r='50'/%3E%3Cg fill='%23ad09d4' %3E%3Ccircle cx='0' cy='750' r='50'/%3E%3Ccircle cx='100' cy='750' r='50'/%3E%3C/g%3E%3Ccircle fill='%23b608dc' cx='50' cy='800' r='50'/%3E%3Cg fill='%23c007e5' %3E%3Ccircle cx='0' cy='850' r='50'/%3E%3Ccircle cx='100' cy='850' r='50'/%3E%3C/g%3E%3Ccircle fill='%23c905ee' cx='50' cy='900' r='50'/%3E%3Cg fill='%23d303f6' %3E%3Ccircle cx='0' cy='950' r='50'/%3E%3Ccircle cx='100' cy='950' r='50'/%3E%3C/g%3E%3Ccircle fill='%23D0F' cx='50' cy='1000' r='50'/%3E%3C/g%3E%3C/svg%3E");background-size:contain}.trainer-card.trainer-bg-20{background-color:red;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1200 800'%3E%3Cdefs%3E%3ClinearGradient id='a' gradientUnits='userSpaceOnUse' x1='600' y1='25' x2='600' y2='777'%3E%3Cstop offset='0' stop-color='%23ff0000'/%3E%3Cstop offset='1' stop-color='%23E0F'/%3E%3C/linearGradient%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='650' y1='25' x2='650' y2='777'%3E%3Cstop offset='0' stop-color='%23ff0019'/%3E%3Cstop offset='1' stop-color='%23ce00f3'/%3E%3C/linearGradient%3E%3ClinearGradient id='c' gradientUnits='userSpaceOnUse' x1='700' y1='25' x2='700' y2='777'%3E%3Cstop offset='0' stop-color='%23ff0031'/%3E%3Cstop offset='1' stop-color='%23b000e6'/%3E%3C/linearGradient%3E%3ClinearGradient id='d' gradientUnits='userSpaceOnUse' x1='750' y1='25' x2='750' y2='777'%3E%3Cstop offset='0' stop-color='%23ff004a'/%3E%3Cstop offset='1' stop-color='%239400da'/%3E%3C/linearGradient%3E%3ClinearGradient id='e' gradientUnits='userSpaceOnUse' x1='800' y1='25' x2='800' y2='777'%3E%3Cstop offset='0' stop-color='%23ff0063'/%3E%3Cstop offset='1' stop-color='%237a00ce'/%3E%3C/linearGradient%3E%3ClinearGradient id='f' gradientUnits='userSpaceOnUse' x1='850' y1='25' x2='850' y2='777'%3E%3Cstop offset='0' stop-color='%23ff007c'/%3E%3Cstop offset='1' stop-color='%236200c1'/%3E%3C/linearGradient%3E%3ClinearGradient id='g' gradientUnits='userSpaceOnUse' x1='900' y1='25' x2='900' y2='777'%3E%3Cstop offset='0' stop-color='%23ff0094'/%3E%3Cstop offset='1' stop-color='%234d00b5'/%3E%3C/linearGradient%3E%3ClinearGradient id='h' gradientUnits='userSpaceOnUse' x1='950' y1='25' x2='950' y2='777'%3E%3Cstop offset='0' stop-color='%23ff00ad'/%3E%3Cstop offset='1' stop-color='%233900a8'/%3E%3C/linearGradient%3E%3ClinearGradient id='i' gradientUnits='userSpaceOnUse' x1='1000' y1='25' x2='1000' y2='777'%3E%3Cstop offset='0' stop-color='%23ff00c6'/%3E%3Cstop offset='1' stop-color='%2328009c'/%3E%3C/linearGradient%3E%3ClinearGradient id='j' gradientUnits='userSpaceOnUse' x1='1050' y1='25' x2='1050' y2='777'%3E%3Cstop offset='0' stop-color='%23ff00df'/%3E%3Cstop offset='1' stop-color='%23180090'/%3E%3C/linearGradient%3E%3ClinearGradient id='k' gradientUnits='userSpaceOnUse' x1='1100' y1='25' x2='1100' y2='777'%3E%3Cstop offset='0' stop-color='%23ff00f7'/%3E%3Cstop offset='1' stop-color='%230b0083'/%3E%3C/linearGradient%3E%3ClinearGradient id='l' gradientUnits='userSpaceOnUse' x1='1150' y1='25' x2='1150' y2='777'%3E%3Cstop offset='0' stop-color='%23E0F'/%3E%3Cstop offset='1' stop-color='%23007'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg %3E%3Crect fill='url(%23a)' width='1200' height='800'/%3E%3Crect fill='url(%23b)' x='100' width='1100' height='800'/%3E%3Crect fill='url(%23c)' x='200' width='1000' height='800'/%3E%3Crect fill='url(%23d)' x='300' width='900' height='800'/%3E%3Crect fill='url(%23e)' x='400' width='800' height='800'/%3E%3Crect fill='url(%23f)' x='500' width='700' height='800'/%3E%3Crect fill='url(%23g)' x='600' width='600' height='800'/%3E%3Crect fill='url(%23h)' x='700' width='500' height='800'/%3E%3Crect fill='url(%23i)' x='800' width='400' height='800'/%3E%3Crect fill='url(%23j)' x='900' width='300' height='800'/%3E%3Crect fill='url(%23k)' x='1000' width='200' height='800'/%3E%3Crect fill='url(%23l)' x='1100' width='100' height='800'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-21{background-color:#000;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1600 800'%3E%3Cg %3E%3Cpolygon fill='%23222222' points='800 100 0 200 0 800 1600 800 1600 200'/%3E%3Cpolygon fill='%23444444' points='800 200 0 400 0 800 1600 800 1600 400'/%3E%3Cpolygon fill='%23666666' points='800 300 0 600 0 800 1600 800 1600 600'/%3E%3Cpolygon fill='%23888888' points='1600 800 800 400 0 800'/%3E%3Cpolygon fill='%23aaaaaa' points='1280 800 800 500 320 800'/%3E%3Cpolygon fill='%23cccccc' points='533.3 800 1066.7 800 800 600'/%3E%3Cpolygon fill='%23EEE' points='684.1 800 914.3 800 800 700'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-22{background-color:#000;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1600 800'%3E%3Cg %3E%3Cpolygon fill='%23220000' points='1600 160 0 460 0 350 1600 50'/%3E%3Cpolygon fill='%23440000' points='1600 260 0 560 0 450 1600 150'/%3E%3Cpolygon fill='%23660000' points='1600 360 0 660 0 550 1600 250'/%3E%3Cpolygon fill='%23880000' points='1600 460 0 760 0 650 1600 350'/%3E%3Cpolygon fill='%23A00' points='1600 800 0 800 0 750 1600 450'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-23{background-color:#1a4;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='400' viewBox='0 0 200 200'%3E%3Cg fill='none' stroke='%237F3' stroke-width='1' stroke-opacity='0.2'%3E%3Crect x='-40' y='40' width='75' height='75'/%3E%3Crect x='-35' y='45' width='65' height='65'/%3E%3Crect x='-30' y='50' width='55' height='55'/%3E%3Crect x='-25' y='55' width='45' height='45'/%3E%3Crect x='-20' y='60' width='35' height='35'/%3E%3Crect x='-15' y='65' width='25' height='25'/%3E%3Crect x='-10' y='70' width='15' height='15'/%3E%3Crect x='-5' y='75' width='5' height='5'/%3E%3Crect width='35' height='35'/%3E%3Crect x='5' y='5' width='25' height='25'/%3E%3Crect x='10' y='10' width='15' height='15'/%3E%3Crect x='15' y='15' width='5' height='5'/%3E%3Crect x='40' width='75' height='75'/%3E%3Crect x='45' y='5' width='65' height='65'/%3E%3Crect x='50' y='10' width='55' height='55'/%3E%3Crect x='55' y='15' width='45' height='45'/%3E%3Crect x='60' y='20' width='35' height='35'/%3E%3Crect x='65' y='25' width='25' height='25'/%3E%3Crect x='70' y='30' width='15' height='15'/%3E%3Crect x='75' y='35' width='5' height='5'/%3E%3Crect x='40' y='80' width='35' height='35'/%3E%3Crect x='45' y='85' width='25' height='25'/%3E%3Crect x='50' y='90' width='15' height='15'/%3E%3Crect x='55' y='95' width='5' height='5'/%3E%3Crect x='120' y='-40' width='75' height='75'/%3E%3Crect x='125' y='-35' width='65' height='65'/%3E%3Crect x='130' y='-30' width='55' height='55'/%3E%3Crect x='135' y='-25' width='45' height='45'/%3E%3Crect x='140' y='-20' width='35' height='35'/%3E%3Crect x='145' y='-15' width='25' height='25'/%3E%3Crect x='150' y='-10' width='15' height='15'/%3E%3Crect x='155' y='-5' width='5' height='5'/%3E%3Crect x='120' y='40' width='35' height='35'/%3E%3Crect x='125' y='45' width='25' height='25'/%3E%3Crect x='130' y='50' width='15' height='15'/%3E%3Crect x='135' y='55' width='5' height='5'/%3E%3Crect y='120' width='75' height='75'/%3E%3Crect x='5' y='125' width='65' height='65'/%3E%3Crect x='10' y='130' width='55' height='55'/%3E%3Crect x='15' y='135' width='45' height='45'/%3E%3Crect x='20' y='140' width='35' height='35'/%3E%3Crect x='25' y='145' width='25' height='25'/%3E%3Crect x='30' y='150' width='15' height='15'/%3E%3Crect x='35' y='155' width='5' height='5'/%3E%3Crect x='200' y='120' width='75' height='75'/%3E%3Crect x='40' y='200' width='75' height='75'/%3E%3Crect x='80' y='80' width='75' height='75'/%3E%3Crect x='85' y='85' width='65' height='65'/%3E%3Crect x='90' y='90' width='55' height='55'/%3E%3Crect x='95' y='95' width='45' height='45'/%3E%3Crect x='100' y='100' width='35' height='35'/%3E%3Crect x='105' y='105' width='25' height='25'/%3E%3Crect x='110' y='110' width='15' height='15'/%3E%3Crect x='115' y='115' width='5' height='5'/%3E%3Crect x='80' y='160' width='35' height='35'/%3E%3Crect x='85' y='165' width='25' height='25'/%3E%3Crect x='90' y='170' width='15' height='15'/%3E%3Crect x='95' y='175' width='5' height='5'/%3E%3Crect x='120' y='160' width='75' height='75'/%3E%3Crect x='125' y='165' width='65' height='65'/%3E%3Crect x='130' y='170' width='55' height='55'/%3E%3Crect x='135' y='175' width='45' height='45'/%3E%3Crect x='140' y='180' width='35' height='35'/%3E%3Crect x='145' y='185' width='25' height='25'/%3E%3Crect x='150' y='190' width='15' height='15'/%3E%3Crect x='155' y='195' width='5' height='5'/%3E%3Crect x='160' y='40' width='75' height='75'/%3E%3Crect x='165' y='45' width='65' height='65'/%3E%3Crect x='170' y='50' width='55' height='55'/%3E%3Crect x='175' y='55' width='45' height='45'/%3E%3Crect x='180' y='60' width='35' height='35'/%3E%3Crect x='185' y='65' width='25' height='25'/%3E%3Crect x='190' y='70' width='15' height='15'/%3E%3Crect x='195' y='75' width='5' height='5'/%3E%3Crect x='160' y='120' width='35' height='35'/%3E%3Crect x='165' y='125' width='25' height='25'/%3E%3Crect x='170' y='130' width='15' height='15'/%3E%3Crect x='175' y='135' width='5' height='5'/%3E%3Crect x='200' y='200' width='35' height='35'/%3E%3Crect x='200' width='35' height='35'/%3E%3Crect y='200' width='35' height='35'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-24{background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160' viewBox='0 0 200 200'%3E%3Cpolygon fill='%23DCEFFA' points='100 0 0 100 100 100 100 200 200 100 200 0'/%3E%3C/svg%3E")}.trainer-card.trainer-bg-25{background-color:#ba9;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='200' viewBox='0 0 160 80'%3E%3Cg fill='%23B0A090' %3E%3Cpolygon points='0 10 0 0 10 0'/%3E%3Cpolygon points='0 40 0 30 10 30'/%3E%3Cpolygon points='0 30 0 20 10 20'/%3E%3Cpolygon points='0 70 0 60 10 60'/%3E%3Cpolygon points='0 80 0 70 10 70'/%3E%3Cpolygon points='50 80 50 70 60 70'/%3E%3Cpolygon points='10 20 10 10 20 10'/%3E%3Cpolygon points='10 40 10 30 20 30'/%3E%3Cpolygon points='20 10 20 0 30 0'/%3E%3Cpolygon points='10 10 10 0 20 0'/%3E%3Cpolygon points='30 20 30 10 40 10'/%3E%3Cpolygon points='20 20 20 40 40 20'/%3E%3Cpolygon points='40 10 40 0 50 0'/%3E%3Cpolygon points='40 20 40 10 50 10'/%3E%3Cpolygon points='40 40 40 30 50 30'/%3E%3Cpolygon points='30 40 30 30 40 30'/%3E%3Cpolygon points='40 60 40 50 50 50'/%3E%3Cpolygon points='50 30 50 20 60 20'/%3E%3Cpolygon points='40 60 40 80 60 60'/%3E%3Cpolygon points='50 40 50 60 70 40'/%3E%3Cpolygon points='60 0 60 20 80 0'/%3E%3Cpolygon points='70 30 70 20 80 20'/%3E%3Cpolygon points='70 40 70 30 80 30'/%3E%3Cpolygon points='60 60 60 80 80 60'/%3E%3Cpolygon points='80 10 80 0 90 0'/%3E%3Cpolygon points='70 40 70 60 90 40'/%3E%3Cpolygon points='80 60 80 50 90 50'/%3E%3Cpolygon points='60 30 60 20 70 20'/%3E%3Cpolygon points='80 70 80 80 90 80 100 70'/%3E%3Cpolygon points='80 10 80 40 110 10'/%3E%3Cpolygon points='110 40 110 30 120 30'/%3E%3Cpolygon points='90 40 90 70 120 40'/%3E%3Cpolygon points='10 50 10 80 40 50'/%3E%3Cpolygon points='110 60 110 50 120 50'/%3E%3Cpolygon points='100 60 100 80 120 60'/%3E%3Cpolygon points='110 0 110 20 130 0'/%3E%3Cpolygon points='120 30 120 20 130 20'/%3E%3Cpolygon points='130 10 130 0 140 0'/%3E%3Cpolygon points='130 30 130 20 140 20'/%3E%3Cpolygon points='120 40 120 30 130 30'/%3E%3Cpolygon points='130 50 130 40 140 40'/%3E%3Cpolygon points='120 50 120 70 140 50'/%3E%3Cpolygon points='110 70 110 80 130 80 140 70'/%3E%3Cpolygon points='140 10 140 0 150 0'/%3E%3Cpolygon points='140 20 140 10 150 10'/%3E%3Cpolygon points='140 40 140 30 150 30'/%3E%3Cpolygon points='140 50 140 40 150 40'/%3E%3Cpolygon points='140 70 140 60 150 60'/%3E%3Cpolygon points='150 20 150 40 160 30 160 20'/%3E%3Cpolygon points='150 60 150 50 160 50'/%3E%3Cpolygon points='140 70 140 80 150 80 160 70'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-26{background-color:#09f;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1600 900'%3E%3Cdefs%3E%3CradialGradient id='a' cx='800' cy='371' r='70%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%230099ff'/%3E%3Cstop offset='1' stop-color='%2304C'/%3E%3C/radialGradient%3E%3CradialGradient id='b' cx='800' cy='371' r='60%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%230EF' stop-opacity='1'/%3E%3Cstop offset='1' stop-color='%230EF' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='1600' height='900'/%3E%3Cg fill='none' stroke='%2303E' stroke-width='10' stroke-miterlimit='10' stroke-opacity='.5'%3E%3Cpolygon points='2277.4 1152 800-1407-677.4 1152'/%3E%3Cpolygon points='800-1372.9-648.8 1136.5 2248.8 1136.5'/%3E%3Cpolygon points='800-1338.8-620.2 1121.1 2220.2 1121.1'/%3E%3Cpolygon points='800-1304.7-591.6 1105.6 2191.6 1105.6'/%3E%3Cpolygon points='800-1270.6-563 1090.2 2163 1090.2'/%3E%3Cpolygon points='800-1236.5-534.4 1074.7 2134.4 1074.7'/%3E%3Cpolygon points='800-1202.4-505.8 1059.3 2105.8 1059.3'/%3E%3Cpolygon points='800-1168.3-477.2 1043.8 2077.2 1043.8'/%3E%3Cpolygon points='800-1134.2-448.6 1028.4 2048.6 1028.4'/%3E%3Cpolygon points='800-1100.1-420 1012.9 2020 1012.9'/%3E%3Cpolygon points='800-1066-391.4 997.5 1991.4 997.5'/%3E%3Cpolygon points='800-1031.9-362.7 982 1962.7 982'/%3E%3Cpolygon points='800-997.8-334.1 966.6 1934.1 966.6'/%3E%3Cpolygon points='800-963.7-305.5 951.1 1905.5 951.1'/%3E%3Cpolygon points='800-929.6-276.9 935.7 1876.9 935.7'/%3E%3Cpolygon points='800-895.5-248.3 920.2 1848.3 920.2'/%3E%3Cpolygon points='800-861.4-219.7 904.7 1819.7 904.7'/%3E%3Cpolygon points='800-827.3-191.1 889.3 1791.1 889.3'/%3E%3Cpolygon points='800-793.2-162.5 873.8 1762.5 873.8'/%3E%3Cpolygon points='800-759.1-133.9 858.4 1733.9 858.4'/%3E%3Cpolygon points='800-725-105.3 842.9 1705.3 842.9'/%3E%3Cpolygon points='800-690.9-76.7 827.5 1676.7 827.5'/%3E%3Cpolygon points='800-656.8-48.1 812 1648.1 812'/%3E%3Cpolygon points='800-622.7-19.4 796.6 1619.4 796.6'/%3E%3Cpolygon points='800-588.6 9.2 781.1 1590.8 781.1'/%3E%3Cpolygon points='800-554.5 37.8 765.7 1562.2 765.7'/%3E%3Cpolygon points='800-520.5 66.4 750.2 1533.6 750.2'/%3E%3Cpolygon points='800-486.4 95 734.8 1505 734.8'/%3E%3Cpolygon points='800-452.3 123.6 719.3 1476.4 719.3'/%3E%3Cpolygon points='800-418.2 152.2 703.9 1447.8 703.9'/%3E%3Cpolygon points='800-384.1 180.8 688.4 1419.2 688.4'/%3E%3Cpolygon points='800-350 209.4 673 1390.6 673'/%3E%3Cpolygon points='800-315.9 238 657.5 1362 657.5'/%3E%3Cpolygon points='800-281.8 266.6 642 1333.4 642'/%3E%3Cpolygon points='800-247.7 295.2 626.6 1304.8 626.6'/%3E%3Cpolygon points='800-213.6 323.9 611.1 1276.1 611.1'/%3E%3Cpolygon points='800-179.5 352.5 595.7 1247.5 595.7'/%3E%3Cpolygon points='800-145.4 381.1 580.2 1218.9 580.2'/%3E%3Cpolygon points='800-111.3 409.7 564.8 1190.3 564.8'/%3E%3Cpolygon points='800-77.2 438.3 549.3 1161.7 549.3'/%3E%3Cpolygon points='800-43.1 466.9 533.9 1133.1 533.9'/%3E%3Cpolygon points='800-9 495.5 518.4 1104.5 518.4'/%3E%3Cpolygon points='800 25.1 524.1 503 1075.9 503'/%3E%3Cpolygon points='800 59.2 552.7 487.5 1047.3 487.5'/%3E%3Cpolygon points='800 93.3 581.3 472.1 1018.7 472.1'/%3E%3Cpolygon points='800 127.4 609.9 456.6 990.1 456.6'/%3E%3Cpolygon points='800 161.5 638.5 441.2 961.5 441.2'/%3E%3Cpolygon points='800 195.6 667.2 425.7 932.8 425.7'/%3E%3Cpolygon points='800 229.7 695.8 410.2 904.2 410.2'/%3E%3Cpolygon points='800 263.8 724.4 394.8 875.6 394.8'/%3E%3Cpolygon points='800 297.9 753 379.3 847 379.3'/%3E%3Cpolygon points='800 332 781.6 363.9 818.4 363.9'/%3E%3C/g%3E%3Crect fill-opacity='.5' fill='url(%23b)' width='1600' height='900'/%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-27{background-color:#d3b;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1000 1000'%3E%3Cdefs%3E%3CradialGradient id='a' cx='500' cy='500' r='50%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23dd33bb'/%3E%3Cstop offset='1' stop-color='%23404'/%3E%3C/radialGradient%3E%3CradialGradient id='b' cx='500' cy='500' r='60%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23F70' stop-opacity='1'/%3E%3Cstop offset='1' stop-color='%23F70' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='1000' height='1000'/%3E%3Cg fill='none' stroke='%23F6B' stroke-width='1' stroke-miterlimit='10' stroke-opacity='.3'%3E%3Crect x='12.5' y='12.5' width='975' height='975'/%3E%3Crect x='25' y='25' width='950' height='950'/%3E%3Crect x='37.5' y='37.5' width='925' height='925'/%3E%3Crect x='50' y='50' width='900' height='900'/%3E%3Crect x='62.5' y='62.5' width='875' height='875'/%3E%3Crect x='75' y='75' width='850' height='850'/%3E%3Crect x='87.5' y='87.5' width='825' height='825'/%3E%3Crect x='100' y='100' width='800' height='800'/%3E%3Crect x='112.5' y='112.5' width='775' height='775'/%3E%3Crect x='125' y='125' width='750' height='750'/%3E%3Crect x='137.5' y='137.5' width='725' height='725'/%3E%3Crect x='150' y='150' width='700' height='700'/%3E%3Crect x='162.5' y='162.5' width='675' height='675'/%3E%3Crect x='175' y='175' width='650' height='650'/%3E%3Crect x='187.5' y='187.5' width='625' height='625'/%3E%3Crect x='200' y='200' width='600' height='600'/%3E%3Crect x='212.5' y='212.5' width='575' height='575'/%3E%3Crect x='225' y='225' width='550' height='550'/%3E%3Crect x='237.5' y='237.5' width='525' height='525'/%3E%3Crect x='250' y='250' width='500' height='500'/%3E%3Crect x='262.5' y='262.5' width='475' height='475'/%3E%3Crect x='275' y='275' width='450' height='450'/%3E%3Crect x='287.5' y='287.5' width='425' height='425'/%3E%3Crect x='300' y='300' width='400' height='400'/%3E%3Crect x='312.5' y='312.5' width='375' height='375'/%3E%3Crect x='325' y='325' width='350' height='350'/%3E%3Crect x='337.5' y='337.5' width='325' height='325'/%3E%3Crect x='350' y='350' width='300' height='300'/%3E%3Crect x='362.5' y='362.5' width='275' height='275'/%3E%3Crect x='375' y='375' width='250' height='250'/%3E%3Crect x='387.5' y='387.5' width='225' height='225'/%3E%3Crect x='400' y='400' width='200' height='200'/%3E%3Crect x='412.5' y='412.5' width='175' height='175'/%3E%3Crect x='425' y='425' width='150' height='150'/%3E%3Crect x='437.5' y='437.5' width='125' height='125'/%3E%3Crect x='450' y='450' width='100' height='100'/%3E%3Crect x='462.5' y='462.5' width='75' height='75'/%3E%3Crect x='475' y='475' width='50' height='50'/%3E%3Crect x='487.5' y='487.5' width='25' height='25'/%3E%3C/g%3E%3Crect fill-opacity='.3' fill='url(%23b)' width='1000' height='1000'/%3E %3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-28{background-color:#6f7;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1000 1000'%3E%3Cdefs%3E%3CradialGradient id='a' cx='500' cy='500' r='975' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%2366ff77'/%3E%3Cstop offset='1' stop-color='%23240'/%3E%3C/radialGradient%3E%3CradialGradient id='b' cx='500' cy='500' r='975' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23EF5' stop-opacity='1'/%3E%3Cstop offset='1' stop-color='%23EF5' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='1000' height='1000'/%3E%3Cg fill='none' stroke='%23081' stroke-width='10' stroke-miterlimit='10' stroke-opacity='.2'%3E%3Cpolygon points='-500%2C500 500%2C-500 1500%2C500 500%2C1500'/%3E%3Cpolygon points='-475%2C500 500%2C-475 1475%2C500 500%2C1475'/%3E%3Cpolygon points='-450%2C500 500%2C-450 1450%2C500 500%2C1450'/%3E%3Cpolygon points='-425%2C500 500%2C-425 1425%2C500 500%2C1425'/%3E%3Cpolygon points='-400%2C500 500%2C-400 1400%2C500 500%2C1400'/%3E%3Cpolygon points='-375%2C500 500%2C-375 1375%2C500 500%2C1375'/%3E%3Cpolygon points='-350%2C500 500%2C-350 1350%2C500 500%2C1350'/%3E%3Cpolygon points='-325%2C500 500%2C-325 1325%2C500 500%2C1325'/%3E%3Cpolygon points='-300%2C500 500%2C-300 1300%2C500 500%2C1300'/%3E%3Cpolygon points='-275%2C500 500%2C-275 1275%2C500 500%2C1275'/%3E%3Cpolygon points='-250%2C500 500%2C-250 1250%2C500 500%2C1250'/%3E%3Cpolygon points='-225%2C500 500%2C-225 1225%2C500 500%2C1225'/%3E%3Cpolygon points='-200%2C500 500%2C-200 1200%2C500 500%2C1200'/%3E%3Cpolygon points='-175%2C500 500%2C-175 1175%2C500 500%2C1175'/%3E%3Cpolygon points='-150%2C500 500%2C-150 1150%2C500 500%2C1150'/%3E%3Cpolygon points='-125%2C500 500%2C-125 1125%2C500 500%2C1125'/%3E%3Cpolygon points='-100%2C500 500%2C-100 1100%2C500 500%2C1100'/%3E%3Cpolygon points='-75%2C500 500%2C-75 1075%2C500 500%2C1075'/%3E%3Cpolygon points='-50%2C500 500%2C-50 1050%2C500 500%2C1050'/%3E%3Cpolygon points='-25%2C500 500%2C-25 1025%2C500 500%2C1025'/%3E%3Cpolygon points='0%2C500 500%2C0 1000%2C500 500%2C1000'/%3E%3Cpolygon points='25%2C500 500%2C25 975%2C500 500%2C975'/%3E%3Cpolygon points='50%2C500 500%2C50 950%2C500 500%2C950'/%3E%3Cpolygon points='75%2C500 500%2C75 925%2C500 500%2C925'/%3E%3Cpolygon points='100%2C500 500%2C100 900%2C500 500%2C900'/%3E%3Cpolygon points='125%2C500 500%2C125 875%2C500 500%2C875'/%3E%3Cpolygon points='150%2C500 500%2C150 850%2C500 500%2C850'/%3E%3Cpolygon points='175%2C500 500%2C175 825%2C500 500%2C825'/%3E%3Cpolygon points='200%2C500 500%2C200 800%2C500 500%2C800'/%3E%3Cpolygon points='225%2C500 500%2C225 775%2C500 500%2C775'/%3E%3Cpolygon points='250%2C500 500%2C250 750%2C500 500%2C750'/%3E%3Cpolygon points='275%2C500 500%2C275 725%2C500 500%2C725'/%3E%3Cpolygon points='300%2C500 500%2C300 700%2C500 500%2C700'/%3E%3Cpolygon points='325%2C500 500%2C325 675%2C500 500%2C675'/%3E%3Cpolygon points='350%2C500 500%2C350 650%2C500 500%2C650'/%3E%3Cpolygon points='375%2C500 500%2C375 625%2C500 500%2C625'/%3E%3Cpolygon points='400%2C500 500%2C400 600%2C500 500%2C600'/%3E%3Cpolygon points='425%2C500 500%2C425 575%2C500 500%2C575'/%3E%3Cpolygon points='450%2C500 500%2C450 550%2C500 500%2C550'/%3E%3Cpolygon points='475%2C500 500%2C475 525%2C500 500%2C525'/%3E%3C/g%3E%3Crect fill-opacity='.2' fill='url(%23b)' width='1000' height='1000'/%3E %3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-29{background-color:red;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1000 1000'%3E%3Cdefs%3E%3CradialGradient id='a' cx='500' cy='500' r='60%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23ff0000'/%3E%3Cstop offset='1' stop-color='%23900'/%3E%3C/radialGradient%3E%3CradialGradient id='b' cx='500' cy='500' r='70%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23FF0' stop-opacity='1'/%3E%3Cstop offset='1' stop-color='%23FF0' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='1000' height='1000'/%3E%3Cg fill='none' stroke='%23F40' stroke-width='2' stroke-miterlimit='10' stroke-opacity='.5'%3E%3Ccircle cx='500' cy='500' r='725'/%3E%3Ccircle cx='500' cy='500' r='700'/%3E%3Ccircle cx='500' cy='500' r='675'/%3E%3Ccircle cx='500' cy='500' r='650'/%3E%3Ccircle cx='500' cy='500' r='625'/%3E%3Ccircle cx='500' cy='500' r='600'/%3E%3Ccircle cx='500' cy='500' r='575'/%3E%3Ccircle cx='500' cy='500' r='550'/%3E%3Ccircle cx='500' cy='500' r='525'/%3E%3Ccircle cx='500' cy='500' r='500'/%3E%3Ccircle cx='500' cy='500' r='475'/%3E%3Ccircle cx='500' cy='500' r='450'/%3E%3Ccircle cx='500' cy='500' r='425'/%3E%3Ccircle cx='500' cy='500' r='400'/%3E%3Ccircle cx='500' cy='500' r='375'/%3E%3Ccircle cx='500' cy='500' r='350'/%3E%3Ccircle cx='500' cy='500' r='325'/%3E%3Ccircle cx='500' cy='500' r='300'/%3E%3Ccircle cx='500' cy='500' r='275'/%3E%3Ccircle cx='500' cy='500' r='250'/%3E%3Ccircle cx='500' cy='500' r='225'/%3E%3Ccircle cx='500' cy='500' r='200'/%3E%3Ccircle cx='500' cy='500' r='175'/%3E%3Ccircle cx='500' cy='500' r='150'/%3E%3Ccircle cx='500' cy='500' r='125'/%3E%3Ccircle cx='500' cy='500' r='100'/%3E%3Ccircle cx='500' cy='500' r='75'/%3E%3Ccircle cx='500' cy='500' r='50'/%3E%3Ccircle cx='500' cy='500' r='25'/%3E%3C/g%3E%3Crect fill-opacity='.5' fill='url(%23b)' width='1000' height='1000'/%3E %3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-30{background-color:#303;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='90' height='90' viewBox='0 0 90 90'%3E%3Ccircle fill='%2306B' cx='45' cy='45' r='10'/%3E%3Cg fill='%23800' fill-opacity='1'%3E%3Ccircle cx='0' cy='90' r='10'/%3E%3Ccircle cx='90' cy='90' r='10'/%3E%3Ccircle cx='90' cy='0' r='10'/%3E%3Ccircle cx='0' cy='0' r='10'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-31{background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='100' viewBox='0 0 600 100'%3E%3Cg stroke='%23FFF' stroke-width='0' stroke-miterlimit='10' %3E%3Ccircle fill='%23037B79' cx='0' cy='0' r='50'/%3E%3Ccircle fill='%2392DEBA' cx='100' cy='0' r='50'/%3E%3Ccircle fill='%23FFFFD8' cx='200' cy='0' r='50'/%3E%3Ccircle fill='%23CAF2FF' cx='300' cy='0' r='50'/%3E%3Ccircle fill='%236FCCFF' cx='400' cy='0' r='50'/%3E%3Ccircle fill='%23006EB4' cx='500' cy='0' r='50'/%3E%3Ccircle fill='%23037B79' cx='600' cy='0' r='50'/%3E%3Ccircle cx='-50' cy='50' r='50'/%3E%3Ccircle fill='%2353ac9a' cx='50' cy='50' r='50'/%3E%3Ccircle fill='%23ceefc1' cx='150' cy='50' r='50'/%3E%3Ccircle fill='%23ffffff' cx='250' cy='50' r='50'/%3E%3Ccircle fill='%239de0fe' cx='350' cy='50' r='50'/%3E%3Ccircle fill='%233e9cda' cx='450' cy='50' r='50'/%3E%3Ccircle fill='%2300789c' cx='550' cy='50' r='50'/%3E%3Ccircle cx='650' cy='50' r='50'/%3E%3Ccircle fill='%23037B79' cx='0' cy='100' r='50'/%3E%3Ccircle fill='%2392DEBA' cx='100' cy='100' r='50'/%3E%3Ccircle fill='%23FFFFD8' cx='200' cy='100' r='50'/%3E%3Ccircle fill='%23CAF2FF' cx='300' cy='100' r='50'/%3E%3Ccircle fill='%236FCCFF' cx='400' cy='100' r='50'/%3E%3Ccircle fill='%23006EB4' cx='500' cy='100' r='50'/%3E%3Ccircle fill='%23037B79' cx='600' cy='100' r='50'/%3E%3Ccircle cx='50' cy='150' r='50'/%3E%3Ccircle cx='150' cy='150' r='50'/%3E%3Ccircle cx='250' cy='150' r='50'/%3E%3Ccircle cx='350' cy='150' r='50'/%3E%3Ccircle cx='450' cy='150' r='50'/%3E%3Ccircle cx='550' cy='150' r='50'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-32{background-color:#ccc;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 100%25 100%25'%3E%3Cdefs%3E%3ClinearGradient id='a' x1='0' x2='0' y1='0' y2='100%25' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23cccccc'/%3E%3Cstop offset='0.02' stop-color='%23cccccc'/%3E%3Cstop offset='0.02' stop-color='%23c4c4c4'/%3E%3Cstop offset='0.032' stop-color='%23cccccc'/%3E%3Cstop offset='0.032' stop-color='%23cecece'/%3E%3Cstop offset='0.056' stop-color='%23cccccc'/%3E%3Cstop offset='0.056' stop-color='%23f5f5f5'/%3E%3Cstop offset='0.07' stop-color='%23cccccc'/%3E%3Cstop offset='0.07' stop-color='%23b7b7b7'/%3E%3Cstop offset='0.1' stop-color='%23cccccc'/%3E%3Cstop offset='0.1' stop-color='%234e4e4e'/%3E%3Cstop offset='0.126' stop-color='%23cccccc'/%3E%3Cstop offset='0.126' stop-color='%235b5b5b'/%3E%3Cstop offset='0.142' stop-color='%23cccccc'/%3E%3Cstop offset='0.142' stop-color='%23707070'/%3E%3Cstop offset='0.159' stop-color='%23cccccc'/%3E%3Cstop offset='0.159' stop-color='%23b1b1b1'/%3E%3Cstop offset='0.17' stop-color='%23cccccc'/%3E%3Cstop offset='0.17' stop-color='%23aaaaaa'/%3E%3Cstop offset='0.197' stop-color='%23cccccc'/%3E%3Cstop offset='0.197' stop-color='%23e6e6e6'/%3E%3Cstop offset='0.218' stop-color='%23cccccc'/%3E%3Cstop offset='0.218' stop-color='%23dadada'/%3E%3Cstop offset='0.239' stop-color='%23cccccc'/%3E%3Cstop offset='0.239' stop-color='%23959595'/%3E%3Cstop offset='0.254' stop-color='%23cccccc'/%3E%3Cstop offset='0.254' stop-color='%23bbbbbb'/%3E%3Cstop offset='0.283' stop-color='%23cccccc'/%3E%3Cstop offset='0.283' stop-color='%23858585'/%3E%3Cstop offset='0.294' stop-color='%23cccccc'/%3E%3Cstop offset='0.294' stop-color='%23808080'/%3E%3Cstop offset='0.305' stop-color='%23cccccc'/%3E%3Cstop offset='0.305' stop-color='%23e4e4e4'/%3E%3Cstop offset='0.332' stop-color='%23cccccc'/%3E%3Cstop offset='0.332' stop-color='%23c3c3c3'/%3E%3Cstop offset='0.346' stop-color='%23cccccc'/%3E%3Cstop offset='0.346' stop-color='%237f7f7f'/%3E%3Cstop offset='0.362' stop-color='%23cccccc'/%3E%3Cstop offset='0.362' stop-color='%23b0b0b0'/%3E%3Cstop offset='0.381' stop-color='%23cccccc'/%3E%3Cstop offset='0.381' stop-color='%23575757'/%3E%3Cstop offset='0.415' stop-color='%23cccccc'/%3E%3Cstop offset='0.415' stop-color='%23c8c8c8'/%3E%3Cstop offset='0.428' stop-color='%23cccccc'/%3E%3Cstop offset='0.428' stop-color='%23c0c0c0'/%3E%3Cstop offset='0.442' stop-color='%23cccccc'/%3E%3Cstop offset='0.442' stop-color='%23cfcfcf'/%3E%3Cstop offset='0.456' stop-color='%23cccccc'/%3E%3Cstop offset='0.456' stop-color='%23cbcbcb'/%3E%3Cstop offset='0.498' stop-color='%23cccccc'/%3E%3Cstop offset='0.498' stop-color='%237f7f7f'/%3E%3Cstop offset='0.511' stop-color='%23cccccc'/%3E%3Cstop offset='0.511' stop-color='%23cbcbcb'/%3E%3Cstop offset='0.532' stop-color='%23cccccc'/%3E%3Cstop offset='0.532' stop-color='%235b5b5b'/%3E%3Cstop offset='0.541' stop-color='%23cccccc'/%3E%3Cstop offset='0.541' stop-color='%231c1c1c'/%3E%3Cstop offset='0.56' stop-color='%23cccccc'/%3E%3Cstop offset='0.56' stop-color='%237f7f7f'/%3E%3Cstop offset='0.581' stop-color='%23cccccc'/%3E%3Cstop offset='0.581' stop-color='%236d6d6d'/%3E%3Cstop offset='0.6' stop-color='%23cccccc'/%3E%3Cstop offset='0.6' stop-color='%23cccccc'/%3E%3Cstop offset='0.618' stop-color='%23cccccc'/%3E%3Cstop offset='0.618' stop-color='%235d5d5d'/%3E%3Cstop offset='0.656' stop-color='%23cccccc'/%3E%3Cstop offset='0.656' stop-color='%23474747'/%3E%3Cstop offset='0.679' stop-color='%23cccccc'/%3E%3Cstop offset='0.679' stop-color='%23636363'/%3E%3Cstop offset='0.689' stop-color='%23cccccc'/%3E%3Cstop offset='0.689' stop-color='%23cccccc'/%3E%3Cstop offset='0.720' stop-color='%23cccccc'/%3E%3Cstop offset='0.720' stop-color='%23bebebe'/%3E%3Cstop offset='0.734' stop-color='%23cccccc'/%3E%3Cstop offset='0.734' stop-color='%23bababa'/%3E%3Cstop offset='0.748' stop-color='%23cccccc'/%3E%3Cstop offset='0.748' stop-color='%23cecece'/%3E%3Cstop offset='0.764' stop-color='%23cccccc'/%3E%3Cstop offset='0.764' stop-color='%23c2c2c2'/%3E%3Cstop offset='0.788' stop-color='%23cccccc'/%3E%3Cstop offset='0.788' stop-color='%23b1b1b1'/%3E%3Cstop offset='0.808' stop-color='%23cccccc'/%3E%3Cstop offset='0.808' stop-color='%23cecece'/%3E%3Cstop offset='0.831' stop-color='%23cccccc'/%3E%3Cstop offset='0.831' stop-color='%23676767'/%3E%3Cstop offset='0.856' stop-color='%23cccccc'/%3E%3Cstop offset='0.856' stop-color='%236b6b6b'/%3E%3Cstop offset='0.872' stop-color='%23cccccc'/%3E%3Cstop offset='0.872' stop-color='%23c4c4c4'/%3E%3Cstop offset='0.894' stop-color='%23cccccc'/%3E%3Cstop offset='0.894' stop-color='%239e9e9e'/%3E%3Cstop offset='0.914' stop-color='%23cccccc'/%3E%3Cstop offset='0.914' stop-color='%235a5a5a'/%3E%3Cstop offset='0.942' stop-color='%23cccccc'/%3E%3Cstop offset='0.942' stop-color='%23686868'/%3E%3Cstop offset='0.957' stop-color='%23cccccc'/%3E%3Cstop offset='0.957' stop-color='%23c2c2c2'/%3E%3Cstop offset='0.973' stop-color='%23cccccc'/%3E%3Cstop offset='0.973' stop-color='%23b3b3b3'/%3E%3Cstop offset='1' stop-color='%23cccccc'/%3E%3Cstop offset='1' stop-color='%237d7d7d'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' x='0' y='0' width='100%25' height='100%25'/%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-33{background-color:#002;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2000' height='2000' viewBox='0 0 800 800'%3E%3Cg fill='none' %3E%3Cg stroke='%23026' stroke-width='17'%3E%3Cline x1='-8' y1='-8' x2='808' y2='808'/%3E%3Cline x1='-8' y1='792' x2='808' y2='1608'/%3E%3Cline x1='-8' y1='-808' x2='808' y2='8'/%3E%3C/g%3E%3Cg stroke='%23002163' stroke-width='16'%3E%3Cline x1='-8' y1='767' x2='808' y2='1583'/%3E%3Cline x1='-8' y1='17' x2='808' y2='833'/%3E%3Cline x1='-8' y1='-33' x2='808' y2='783'/%3E%3Cline x1='-8' y1='-783' x2='808' y2='33'/%3E%3C/g%3E%3Cg stroke='%23002060' stroke-width='15'%3E%3Cline x1='-8' y1='742' x2='808' y2='1558'/%3E%3Cline x1='-8' y1='42' x2='808' y2='858'/%3E%3Cline x1='-8' y1='-58' x2='808' y2='758'/%3E%3Cline x1='-8' y1='-758' x2='808' y2='58'/%3E%3C/g%3E%3Cg stroke='%23001f5c' stroke-width='14'%3E%3Cline x1='-8' y1='67' x2='808' y2='883'/%3E%3Cline x1='-8' y1='717' x2='808' y2='1533'/%3E%3Cline x1='-8' y1='-733' x2='808' y2='83'/%3E%3Cline x1='-8' y1='-83' x2='808' y2='733'/%3E%3C/g%3E%3Cg stroke='%23001e59' stroke-width='13'%3E%3Cline x1='-8' y1='92' x2='808' y2='908'/%3E%3Cline x1='-8' y1='692' x2='808' y2='1508'/%3E%3Cline x1='-8' y1='-108' x2='808' y2='708'/%3E%3Cline x1='-8' y1='-708' x2='808' y2='108'/%3E%3C/g%3E%3Cg stroke='%23001d56' stroke-width='12'%3E%3Cline x1='-8' y1='667' x2='808' y2='1483'/%3E%3Cline x1='-8' y1='117' x2='808' y2='933'/%3E%3Cline x1='-8' y1='-133' x2='808' y2='683'/%3E%3Cline x1='-8' y1='-683' x2='808' y2='133'/%3E%3C/g%3E%3Cg stroke='%23001c53' stroke-width='11'%3E%3Cline x1='-8' y1='642' x2='808' y2='1458'/%3E%3Cline x1='-8' y1='142' x2='808' y2='958'/%3E%3Cline x1='-8' y1='-158' x2='808' y2='658'/%3E%3Cline x1='-8' y1='-658' x2='808' y2='158'/%3E%3C/g%3E%3Cg stroke='%23001b4f' stroke-width='10'%3E%3Cline x1='-8' y1='167' x2='808' y2='983'/%3E%3Cline x1='-8' y1='617' x2='808' y2='1433'/%3E%3Cline x1='-8' y1='-633' x2='808' y2='183'/%3E%3Cline x1='-8' y1='-183' x2='808' y2='633'/%3E%3C/g%3E%3Cg stroke='%23001a4c' stroke-width='9'%3E%3Cline x1='-8' y1='592' x2='808' y2='1408'/%3E%3Cline x1='-8' y1='192' x2='808' y2='1008'/%3E%3Cline x1='-8' y1='-608' x2='808' y2='208'/%3E%3Cline x1='-8' y1='-208' x2='808' y2='608'/%3E%3C/g%3E%3Cg stroke='%23001949' stroke-width='8'%3E%3Cline x1='-8' y1='567' x2='808' y2='1383'/%3E%3Cline x1='-8' y1='217' x2='808' y2='1033'/%3E%3Cline x1='-8' y1='-233' x2='808' y2='583'/%3E%3Cline x1='-8' y1='-583' x2='808' y2='233'/%3E%3C/g%3E%3Cg stroke='%23001846' stroke-width='7'%3E%3Cline x1='-8' y1='242' x2='808' y2='1058'/%3E%3Cline x1='-8' y1='542' x2='808' y2='1358'/%3E%3Cline x1='-8' y1='-558' x2='808' y2='258'/%3E%3Cline x1='-8' y1='-258' x2='808' y2='558'/%3E%3C/g%3E%3Cg stroke='%23001743' stroke-width='6'%3E%3Cline x1='-8' y1='267' x2='808' y2='1083'/%3E%3Cline x1='-8' y1='517' x2='808' y2='1333'/%3E%3Cline x1='-8' y1='-533' x2='808' y2='283'/%3E%3Cline x1='-8' y1='-283' x2='808' y2='533'/%3E%3C/g%3E%3Cg stroke='%2300163f' stroke-width='5'%3E%3Cline x1='-8' y1='292' x2='808' y2='1108'/%3E%3Cline x1='-8' y1='492' x2='808' y2='1308'/%3E%3Cline x1='-8' y1='-308' x2='808' y2='508'/%3E%3Cline x1='-8' y1='-508' x2='808' y2='308'/%3E%3C/g%3E%3Cg stroke='%2300153c' stroke-width='4'%3E%3Cline x1='-8' y1='467' x2='808' y2='1283'/%3E%3Cline x1='-8' y1='317' x2='808' y2='1133'/%3E%3Cline x1='-8' y1='-333' x2='808' y2='483'/%3E%3Cline x1='-8' y1='-483' x2='808' y2='333'/%3E%3C/g%3E%3Cg stroke='%23001439' stroke-width='3'%3E%3Cline x1='-8' y1='342' x2='808' y2='1158'/%3E%3Cline x1='-8' y1='442' x2='808' y2='1258'/%3E%3Cline x1='-8' y1='-458' x2='808' y2='358'/%3E%3Cline x1='-8' y1='-358' x2='808' y2='458'/%3E%3C/g%3E%3Cg stroke='%23001336' stroke-width='2'%3E%3Cline x1='-8' y1='367' x2='808' y2='1183'/%3E%3Cline x1='-8' y1='417' x2='808' y2='1233'/%3E%3Cline x1='-8' y1='-433' x2='808' y2='383'/%3E%3Cline x1='-8' y1='-383' x2='808' y2='433'/%3E%3C/g%3E%3Cg stroke='%23013' stroke-width='1'%3E%3Cline x1='-8' y1='392' x2='808' y2='1208'/%3E%3Cline x1='-8' y1='-408' x2='808' y2='408'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-34{background-color:#e52;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2000 1500'%3E%3Cdefs%3E%3CradialGradient id='a' gradientUnits='objectBoundingBox'%3E%3Cstop offset='0' stop-color='%23FB3'/%3E%3Cstop offset='1' stop-color='%23ee5522'/%3E%3C/radialGradient%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='0' y1='750' x2='1550' y2='750'%3E%3Cstop offset='0' stop-color='%23f7882b'/%3E%3Cstop offset='1' stop-color='%23ee5522'/%3E%3C/linearGradient%3E%3Cpath id='s' fill='url(%23b)' d='M1549.2 51.6c-5.4 99.1-20.2 197.6-44.2 293.6c-24.1 96-57.4 189.4-99.3 278.6c-41.9 89.2-92.4 174.1-150.3 253.3c-58 79.2-123.4 152.6-195.1 219c-71.7 66.4-149.6 125.8-232.2 177.2c-82.7 51.4-170.1 94.7-260.7 129.1c-90.6 34.4-184.4 60-279.5 76.3C192.6 1495 96.1 1502 0 1500c96.1-2.1 191.8-13.3 285.4-33.6c93.6-20.2 185-49.5 272.5-87.2c87.6-37.7 171.3-83.8 249.6-137.3c78.4-53.5 151.5-114.5 217.9-181.7c66.5-67.2 126.4-140.7 178.6-218.9c52.3-78.3 96.9-161.4 133-247.9c36.1-86.5 63.8-176.2 82.6-267.6c18.8-91.4 28.6-184.4 29.6-277.4c0.3-27.6 23.2-48.7 50.8-48.4s49.5 21.8 49.2 49.5c0 0.7 0 1.3-0.1 2L1549.2 51.6z'/%3E%3Cg id='g'%3E%3Cuse href='%23s' transform='scale(0.12) rotate(60)'/%3E%3Cuse href='%23s' transform='scale(0.2) rotate(10)'/%3E%3Cuse href='%23s' transform='scale(0.25) rotate(40)'/%3E%3Cuse href='%23s' transform='scale(0.3) rotate(-20)'/%3E%3Cuse href='%23s' transform='scale(0.4) rotate(-30)'/%3E%3Cuse href='%23s' transform='scale(0.5) rotate(20)'/%3E%3Cuse href='%23s' transform='scale(0.6) rotate(60)'/%3E%3Cuse href='%23s' transform='scale(0.7) rotate(10)'/%3E%3Cuse href='%23s' transform='scale(0.835) rotate(-40)'/%3E%3Cuse href='%23s' transform='scale(0.9) rotate(40)'/%3E%3Cuse href='%23s' transform='scale(1.05) rotate(25)'/%3E%3Cuse href='%23s' transform='scale(1.2) rotate(8)'/%3E%3Cuse href='%23s' transform='scale(1.333) rotate(-60)'/%3E%3Cuse href='%23s' transform='scale(1.45) rotate(-30)'/%3E%3Cuse href='%23s' transform='scale(1.6) rotate(10)'/%3E%3C/g%3E%3C/defs%3E%3Cg transform='rotate(0 0 0)'%3E%3Cg transform='rotate(0 0 0)'%3E%3Ccircle fill='url(%23a)' r='3000'/%3E%3Cg opacity='0.5'%3E%3Ccircle fill='url(%23a)' r='2000'/%3E%3Ccircle fill='url(%23a)' r='1800'/%3E%3Ccircle fill='url(%23a)' r='1700'/%3E%3Ccircle fill='url(%23a)' r='1651'/%3E%3Ccircle fill='url(%23a)' r='1450'/%3E%3Ccircle fill='url(%23a)' r='1250'/%3E%3Ccircle fill='url(%23a)' r='1175'/%3E%3Ccircle fill='url(%23a)' r='900'/%3E%3Ccircle fill='url(%23a)' r='750'/%3E%3Ccircle fill='url(%23a)' r='500'/%3E%3Ccircle fill='url(%23a)' r='380'/%3E%3Ccircle fill='url(%23a)' r='250'/%3E%3C/g%3E%3Cg transform='rotate(0 0 0)'%3E%3Cuse href='%23g' transform='rotate(10)'/%3E%3Cuse href='%23g' transform='rotate(120)'/%3E%3Cuse href='%23g' transform='rotate(240)'/%3E%3C/g%3E%3Ccircle fill-opacity='0.1' fill='url(%23a)' r='3000'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-35{background-color:#000;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2000 1500'%3E%3Cdefs%3E%3Ccircle stroke='%23D60' vector-effect='non-scaling-stroke' id='a' fill='none' stroke-width='5' r='315'/%3E%3Cuse id='f' href='%23a' stroke-dasharray='100 100 100 9999'/%3E%3Cuse id='b' href='%23a' stroke-dasharray='250 250 250 250 250 9999'/%3E%3Cuse id='e' href='%23a' stroke-dasharray='1000 500 1000 500 9999'/%3E%3Cuse id='g' href='%23a' stroke-dasharray='1500 9999'/%3E%3Cuse id='h' href='%23a' stroke-dasharray='2000 500 500 9999'/%3E%3Cuse id='j' href='%23a' stroke-dasharray='800 800 800 800 800 9999'/%3E%3Cuse id='k' href='%23a' stroke-dasharray='1200 1200 1200 1200 1200 9999'/%3E%3Cuse id='l' href='%23a' stroke-dasharray='1600 1600 1600 1600 1600 9999'/%3E%3C/defs%3E%3Cg transform='translate(1000 750)' %3E%3Cg transform='rotate(0 0 0)' %3E%3Ccircle fill='%23D60' r='10'/%3E%3Cg transform='rotate(0 0 0)'%3E%3Cuse href='%23f' transform='scale(.1) rotate(50 0 0)' /%3E%3Cuse href='%23f' transform='scale(.2) rotate(100 0 0)' /%3E%3Cuse href='%23f' transform='scale(.3) rotate(150 0 0)' /%3E%3C/g%3E%3Cg transform='rotate(0 0 0)'%3E%3Cuse href='%23b' transform='scale(.4) rotate(200 0 0)' /%3E%3Cuse href='%23z' transform='scale(.5) rotate(250 0 0)' /%3E%3C/g%3E%3Cg id='z' transform='rotate(0 0 0)'%3E%3Cg transform='rotate(0 0 0)'%3E%3Cuse href='%23b'/%3E%3Cuse href='%23b' transform='scale(1.2) rotate(90 0 0)' /%3E%3Cuse href='%23b' transform='scale(1.4) rotate(60 0 0)' /%3E%3Cuse href='%23e' transform='scale(1.6) rotate(120 0 0)' /%3E%3Cuse href='%23e' transform='scale(1.8) rotate(30 0 0)' /%3E%3C/g%3E%3C/g%3E%3Cg id='y' transform='rotate(0 0 0)'%3E%3Cg transform='rotate(0 0 0)'%3E%3Cuse href='%23e' transform='scale(1.1) rotate(20 0 0)' /%3E%3Cuse href='%23g' transform='scale(1.3) rotate(-40 0 0)' /%3E%3Cuse href='%23g' transform='scale(1.5) rotate(60 0 0)' /%3E%3Cuse href='%23h' transform='scale(1.7) rotate(-80 0 0)' /%3E%3Cuse href='%23j' transform='scale(1.9) rotate(100 0 0)' /%3E%3C/g%3E%3C/g%3E%3Cg transform='rotate(0 0 0)'%3E%3Cg transform='rotate(0 0 0)'%3E%3Cg transform='rotate(0 0 0)'%3E%3Cuse href='%23h' transform='scale(2) rotate(60 0 0)'/%3E%3Cuse href='%23j' transform='scale(2.1) rotate(120 0 0)'/%3E%3Cuse href='%23j' transform='scale(2.3) rotate(180 0 0)'/%3E%3Cuse href='%23h' transform='scale(2.4) rotate(240 0 0)'/%3E%3Cuse href='%23j' transform='scale(2.5) rotate(300 0 0)'/%3E%3C/g%3E%3Cuse href='%23y' transform='scale(2) rotate(180 0 0)' /%3E%3Cuse href='%23j' transform='scale(2.7)'/%3E%3Cuse href='%23j' transform='scale(2.8) rotate(45 0 0)'/%3E%3Cuse href='%23j' transform='scale(2.9) rotate(90 0 0)'/%3E%3Cuse href='%23k' transform='scale(3.1) rotate(135 0 0)'/%3E%3Cuse href='%23k' transform='scale(3.2) rotate(180 0 0)'/%3E%3C/g%3E%3Cuse href='%23k' transform='scale(3.3) rotate(225 0 0)'/%3E%3Cuse href='%23k' transform='scale(3.5) rotate(270 0 0)'/%3E%3Cuse href='%23k' transform='scale(3.6) rotate(315 0 0)'/%3E%3Cuse href='%23k' transform='scale(3.7)'/%3E%3Cuse href='%23k' transform='scale(3.9) rotate(75 0 0)'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-36{background-color:#ff9d00;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1600 800'%3E%3Cg stroke='%23000' stroke-width='66.7' stroke-opacity='0.05' %3E%3Ccircle fill='%23ff9d00' cx='0' cy='0' r='1800'/%3E%3Ccircle fill='%23fb8d17' cx='0' cy='0' r='1700'/%3E%3Ccircle fill='%23f47d24' cx='0' cy='0' r='1600'/%3E%3Ccircle fill='%23ed6e2d' cx='0' cy='0' r='1500'/%3E%3Ccircle fill='%23e35f34' cx='0' cy='0' r='1400'/%3E%3Ccircle fill='%23d85239' cx='0' cy='0' r='1300'/%3E%3Ccircle fill='%23cc453e' cx='0' cy='0' r='1200'/%3E%3Ccircle fill='%23be3941' cx='0' cy='0' r='1100'/%3E%3Ccircle fill='%23b02f43' cx='0' cy='0' r='1000'/%3E%3Ccircle fill='%23a02644' cx='0' cy='0' r='900'/%3E%3Ccircle fill='%23901e44' cx='0' cy='0' r='800'/%3E%3Ccircle fill='%23801843' cx='0' cy='0' r='700'/%3E%3Ccircle fill='%236f1341' cx='0' cy='0' r='600'/%3E%3Ccircle fill='%235e0f3d' cx='0' cy='0' r='500'/%3E%3Ccircle fill='%234e0c38' cx='0' cy='0' r='400'/%3E%3Ccircle fill='%233e0933' cx='0' cy='0' r='300'/%3E%3Ccircle fill='%232e062c' cx='0' cy='0' r='200'/%3E%3Ccircle fill='%23210024' cx='0' cy='0' r='100'/%3E%3C/g%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-37{background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 100 100'%3E%3Cg stroke='%23CCC' stroke-width='0' %3E%3Crect fill='%23F5F5F5' x='-60' y='-60' width='110' height='240'/%3E%3C/g%3E%3C/svg%3E")}.trainer-card.trainer-bg-38{background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2000 1500'%3E%3Cdefs%3E%3Crect stroke='%23ffffff' stroke-width='.5' width='1' height='1' id='s'/%3E%3Cpattern id='a' width='3' height='3' patternUnits='userSpaceOnUse' patternTransform='scale(50) translate(-980 -735)'%3E%3Cuse fill='%23fafafa' href='%23s' y='2'/%3E%3Cuse fill='%23fafafa' href='%23s' x='1' y='2'/%3E%3Cuse fill='%23f5f5f5' href='%23s' x='2' y='2'/%3E%3Cuse fill='%23f5f5f5' href='%23s'/%3E%3Cuse fill='%23f0f0f0' href='%23s' x='2'/%3E%3Cuse fill='%23f0f0f0' href='%23s' x='1' y='1'/%3E%3C/pattern%3E%3Cpattern id='b' width='7' height='11' patternUnits='userSpaceOnUse' patternTransform='scale(50) translate(-980 -735)'%3E%3Cg fill='%23ebebeb'%3E%3Cuse href='%23s'/%3E%3Cuse href='%23s' y='5' /%3E%3Cuse href='%23s' x='1' y='10'/%3E%3Cuse href='%23s' x='2' y='1'/%3E%3Cuse href='%23s' x='2' y='4'/%3E%3Cuse href='%23s' x='3' y='8'/%3E%3Cuse href='%23s' x='4' y='3'/%3E%3Cuse href='%23s' x='4' y='7'/%3E%3Cuse href='%23s' x='5' y='2'/%3E%3Cuse href='%23s' x='5' y='6'/%3E%3Cuse href='%23s' x='6' y='9'/%3E%3C/g%3E%3C/pattern%3E%3Cpattern id='h' width='5' height='13' patternUnits='userSpaceOnUse' patternTransform='scale(50) translate(-980 -735)'%3E%3Cg fill='%23ebebeb'%3E%3Cuse href='%23s' y='5'/%3E%3Cuse href='%23s' y='8'/%3E%3Cuse href='%23s' x='1' y='1'/%3E%3Cuse href='%23s' x='1' y='9'/%3E%3Cuse href='%23s' x='1' y='12'/%3E%3Cuse href='%23s' x='2'/%3E%3Cuse href='%23s' x='2' y='4'/%3E%3Cuse href='%23s' x='3' y='2'/%3E%3Cuse href='%23s' x='3' y='6'/%3E%3Cuse href='%23s' x='3' y='11'/%3E%3Cuse href='%23s' x='4' y='3'/%3E%3Cuse href='%23s' x='4' y='7'/%3E%3Cuse href='%23s' x='4' y='10'/%3E%3C/g%3E%3C/pattern%3E%3Cpattern id='c' width='17' height='13' patternUnits='userSpaceOnUse' patternTransform='scale(50) translate(-980 -735)'%3E%3Cg fill='%23e5e5e5'%3E%3Cuse href='%23s' y='11'/%3E%3Cuse href='%23s' x='2' y='9'/%3E%3Cuse href='%23s' x='5' y='12'/%3E%3Cuse href='%23s' x='9' y='4'/%3E%3Cuse href='%23s' x='12' y='1'/%3E%3Cuse href='%23s' x='16' y='6'/%3E%3C/g%3E%3C/pattern%3E%3Cpattern id='d' width='19' height='17' patternUnits='userSpaceOnUse' patternTransform='scale(50) translate(-980 -735)'%3E%3Cg fill='%23ffffff'%3E%3Cuse href='%23s' y='9'/%3E%3Cuse href='%23s' x='16' y='5'/%3E%3Cuse href='%23s' x='14' y='2'/%3E%3Cuse href='%23s' x='11' y='11'/%3E%3Cuse href='%23s' x='6' y='14'/%3E%3C/g%3E%3Cg fill='%23e0e0e0'%3E%3Cuse href='%23s' x='3' y='13'/%3E%3Cuse href='%23s' x='9' y='7'/%3E%3Cuse href='%23s' x='13' y='10'/%3E%3Cuse href='%23s' x='15' y='4'/%3E%3Cuse href='%23s' x='18' y='1'/%3E%3C/g%3E%3C/pattern%3E%3Cpattern id='e' width='47' height='53' patternUnits='userSpaceOnUse' patternTransform='scale(50) translate(-980 -735)'%3E%3Cg fill='%23F60'%3E%3Cuse href='%23s' x='2' y='5'/%3E%3Cuse href='%23s' x='16' y='38'/%3E%3Cuse href='%23s' x='46' y='42'/%3E%3Cuse href='%23s' x='29' y='20'/%3E%3C/g%3E%3C/pattern%3E%3Cpattern id='f' width='59' height='71' patternUnits='userSpaceOnUse' patternTransform='scale(50) translate(-980 -735)'%3E%3Cg fill='%23F60'%3E%3Cuse href='%23s' x='33' y='13'/%3E%3Cuse href='%23s' x='27' y='54'/%3E%3Cuse href='%23s' x='55' y='55'/%3E%3C/g%3E%3C/pattern%3E%3Cpattern id='g' width='139' height='97' patternUnits='userSpaceOnUse' patternTransform='scale(50) translate(-980 -735)'%3E%3Cg fill='%23F60'%3E%3Cuse href='%23s' x='11' y='8'/%3E%3Cuse href='%23s' x='51' y='13'/%3E%3Cuse href='%23s' x='17' y='73'/%3E%3Cuse href='%23s' x='99' y='57'/%3E%3C/g%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23a)' width='100%25' height='100%25'/%3E%3Crect fill='url(%23b)' width='100%25' height='100%25'/%3E%3Crect fill='url(%23h)' width='100%25' height='100%25'/%3E%3Crect fill='url(%23c)' width='100%25' height='100%25'/%3E%3Crect fill='url(%23d)' width='100%25' height='100%25'/%3E%3Crect fill='url(%23e)' width='100%25' height='100%25'/%3E%3Crect fill='url(%23f)' width='100%25' height='100%25'/%3E%3Crect fill='url(%23g)' width='100%25' height='100%25'/%3E%3C/svg%3E");background-size:cover}.trainer-card.trainer-bg-39{background-color:#f70;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 900'%3E%3Cpolygon fill='%23cc0000' points='957 450 539 900 1396 900'/%3E%3Cpolygon fill='%23aa0000' points='957 450 872.9 900 1396 900'/%3E%3Cpolygon fill='%23d6002b' points='-60 900 398 662 816 900'/%3E%3Cpolygon fill='%23b10022' points='337 900 398 662 816 900'/%3E%3Cpolygon fill='%23d9004b' points='1203 546 1552 900 876 900'/%3E%3Cpolygon fill='%23b2003d' points='1203 546 1552 900 1162 900'/%3E%3Cpolygon fill='%23d3006c' points='641 695 886 900 367 900'/%3E%3Cpolygon fill='%23ac0057' points='587 900 641 695 886 900'/%3E%3Cpolygon fill='%23c4008c' points='1710 900 1401 632 1096 900'/%3E%3Cpolygon fill='%239e0071' points='1710 900 1401 632 1365 900'/%3E%3Cpolygon fill='%23aa00aa' points='1210 900 971 687 725 900'/%3E%3Cpolygon fill='%23880088' points='943 900 1210 900 971 687'/%3E%3C/svg%3E");background-size:cover}#profile-trainer-card .trainer-card-container{max-width:100%;width:100%;padding:0}#mineModal ul.nav{width:100%}#mineModal .progress{height:25px;width:100%;font-size:18px}.mineInventoryItem{width:28px}.rock5{background-image:url(../assets/images/underground/rock5.png)}.rock4{background-image:url(../assets/images/underground/rock4.png)}.rock3{background-image:url(../assets/images/underground/rock3.png)}.rock2{background-image:url(../assets/images/underground/rock2.png)}.rock1{background-image:url(../assets/images/underground/rock1.png)}.rock0{background-image:url(../assets/images/underground/rock0.png)}.mineReward{overflow:hidden;position:absolute;top:0;left:0;width:100%;padding-top:100%!important}.mineReward.rotations-0{-webkit-transform:rotate(0);transform:rotate(0)}.mineReward.rotations-1{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.mineReward.rotations-2{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.mineReward.rotations-3{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.mineReward.size-1-1.pos-0-0{background-position:0 0;background-size:100% 100%}.mineReward.size-1-2.pos-0-0{background-position:0 0;background-size:100% 200%}.mineReward.size-1-2.pos-0-1{background-position:0 100%;background-size:100% 200%}.mineReward.size-1-3.pos-0-0{background-position:0 0;background-size:100% 300%}.mineReward.size-1-3.pos-0-1{background-position:0 50%;background-size:100% 300%}.mineReward.size-1-3.pos-0-2{background-position:0 100%;background-size:100% 300%}.mineReward.size-1-4.pos-0-0{background-position:0 0;background-size:100% 400%}.mineReward.size-1-4.pos-0-1{background-position:0 33.3333%;background-size:100% 400%}.mineReward.size-1-4.pos-0-2{background-position:0 66.6666%;background-size:100% 400%}.mineReward.size-1-4.pos-0-3{background-position:0 100%;background-size:100% 400%}.mineReward.size-1-5.pos-0-0{background-position:0 0;background-size:100% 500%}.mineReward.size-1-5.pos-0-1{background-position:0 25%;background-size:100% 500%}.mineReward.size-1-5.pos-0-2{background-position:0 50%;background-size:100% 500%}.mineReward.size-1-5.pos-0-3{background-position:0 75%;background-size:100% 500%}.mineReward.size-1-5.pos-0-4{background-position:0 100%;background-size:100% 500%}.mineReward.size-1-6.pos-0-0{background-position:0 0;background-size:100% 600%}.mineReward.size-1-6.pos-0-1{background-position:0 20%;background-size:100% 600%}.mineReward.size-1-6.pos-0-2{background-position:0 40%;background-size:100% 600%}.mineReward.size-1-6.pos-0-3{background-position:0 60%;background-size:100% 600%}.mineReward.size-1-6.pos-0-4{background-position:0 80%;background-size:100% 600%}.mineReward.size-1-6.pos-0-5{background-position:0 100%;background-size:100% 600%}.mineReward.size-2-1.pos-0-0{background-position:0 0;background-size:200% 100%}.mineReward.size-2-1.pos-1-0{background-position:100% 0;background-size:200% 100%}.mineReward.size-2-2.pos-0-0{background-position:0 0;background-size:200% 200%}.mineReward.size-2-2.pos-0-1{background-position:0 100%;background-size:200% 200%}.mineReward.size-2-2.pos-1-0{background-position:100% 0;background-size:200% 200%}.mineReward.size-2-2.pos-1-1{background-position:100% 100%;background-size:200% 200%}.mineReward.size-2-3.pos-0-0{background-position:0 0;background-size:200% 300%}.mineReward.size-2-3.pos-0-1{background-position:0 50%;background-size:200% 300%}.mineReward.size-2-3.pos-0-2{background-position:0 100%;background-size:200% 300%}.mineReward.size-2-3.pos-1-0{background-position:100% 0;background-size:200% 300%}.mineReward.size-2-3.pos-1-1{background-position:100% 50%;background-size:200% 300%}.mineReward.size-2-3.pos-1-2{background-position:100% 100%;background-size:200% 300%}.mineReward.size-2-4.pos-0-0{background-position:0 0;background-size:200% 400%}.mineReward.size-2-4.pos-0-1{background-position:0 33.3333%;background-size:200% 400%}.mineReward.size-2-4.pos-0-2{background-position:0 66.6666%;background-size:200% 400%}.mineReward.size-2-4.pos-0-3{background-position:0 100%;background-size:200% 400%}.mineReward.size-2-4.pos-1-0{background-position:100% 0;background-size:200% 400%}.mineReward.size-2-4.pos-1-1{background-position:100% 33.3333%;background-size:200% 400%}.mineReward.size-2-4.pos-1-2{background-position:100% 66.6666%;background-size:200% 400%}.mineReward.size-2-4.pos-1-3{background-position:100% 100%;background-size:200% 400%}.mineReward.size-2-5.pos-0-0{background-position:0 0;background-size:200% 500%}.mineReward.size-2-5.pos-0-1{background-position:0 25%;background-size:200% 500%}.mineReward.size-2-5.pos-0-2{background-position:0 50%;background-size:200% 500%}.mineReward.size-2-5.pos-0-3{background-position:0 75%;background-size:200% 500%}.mineReward.size-2-5.pos-0-4{background-position:0 100%;background-size:200% 500%}.mineReward.size-2-5.pos-1-0{background-position:100% 0;background-size:200% 500%}.mineReward.size-2-5.pos-1-1{background-position:100% 25%;background-size:200% 500%}.mineReward.size-2-5.pos-1-2{background-position:100% 50%;background-size:200% 500%}.mineReward.size-2-5.pos-1-3{background-position:100% 75%;background-size:200% 500%}.mineReward.size-2-5.pos-1-4{background-position:100% 100%;background-size:200% 500%}.mineReward.size-2-6.pos-0-0{background-position:0 0;background-size:200% 600%}.mineReward.size-2-6.pos-0-1{background-position:0 20%;background-size:200% 600%}.mineReward.size-2-6.pos-0-2{background-position:0 40%;background-size:200% 600%}.mineReward.size-2-6.pos-0-3{background-position:0 60%;background-size:200% 600%}.mineReward.size-2-6.pos-0-4{background-position:0 80%;background-size:200% 600%}.mineReward.size-2-6.pos-0-5{background-position:0 100%;background-size:200% 600%}.mineReward.size-2-6.pos-1-0{background-position:100% 0;background-size:200% 600%}.mineReward.size-2-6.pos-1-1{background-position:100% 20%;background-size:200% 600%}.mineReward.size-2-6.pos-1-2{background-position:100% 40%;background-size:200% 600%}.mineReward.size-2-6.pos-1-3{background-position:100% 60%;background-size:200% 600%}.mineReward.size-2-6.pos-1-4{background-position:100% 80%;background-size:200% 600%}.mineReward.size-2-6.pos-1-5{background-position:100% 100%;background-size:200% 600%}.mineReward.size-3-1.pos-0-0{background-position:0 0;background-size:300% 100%}.mineReward.size-3-1.pos-1-0{background-position:50% 0;background-size:300% 100%}.mineReward.size-3-1.pos-2-0{background-position:100% 0;background-size:300% 100%}.mineReward.size-3-2.pos-0-0{background-position:0 0;background-size:300% 200%}.mineReward.size-3-2.pos-0-1{background-position:0 100%;background-size:300% 200%}.mineReward.size-3-2.pos-1-0{background-position:50% 0;background-size:300% 200%}.mineReward.size-3-2.pos-1-1{background-position:50% 100%;background-size:300% 200%}.mineReward.size-3-2.pos-2-0{background-position:100% 0;background-size:300% 200%}.mineReward.size-3-2.pos-2-1{background-position:100% 100%;background-size:300% 200%}.mineReward.size-3-3.pos-0-0{background-position:0 0;background-size:300% 300%}.mineReward.size-3-3.pos-0-1{background-position:0 50%;background-size:300% 300%}.mineReward.size-3-3.pos-0-2{background-position:0 100%;background-size:300% 300%}.mineReward.size-3-3.pos-1-0{background-position:50% 0;background-size:300% 300%}.mineReward.size-3-3.pos-1-1{background-position:50% 50%;background-size:300% 300%}.mineReward.size-3-3.pos-1-2{background-position:50% 100%;background-size:300% 300%}.mineReward.size-3-3.pos-2-0{background-position:100% 0;background-size:300% 300%}.mineReward.size-3-3.pos-2-1{background-position:100% 50%;background-size:300% 300%}.mineReward.size-3-3.pos-2-2{background-position:100% 100%;background-size:300% 300%}.mineReward.size-3-4.pos-0-0{background-position:0 0;background-size:300% 400%}.mineReward.size-3-4.pos-0-1{background-position:0 33.3333%;background-size:300% 400%}.mineReward.size-3-4.pos-0-2{background-position:0 66.6666%;background-size:300% 400%}.mineReward.size-3-4.pos-0-3{background-position:0 100%;background-size:300% 400%}.mineReward.size-3-4.pos-1-0{background-position:50% 0;background-size:300% 400%}.mineReward.size-3-4.pos-1-1{background-position:50% 33.3333%;background-size:300% 400%}.mineReward.size-3-4.pos-1-2{background-position:50% 66.6666%;background-size:300% 400%}.mineReward.size-3-4.pos-1-3{background-position:50% 100%;background-size:300% 400%}.mineReward.size-3-4.pos-2-0{background-position:100% 0;background-size:300% 400%}.mineReward.size-3-4.pos-2-1{background-position:100% 33.3333%;background-size:300% 400%}.mineReward.size-3-4.pos-2-2{background-position:100% 66.6666%;background-size:300% 400%}.mineReward.size-3-4.pos-2-3{background-position:100% 100%;background-size:300% 400%}.mineReward.size-3-5.pos-0-0{background-position:0 0;background-size:300% 500%}.mineReward.size-3-5.pos-0-1{background-position:0 25%;background-size:300% 500%}.mineReward.size-3-5.pos-0-2{background-position:0 50%;background-size:300% 500%}.mineReward.size-3-5.pos-0-3{background-position:0 75%;background-size:300% 500%}.mineReward.size-3-5.pos-0-4{background-position:0 100%;background-size:300% 500%}.mineReward.size-3-5.pos-1-0{background-position:50% 0;background-size:300% 500%}.mineReward.size-3-5.pos-1-1{background-position:50% 25%;background-size:300% 500%}.mineReward.size-3-5.pos-1-2{background-position:50% 50%;background-size:300% 500%}.mineReward.size-3-5.pos-1-3{background-position:50% 75%;background-size:300% 500%}.mineReward.size-3-5.pos-1-4{background-position:50% 100%;background-size:300% 500%}.mineReward.size-3-5.pos-2-0{background-position:100% 0;background-size:300% 500%}.mineReward.size-3-5.pos-2-1{background-position:100% 25%;background-size:300% 500%}.mineReward.size-3-5.pos-2-2{background-position:100% 50%;background-size:300% 500%}.mineReward.size-3-5.pos-2-3{background-position:100% 75%;background-size:300% 500%}.mineReward.size-3-5.pos-2-4{background-position:100% 100%;background-size:300% 500%}.mineReward.size-3-6.pos-0-0{background-position:0 0;background-size:300% 600%}.mineReward.size-3-6.pos-0-1{background-position:0 20%;background-size:300% 600%}.mineReward.size-3-6.pos-0-2{background-position:0 40%;background-size:300% 600%}.mineReward.size-3-6.pos-0-3{background-position:0 60%;background-size:300% 600%}.mineReward.size-3-6.pos-0-4{background-position:0 80%;background-size:300% 600%}.mineReward.size-3-6.pos-0-5{background-position:0 100%;background-size:300% 600%}.mineReward.size-3-6.pos-1-0{background-position:50% 0;background-size:300% 600%}.mineReward.size-3-6.pos-1-1{background-position:50% 20%;background-size:300% 600%}.mineReward.size-3-6.pos-1-2{background-position:50% 40%;background-size:300% 600%}.mineReward.size-3-6.pos-1-3{background-position:50% 60%;background-size:300% 600%}.mineReward.size-3-6.pos-1-4{background-position:50% 80%;background-size:300% 600%}.mineReward.size-3-6.pos-1-5{background-position:50% 100%;background-size:300% 600%}.mineReward.size-3-6.pos-2-0{background-position:100% 0;background-size:300% 600%}.mineReward.size-3-6.pos-2-1{background-position:100% 20%;background-size:300% 600%}.mineReward.size-3-6.pos-2-2{background-position:100% 40%;background-size:300% 600%}.mineReward.size-3-6.pos-2-3{background-position:100% 60%;background-size:300% 600%}.mineReward.size-3-6.pos-2-4{background-position:100% 80%;background-size:300% 600%}.mineReward.size-3-6.pos-2-5{background-position:100% 100%;background-size:300% 600%}.mineReward.size-4-1.pos-0-0{background-position:0 0;background-size:400% 100%}.mineReward.size-4-1.pos-1-0{background-position:33.3333% 0;background-size:400% 100%}.mineReward.size-4-1.pos-2-0{background-position:66.6666% 0;background-size:400% 100%}.mineReward.size-4-1.pos-3-0{background-position:100% 0;background-size:400% 100%}.mineReward.size-4-2.pos-0-0{background-position:0 0;background-size:400% 200%}.mineReward.size-4-2.pos-0-1{background-position:0 100%;background-size:400% 200%}.mineReward.size-4-2.pos-1-0{background-position:33.3333% 0;background-size:400% 200%}.mineReward.size-4-2.pos-1-1{background-position:33.3333% 100%;background-size:400% 200%}.mineReward.size-4-2.pos-2-0{background-position:66.6666% 0;background-size:400% 200%}.mineReward.size-4-2.pos-2-1{background-position:66.6666% 100%;background-size:400% 200%}.mineReward.size-4-2.pos-3-0{background-position:100% 0;background-size:400% 200%}.mineReward.size-4-2.pos-3-1{background-position:100% 100%;background-size:400% 200%}.mineReward.size-4-3.pos-0-0{background-position:0 0;background-size:400% 300%}.mineReward.size-4-3.pos-0-1{background-position:0 50%;background-size:400% 300%}.mineReward.size-4-3.pos-0-2{background-position:0 100%;background-size:400% 300%}.mineReward.size-4-3.pos-1-0{background-position:33.3333% 0;background-size:400% 300%}.mineReward.size-4-3.pos-1-1{background-position:33.3333% 50%;background-size:400% 300%}.mineReward.size-4-3.pos-1-2{background-position:33.3333% 100%;background-size:400% 300%}.mineReward.size-4-3.pos-2-0{background-position:66.6666% 0;background-size:400% 300%}.mineReward.size-4-3.pos-2-1{background-position:66.6666% 50%;background-size:400% 300%}.mineReward.size-4-3.pos-2-2{background-position:66.6666% 100%;background-size:400% 300%}.mineReward.size-4-3.pos-3-0{background-position:100% 0;background-size:400% 300%}.mineReward.size-4-3.pos-3-1{background-position:100% 50%;background-size:400% 300%}.mineReward.size-4-3.pos-3-2{background-position:100% 100%;background-size:400% 300%}.mineReward.size-4-4.pos-0-0{background-position:0 0;background-size:400% 400%}.mineReward.size-4-4.pos-0-1{background-position:0 33.3333%;background-size:400% 400%}.mineReward.size-4-4.pos-0-2{background-position:0 66.6666%;background-size:400% 400%}.mineReward.size-4-4.pos-0-3{background-position:0 100%;background-size:400% 400%}.mineReward.size-4-4.pos-1-0{background-position:33.3333% 0;background-size:400% 400%}.mineReward.size-4-4.pos-1-1{background-position:33.3333% 33.3333%;background-size:400% 400%}.mineReward.size-4-4.pos-1-2{background-position:33.3333% 66.6666%;background-size:400% 400%}.mineReward.size-4-4.pos-1-3{background-position:33.3333% 100%;background-size:400% 400%}.mineReward.size-4-4.pos-2-0{background-position:66.6666% 0;background-size:400% 400%}.mineReward.size-4-4.pos-2-1{background-position:66.6666% 33.3333%;background-size:400% 400%}.mineReward.size-4-4.pos-2-2{background-position:66.6666% 66.6666%;background-size:400% 400%}.mineReward.size-4-4.pos-2-3{background-position:66.6666% 100%;background-size:400% 400%}.mineReward.size-4-4.pos-3-0{background-position:100% 0;background-size:400% 400%}.mineReward.size-4-4.pos-3-1{background-position:100% 33.3333%;background-size:400% 400%}.mineReward.size-4-4.pos-3-2{background-position:100% 66.6666%;background-size:400% 400%}.mineReward.size-4-4.pos-3-3{background-position:100% 100%;background-size:400% 400%}.mineReward.size-4-5.pos-0-0{background-position:0 0;background-size:400% 500%}.mineReward.size-4-5.pos-0-1{background-position:0 25%;background-size:400% 500%}.mineReward.size-4-5.pos-0-2{background-position:0 50%;background-size:400% 500%}.mineReward.size-4-5.pos-0-3{background-position:0 75%;background-size:400% 500%}.mineReward.size-4-5.pos-0-4{background-position:0 100%;background-size:400% 500%}.mineReward.size-4-5.pos-1-0{background-position:33.3333% 0;background-size:400% 500%}.mineReward.size-4-5.pos-1-1{background-position:33.3333% 25%;background-size:400% 500%}.mineReward.size-4-5.pos-1-2{background-position:33.3333% 50%;background-size:400% 500%}.mineReward.size-4-5.pos-1-3{background-position:33.3333% 75%;background-size:400% 500%}.mineReward.size-4-5.pos-1-4{background-position:33.3333% 100%;background-size:400% 500%}.mineReward.size-4-5.pos-2-0{background-position:66.6666% 0;background-size:400% 500%}.mineReward.size-4-5.pos-2-1{background-position:66.6666% 25%;background-size:400% 500%}.mineReward.size-4-5.pos-2-2{background-position:66.6666% 50%;background-size:400% 500%}.mineReward.size-4-5.pos-2-3{background-position:66.6666% 75%;background-size:400% 500%}.mineReward.size-4-5.pos-2-4{background-position:66.6666% 100%;background-size:400% 500%}.mineReward.size-4-5.pos-3-0{background-position:100% 0;background-size:400% 500%}.mineReward.size-4-5.pos-3-1{background-position:100% 25%;background-size:400% 500%}.mineReward.size-4-5.pos-3-2{background-position:100% 50%;background-size:400% 500%}.mineReward.size-4-5.pos-3-3{background-position:100% 75%;background-size:400% 500%}.mineReward.size-4-5.pos-3-4{background-position:100% 100%;background-size:400% 500%}.mineReward.size-4-6.pos-0-0{background-position:0 0;background-size:400% 600%}.mineReward.size-4-6.pos-0-1{background-position:0 20%;background-size:400% 600%}.mineReward.size-4-6.pos-0-2{background-position:0 40%;background-size:400% 600%}.mineReward.size-4-6.pos-0-3{background-position:0 60%;background-size:400% 600%}.mineReward.size-4-6.pos-0-4{background-position:0 80%;background-size:400% 600%}.mineReward.size-4-6.pos-0-5{background-position:0 100%;background-size:400% 600%}.mineReward.size-4-6.pos-1-0{background-position:33.3333% 0;background-size:400% 600%}.mineReward.size-4-6.pos-1-1{background-position:33.3333% 20%;background-size:400% 600%}.mineReward.size-4-6.pos-1-2{background-position:33.3333% 40%;background-size:400% 600%}.mineReward.size-4-6.pos-1-3{background-position:33.3333% 60%;background-size:400% 600%}.mineReward.size-4-6.pos-1-4{background-position:33.3333% 80%;background-size:400% 600%}.mineReward.size-4-6.pos-1-5{background-position:33.3333% 100%;background-size:400% 600%}.mineReward.size-4-6.pos-2-0{background-position:66.6666% 0;background-size:400% 600%}.mineReward.size-4-6.pos-2-1{background-position:66.6666% 20%;background-size:400% 600%}.mineReward.size-4-6.pos-2-2{background-position:66.6666% 40%;background-size:400% 600%}.mineReward.size-4-6.pos-2-3{background-position:66.6666% 60%;background-size:400% 600%}.mineReward.size-4-6.pos-2-4{background-position:66.6666% 80%;background-size:400% 600%}.mineReward.size-4-6.pos-2-5{background-position:66.6666% 100%;background-size:400% 600%}.mineReward.size-4-6.pos-3-0{background-position:100% 0;background-size:400% 600%}.mineReward.size-4-6.pos-3-1{background-position:100% 20%;background-size:400% 600%}.mineReward.size-4-6.pos-3-2{background-position:100% 40%;background-size:400% 600%}.mineReward.size-4-6.pos-3-3{background-position:100% 60%;background-size:400% 600%}.mineReward.size-4-6.pos-3-4{background-position:100% 80%;background-size:400% 600%}.mineReward.size-4-6.pos-3-5{background-position:100% 100%;background-size:400% 600%}.mineReward.size-5-1.pos-0-0{background-position:0 0;background-size:500% 100%}.mineReward.size-5-1.pos-1-0{background-position:25% 0;background-size:500% 100%}.mineReward.size-5-1.pos-2-0{background-position:50% 0;background-size:500% 100%}.mineReward.size-5-1.pos-3-0{background-position:75% 0;background-size:500% 100%}.mineReward.size-5-1.pos-4-0{background-position:100% 0;background-size:500% 100%}.mineReward.size-5-2.pos-0-0{background-position:0 0;background-size:500% 200%}.mineReward.size-5-2.pos-0-1{background-position:0 100%;background-size:500% 200%}.mineReward.size-5-2.pos-1-0{background-position:25% 0;background-size:500% 200%}.mineReward.size-5-2.pos-1-1{background-position:25% 100%;background-size:500% 200%}.mineReward.size-5-2.pos-2-0{background-position:50% 0;background-size:500% 200%}.mineReward.size-5-2.pos-2-1{background-position:50% 100%;background-size:500% 200%}.mineReward.size-5-2.pos-3-0{background-position:75% 0;background-size:500% 200%}.mineReward.size-5-2.pos-3-1{background-position:75% 100%;background-size:500% 200%}.mineReward.size-5-2.pos-4-0{background-position:100% 0;background-size:500% 200%}.mineReward.size-5-2.pos-4-1{background-position:100% 100%;background-size:500% 200%}.mineReward.size-5-3.pos-0-0{background-position:0 0;background-size:500% 300%}.mineReward.size-5-3.pos-0-1{background-position:0 50%;background-size:500% 300%}.mineReward.size-5-3.pos-0-2{background-position:0 100%;background-size:500% 300%}.mineReward.size-5-3.pos-1-0{background-position:25% 0;background-size:500% 300%}.mineReward.size-5-3.pos-1-1{background-position:25% 50%;background-size:500% 300%}.mineReward.size-5-3.pos-1-2{background-position:25% 100%;background-size:500% 300%}.mineReward.size-5-3.pos-2-0{background-position:50% 0;background-size:500% 300%}.mineReward.size-5-3.pos-2-1{background-position:50% 50%;background-size:500% 300%}.mineReward.size-5-3.pos-2-2{background-position:50% 100%;background-size:500% 300%}.mineReward.size-5-3.pos-3-0{background-position:75% 0;background-size:500% 300%}.mineReward.size-5-3.pos-3-1{background-position:75% 50%;background-size:500% 300%}.mineReward.size-5-3.pos-3-2{background-position:75% 100%;background-size:500% 300%}.mineReward.size-5-3.pos-4-0{background-position:100% 0;background-size:500% 300%}.mineReward.size-5-3.pos-4-1{background-position:100% 50%;background-size:500% 300%}.mineReward.size-5-3.pos-4-2{background-position:100% 100%;background-size:500% 300%}.mineReward.size-5-4.pos-0-0{background-position:0 0;background-size:500% 400%}.mineReward.size-5-4.pos-0-1{background-position:0 33.3333%;background-size:500% 400%}.mineReward.size-5-4.pos-0-2{background-position:0 66.6666%;background-size:500% 400%}.mineReward.size-5-4.pos-0-3{background-position:0 100%;background-size:500% 400%}.mineReward.size-5-4.pos-1-0{background-position:25% 0;background-size:500% 400%}.mineReward.size-5-4.pos-1-1{background-position:25% 33.3333%;background-size:500% 400%}.mineReward.size-5-4.pos-1-2{background-position:25% 66.6666%;background-size:500% 400%}.mineReward.size-5-4.pos-1-3{background-position:25% 100%;background-size:500% 400%}.mineReward.size-5-4.pos-2-0{background-position:50% 0;background-size:500% 400%}.mineReward.size-5-4.pos-2-1{background-position:50% 33.3333%;background-size:500% 400%}.mineReward.size-5-4.pos-2-2{background-position:50% 66.6666%;background-size:500% 400%}.mineReward.size-5-4.pos-2-3{background-position:50% 100%;background-size:500% 400%}.mineReward.size-5-4.pos-3-0{background-position:75% 0;background-size:500% 400%}.mineReward.size-5-4.pos-3-1{background-position:75% 33.3333%;background-size:500% 400%}.mineReward.size-5-4.pos-3-2{background-position:75% 66.6666%;background-size:500% 400%}.mineReward.size-5-4.pos-3-3{background-position:75% 100%;background-size:500% 400%}.mineReward.size-5-4.pos-4-0{background-position:100% 0;background-size:500% 400%}.mineReward.size-5-4.pos-4-1{background-position:100% 33.3333%;background-size:500% 400%}.mineReward.size-5-4.pos-4-2{background-position:100% 66.6666%;background-size:500% 400%}.mineReward.size-5-4.pos-4-3{background-position:100% 100%;background-size:500% 400%}.mineReward.size-5-5.pos-0-0{background-position:0 0;background-size:500% 500%}.mineReward.size-5-5.pos-0-1{background-position:0 25%;background-size:500% 500%}.mineReward.size-5-5.pos-0-2{background-position:0 50%;background-size:500% 500%}.mineReward.size-5-5.pos-0-3{background-position:0 75%;background-size:500% 500%}.mineReward.size-5-5.pos-0-4{background-position:0 100%;background-size:500% 500%}.mineReward.size-5-5.pos-1-0{background-position:25% 0;background-size:500% 500%}.mineReward.size-5-5.pos-1-1{background-position:25% 25%;background-size:500% 500%}.mineReward.size-5-5.pos-1-2{background-position:25% 50%;background-size:500% 500%}.mineReward.size-5-5.pos-1-3{background-position:25% 75%;background-size:500% 500%}.mineReward.size-5-5.pos-1-4{background-position:25% 100%;background-size:500% 500%}.mineReward.size-5-5.pos-2-0{background-position:50% 0;background-size:500% 500%}.mineReward.size-5-5.pos-2-1{background-position:50% 25%;background-size:500% 500%}.mineReward.size-5-5.pos-2-2{background-position:50% 50%;background-size:500% 500%}.mineReward.size-5-5.pos-2-3{background-position:50% 75%;background-size:500% 500%}.mineReward.size-5-5.pos-2-4{background-position:50% 100%;background-size:500% 500%}.mineReward.size-5-5.pos-3-0{background-position:75% 0;background-size:500% 500%}.mineReward.size-5-5.pos-3-1{background-position:75% 25%;background-size:500% 500%}.mineReward.size-5-5.pos-3-2{background-position:75% 50%;background-size:500% 500%}.mineReward.size-5-5.pos-3-3{background-position:75% 75%;background-size:500% 500%}.mineReward.size-5-5.pos-3-4{background-position:75% 100%;background-size:500% 500%}.mineReward.size-5-5.pos-4-0{background-position:100% 0;background-size:500% 500%}.mineReward.size-5-5.pos-4-1{background-position:100% 25%;background-size:500% 500%}.mineReward.size-5-5.pos-4-2{background-position:100% 50%;background-size:500% 500%}.mineReward.size-5-5.pos-4-3{background-position:100% 75%;background-size:500% 500%}.mineReward.size-5-5.pos-4-4{background-position:100% 100%;background-size:500% 500%}.mineReward.size-5-6.pos-0-0{background-position:0 0;background-size:500% 600%}.mineReward.size-5-6.pos-0-1{background-position:0 20%;background-size:500% 600%}.mineReward.size-5-6.pos-0-2{background-position:0 40%;background-size:500% 600%}.mineReward.size-5-6.pos-0-3{background-position:0 60%;background-size:500% 600%}.mineReward.size-5-6.pos-0-4{background-position:0 80%;background-size:500% 600%}.mineReward.size-5-6.pos-0-5{background-position:0 100%;background-size:500% 600%}.mineReward.size-5-6.pos-1-0{background-position:25% 0;background-size:500% 600%}.mineReward.size-5-6.pos-1-1{background-position:25% 20%;background-size:500% 600%}.mineReward.size-5-6.pos-1-2{background-position:25% 40%;background-size:500% 600%}.mineReward.size-5-6.pos-1-3{background-position:25% 60%;background-size:500% 600%}.mineReward.size-5-6.pos-1-4{background-position:25% 80%;background-size:500% 600%}.mineReward.size-5-6.pos-1-5{background-position:25% 100%;background-size:500% 600%}.mineReward.size-5-6.pos-2-0{background-position:50% 0;background-size:500% 600%}.mineReward.size-5-6.pos-2-1{background-position:50% 20%;background-size:500% 600%}.mineReward.size-5-6.pos-2-2{background-position:50% 40%;background-size:500% 600%}.mineReward.size-5-6.pos-2-3{background-position:50% 60%;background-size:500% 600%}.mineReward.size-5-6.pos-2-4{background-position:50% 80%;background-size:500% 600%}.mineReward.size-5-6.pos-2-5{background-position:50% 100%;background-size:500% 600%}.mineReward.size-5-6.pos-3-0{background-position:75% 0;background-size:500% 600%}.mineReward.size-5-6.pos-3-1{background-position:75% 20%;background-size:500% 600%}.mineReward.size-5-6.pos-3-2{background-position:75% 40%;background-size:500% 600%}.mineReward.size-5-6.pos-3-3{background-position:75% 60%;background-size:500% 600%}.mineReward.size-5-6.pos-3-4{background-position:75% 80%;background-size:500% 600%}.mineReward.size-5-6.pos-3-5{background-position:75% 100%;background-size:500% 600%}.mineReward.size-5-6.pos-4-0{background-position:100% 0;background-size:500% 600%}.mineReward.size-5-6.pos-4-1{background-position:100% 20%;background-size:500% 600%}.mineReward.size-5-6.pos-4-2{background-position:100% 40%;background-size:500% 600%}.mineReward.size-5-6.pos-4-3{background-position:100% 60%;background-size:500% 600%}.mineReward.size-5-6.pos-4-4{background-position:100% 80%;background-size:500% 600%}.mineReward.size-5-6.pos-4-5{background-position:100% 100%;background-size:500% 600%}.mineReward.size-6-1.pos-0-0{background-position:0 0;background-size:600% 100%}.mineReward.size-6-1.pos-1-0{background-position:20% 0;background-size:600% 100%}.mineReward.size-6-1.pos-2-0{background-position:40% 0;background-size:600% 100%}.mineReward.size-6-1.pos-3-0{background-position:60% 0;background-size:600% 100%}.mineReward.size-6-1.pos-4-0{background-position:80% 0;background-size:600% 100%}.mineReward.size-6-1.pos-5-0{background-position:100% 0;background-size:600% 100%}.mineReward.size-6-2.pos-0-0{background-position:0 0;background-size:600% 200%}.mineReward.size-6-2.pos-0-1{background-position:0 100%;background-size:600% 200%}.mineReward.size-6-2.pos-1-0{background-position:20% 0;background-size:600% 200%}.mineReward.size-6-2.pos-1-1{background-position:20% 100%;background-size:600% 200%}.mineReward.size-6-2.pos-2-0{background-position:40% 0;background-size:600% 200%}.mineReward.size-6-2.pos-2-1{background-position:40% 100%;background-size:600% 200%}.mineReward.size-6-2.pos-3-0{background-position:60% 0;background-size:600% 200%}.mineReward.size-6-2.pos-3-1{background-position:60% 100%;background-size:600% 200%}.mineReward.size-6-2.pos-4-0{background-position:80% 0;background-size:600% 200%}.mineReward.size-6-2.pos-4-1{background-position:80% 100%;background-size:600% 200%}.mineReward.size-6-2.pos-5-0{background-position:100% 0;background-size:600% 200%}.mineReward.size-6-2.pos-5-1{background-position:100% 100%;background-size:600% 200%}.mineReward.size-6-3.pos-0-0{background-position:0 0;background-size:600% 300%}.mineReward.size-6-3.pos-0-1{background-position:0 50%;background-size:600% 300%}.mineReward.size-6-3.pos-0-2{background-position:0 100%;background-size:600% 300%}.mineReward.size-6-3.pos-1-0{background-position:20% 0;background-size:600% 300%}.mineReward.size-6-3.pos-1-1{background-position:20% 50%;background-size:600% 300%}.mineReward.size-6-3.pos-1-2{background-position:20% 100%;background-size:600% 300%}.mineReward.size-6-3.pos-2-0{background-position:40% 0;background-size:600% 300%}.mineReward.size-6-3.pos-2-1{background-position:40% 50%;background-size:600% 300%}.mineReward.size-6-3.pos-2-2{background-position:40% 100%;background-size:600% 300%}.mineReward.size-6-3.pos-3-0{background-position:60% 0;background-size:600% 300%}.mineReward.size-6-3.pos-3-1{background-position:60% 50%;background-size:600% 300%}.mineReward.size-6-3.pos-3-2{background-position:60% 100%;background-size:600% 300%}.mineReward.size-6-3.pos-4-0{background-position:80% 0;background-size:600% 300%}.mineReward.size-6-3.pos-4-1{background-position:80% 50%;background-size:600% 300%}.mineReward.size-6-3.pos-4-2{background-position:80% 100%;background-size:600% 300%}.mineReward.size-6-3.pos-5-0{background-position:100% 0;background-size:600% 300%}.mineReward.size-6-3.pos-5-1{background-position:100% 50%;background-size:600% 300%}.mineReward.size-6-3.pos-5-2{background-position:100% 100%;background-size:600% 300%}.mineReward.size-6-4.pos-0-0{background-position:0 0;background-size:600% 400%}.mineReward.size-6-4.pos-0-1{background-position:0 33.3333%;background-size:600% 400%}.mineReward.size-6-4.pos-0-2{background-position:0 66.6666%;background-size:600% 400%}.mineReward.size-6-4.pos-0-3{background-position:0 100%;background-size:600% 400%}.mineReward.size-6-4.pos-1-0{background-position:20% 0;background-size:600% 400%}.mineReward.size-6-4.pos-1-1{background-position:20% 33.3333%;background-size:600% 400%}.mineReward.size-6-4.pos-1-2{background-position:20% 66.6666%;background-size:600% 400%}.mineReward.size-6-4.pos-1-3{background-position:20% 100%;background-size:600% 400%}.mineReward.size-6-4.pos-2-0{background-position:40% 0;background-size:600% 400%}.mineReward.size-6-4.pos-2-1{background-position:40% 33.3333%;background-size:600% 400%}.mineReward.size-6-4.pos-2-2{background-position:40% 66.6666%;background-size:600% 400%}.mineReward.size-6-4.pos-2-3{background-position:40% 100%;background-size:600% 400%}.mineReward.size-6-4.pos-3-0{background-position:60% 0;background-size:600% 400%}.mineReward.size-6-4.pos-3-1{background-position:60% 33.3333%;background-size:600% 400%}.mineReward.size-6-4.pos-3-2{background-position:60% 66.6666%;background-size:600% 400%}.mineReward.size-6-4.pos-3-3{background-position:60% 100%;background-size:600% 400%}.mineReward.size-6-4.pos-4-0{background-position:80% 0;background-size:600% 400%}.mineReward.size-6-4.pos-4-1{background-position:80% 33.3333%;background-size:600% 400%}.mineReward.size-6-4.pos-4-2{background-position:80% 66.6666%;background-size:600% 400%}.mineReward.size-6-4.pos-4-3{background-position:80% 100%;background-size:600% 400%}.mineReward.size-6-4.pos-5-0{background-position:100% 0;background-size:600% 400%}.mineReward.size-6-4.pos-5-1{background-position:100% 33.3333%;background-size:600% 400%}.mineReward.size-6-4.pos-5-2{background-position:100% 66.6666%;background-size:600% 400%}.mineReward.size-6-4.pos-5-3{background-position:100% 100%;background-size:600% 400%}.mineReward.size-6-5.pos-0-0{background-position:0 0;background-size:600% 500%}.mineReward.size-6-5.pos-0-1{background-position:0 25%;background-size:600% 500%}.mineReward.size-6-5.pos-0-2{background-position:0 50%;background-size:600% 500%}.mineReward.size-6-5.pos-0-3{background-position:0 75%;background-size:600% 500%}.mineReward.size-6-5.pos-0-4{background-position:0 100%;background-size:600% 500%}.mineReward.size-6-5.pos-1-0{background-position:20% 0;background-size:600% 500%}.mineReward.size-6-5.pos-1-1{background-position:20% 25%;background-size:600% 500%}.mineReward.size-6-5.pos-1-2{background-position:20% 50%;background-size:600% 500%}.mineReward.size-6-5.pos-1-3{background-position:20% 75%;background-size:600% 500%}.mineReward.size-6-5.pos-1-4{background-position:20% 100%;background-size:600% 500%}.mineReward.size-6-5.pos-2-0{background-position:40% 0;background-size:600% 500%}.mineReward.size-6-5.pos-2-1{background-position:40% 25%;background-size:600% 500%}.mineReward.size-6-5.pos-2-2{background-position:40% 50%;background-size:600% 500%}.mineReward.size-6-5.pos-2-3{background-position:40% 75%;background-size:600% 500%}.mineReward.size-6-5.pos-2-4{background-position:40% 100%;background-size:600% 500%}.mineReward.size-6-5.pos-3-0{background-position:60% 0;background-size:600% 500%}.mineReward.size-6-5.pos-3-1{background-position:60% 25%;background-size:600% 500%}.mineReward.size-6-5.pos-3-2{background-position:60% 50%;background-size:600% 500%}.mineReward.size-6-5.pos-3-3{background-position:60% 75%;background-size:600% 500%}.mineReward.size-6-5.pos-3-4{background-position:60% 100%;background-size:600% 500%}.mineReward.size-6-5.pos-4-0{background-position:80% 0;background-size:600% 500%}.mineReward.size-6-5.pos-4-1{background-position:80% 25%;background-size:600% 500%}.mineReward.size-6-5.pos-4-2{background-position:80% 50%;background-size:600% 500%}.mineReward.size-6-5.pos-4-3{background-position:80% 75%;background-size:600% 500%}.mineReward.size-6-5.pos-4-4{background-position:80% 100%;background-size:600% 500%}.mineReward.size-6-5.pos-5-0{background-position:100% 0;background-size:600% 500%}.mineReward.size-6-5.pos-5-1{background-position:100% 25%;background-size:600% 500%}.mineReward.size-6-5.pos-5-2{background-position:100% 50%;background-size:600% 500%}.mineReward.size-6-5.pos-5-3{background-position:100% 75%;background-size:600% 500%}.mineReward.size-6-5.pos-5-4{background-position:100% 100%;background-size:600% 500%}.mineReward.size-6-6.pos-0-0{background-position:0 0;background-size:600% 600%}.mineReward.size-6-6.pos-0-1{background-position:0 20%;background-size:600% 600%}.mineReward.size-6-6.pos-0-2{background-position:0 40%;background-size:600% 600%}.mineReward.size-6-6.pos-0-3{background-position:0 60%;background-size:600% 600%}.mineReward.size-6-6.pos-0-4{background-position:0 80%;background-size:600% 600%}.mineReward.size-6-6.pos-0-5{background-position:0 100%;background-size:600% 600%}.mineReward.size-6-6.pos-1-0{background-position:20% 0;background-size:600% 600%}.mineReward.size-6-6.pos-1-1{background-position:20% 20%;background-size:600% 600%}.mineReward.size-6-6.pos-1-2{background-position:20% 40%;background-size:600% 600%}.mineReward.size-6-6.pos-1-3{background-position:20% 60%;background-size:600% 600%}.mineReward.size-6-6.pos-1-4{background-position:20% 80%;background-size:600% 600%}.mineReward.size-6-6.pos-1-5{background-position:20% 100%;background-size:600% 600%}.mineReward.size-6-6.pos-2-0{background-position:40% 0;background-size:600% 600%}.mineReward.size-6-6.pos-2-1{background-position:40% 20%;background-size:600% 600%}.mineReward.size-6-6.pos-2-2{background-position:40% 40%;background-size:600% 600%}.mineReward.size-6-6.pos-2-3{background-position:40% 60%;background-size:600% 600%}.mineReward.size-6-6.pos-2-4{background-position:40% 80%;background-size:600% 600%}.mineReward.size-6-6.pos-2-5{background-position:40% 100%;background-size:600% 600%}.mineReward.size-6-6.pos-3-0{background-position:60% 0;background-size:600% 600%}.mineReward.size-6-6.pos-3-1{background-position:60% 20%;background-size:600% 600%}.mineReward.size-6-6.pos-3-2{background-position:60% 40%;background-size:600% 600%}.mineReward.size-6-6.pos-3-3{background-position:60% 60%;background-size:600% 600%}.mineReward.size-6-6.pos-3-4{background-position:60% 80%;background-size:600% 600%}.mineReward.size-6-6.pos-3-5{background-position:60% 100%;background-size:600% 600%}.mineReward.size-6-6.pos-4-0{background-position:80% 0;background-size:600% 600%}.mineReward.size-6-6.pos-4-1{background-position:80% 20%;background-size:600% 600%}.mineReward.size-6-6.pos-4-2{background-position:80% 40%;background-size:600% 600%}.mineReward.size-6-6.pos-4-3{background-position:80% 60%;background-size:600% 600%}.mineReward.size-6-6.pos-4-4{background-position:80% 80%;background-size:600% 600%}.mineReward.size-6-6.pos-4-5{background-position:80% 100%;background-size:600% 600%}.mineReward.size-6-6.pos-5-0{background-position:100% 0;background-size:600% 600%}.mineReward.size-6-6.pos-5-1{background-position:100% 20%;background-size:600% 600%}.mineReward.size-6-6.pos-5-2{background-position:100% 40%;background-size:600% 600%}.mineReward.size-6-6.pos-5-3{background-position:100% 60%;background-size:600% 600%}.mineReward.size-6-6.pos-5-4{background-position:100% 80%;background-size:600% 600%}.mineReward.size-6-6.pos-5-5{background-position:100% 100%;background-size:600% 600%}.restore-item{width:32px;margin:-5px}.mineSquare{height:0;width:4%!important;margin:0!important;padding:4% 0 0!important;text-align:center;max-width:4%!important;background-size:contain}.HammerSelected{cursor:url(../assets/images/underground/Hammer.png) 5 15,auto}.HammerSelected:active{cursor:url(../assets/images/underground/Hammer.png) 5 10,auto}.ChiselSelected{cursor:url(../assets/images/underground/Chisel.png) 5 25,auto}.ChiselSelected:active{cursor:url(../assets/images/underground/Chisel.png) 5 20,auto}.ChiselSelected.mineSquare::after{content:"";position:absolute;top:0;left:0;z-index:100;pointer-events:none}.ChiselSelected.rock1:hover::after,.ChiselSelected.rock2:hover::after,.ChiselSelected.rock3:hover::after,.ChiselSelected.rock4:hover::after,.ChiselSelected.rock5:hover::after{width:100%;height:100%;border:1px solid red}#dig.disabled{cursor:default}#mineBody{overflow:hidden}#mineBody .row .HammerSelected.mineSquare::after{content:"";position:absolute;top:-100%;left:-100%;z-index:100;pointer-events:none}#mineBody .row .HammerSelected.mineSquare:hover::after{width:300%;height:300%;border:1px solid red}:root{--locked:#000000;--questAtLocation:#55ff00;--incomplete:#ff9100;--uncaughtPokemon:#3498db;--uncaughtShadowPokemon:#a11131;--uncaughtShinyPokemonAndMissingAchievement:#c939fe;--uncaughtShinyPokemon:#ffee00;--missingAchievement:#57e3ff;--missingResistant:#ffffff00;--completed:#ffffff00;--trainer-image:url(../assets/images/profile/trainer-0.png)}.theme-dark{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.5))),url(../assets/images/background.png) center top/cover!important;background:linear-gradient(rgba(0,0,0,.5),rgba(0,0,0,.5)),url(../assets/images/background.png) center top/cover!important}.theme-dark #map,.theme-dark .eggSlot{-webkit-filter:brightness(90%)!important;filter:brightness(90%)!important} \ No newline at end of file