From d90c91af06f2ab836a561236f4fe35b6d6d04f8d Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Thu, 30 Mar 2023 23:02:35 -0400 Subject: [PATCH] Various changes --- public/images/items.json | 2067 ++++++++------ public/images/items.png | Bin 15558 -> 21363 bytes public/images/items/binding_band.png | Bin 0 -> 218 bytes public/images/items/black_glasses.png | Bin 0 -> 248 bytes public/images/items/choice_scarf.png | Bin 0 -> 404 bytes public/images/items/choice_specs.png | Bin 0 -> 283 bytes public/images/items/dawn_stone.png | Bin 0 -> 274 bytes public/images/items/deep_sea_scale.png | Bin 0 -> 235 bytes public/images/items/deep_sea_tooth.png | Bin 0 -> 274 bytes public/images/items/dragon_scale.png | Bin 0 -> 233 bytes public/images/items/dubious_disc.png | Bin 0 -> 298 bytes public/images/items/electirizer.png | Bin 0 -> 282 bytes public/images/items/magmarizer.png | Bin 0 -> 290 bytes public/images/items/metal_coat.png | Bin 0 -> 233 bytes public/images/items/oval_stone.png | Bin 0 -> 251 bytes public/images/items/prism_scale.png | Bin 0 -> 199 bytes public/images/items/protector.png | Bin 0 -> 293 bytes public/images/items/razor_claw.png | Bin 0 -> 262 bytes public/images/items/razor_fang.png | Bin 0 -> 226 bytes public/images/items/reaper_cloth.png | Bin 0 -> 317 bytes public/images/items/shiny_charm.png | Bin 454 -> 270 bytes public/images/items/upgrade.png | Bin 0 -> 303 bytes src/arena.ts | 211 -- src/battle-phase.ts | 76 +- src/battle-scene.ts | 49 +- src/battle.ts | 21 + src/biome.ts | 3414 ++++++++++++++++++++++++ src/modifier.ts | 81 +- src/pokemon-evolutions.ts | 2 +- src/pokemon.ts | 9 +- src/ui/uiHandler.ts | 4 + src/utils.ts | 7 + 32 files changed, 4825 insertions(+), 1116 deletions(-) create mode 100644 public/images/items/binding_band.png create mode 100644 public/images/items/black_glasses.png create mode 100644 public/images/items/choice_scarf.png create mode 100644 public/images/items/choice_specs.png create mode 100644 public/images/items/dawn_stone.png create mode 100644 public/images/items/deep_sea_scale.png create mode 100644 public/images/items/deep_sea_tooth.png create mode 100644 public/images/items/dragon_scale.png create mode 100644 public/images/items/dubious_disc.png create mode 100644 public/images/items/electirizer.png create mode 100644 public/images/items/magmarizer.png create mode 100644 public/images/items/metal_coat.png create mode 100644 public/images/items/oval_stone.png create mode 100644 public/images/items/prism_scale.png create mode 100644 public/images/items/protector.png create mode 100644 public/images/items/razor_claw.png create mode 100644 public/images/items/razor_fang.png create mode 100644 public/images/items/reaper_cloth.png create mode 100644 public/images/items/upgrade.png delete mode 100644 src/arena.ts create mode 100644 src/battle.ts create mode 100644 src/biome.ts diff --git a/public/images/items.json b/public/images/items.json index f66205872..88c27b5b5 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,11 +4,494 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 210, - "h": 124 + "w": 495, + "h": 73 }, "scale": 1, "frames": [ + { + "filename": "choice_scarf", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 1, + "y": 1, + "w": 24, + "h": 24 + } + }, + { + "filename": "sun_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 1, + "y": 27, + "w": 24, + "h": 24 + } + }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 1, + "y": 53, + "w": 22, + "h": 19 + } + }, + { + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 25, + "y": 53, + "w": 22, + "h": 19 + } + }, + { + "filename": "big_root", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 27, + "y": 1, + "w": 23, + "h": 24 + } + }, + { + "filename": "kings_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 27, + "y": 27, + "w": 23, + "h": 24 + } + }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 49, + "y": 53, + "w": 20, + "h": 19 + } + }, + { + "filename": "max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 52, + "y": 1, + "w": 22, + "h": 24 + } + }, + { + "filename": "shiny_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 52, + "y": 27, + "w": 21, + "h": 24 + } + }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 71, + "y": 53, + "w": 18, + "h": 19 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 75, + "y": 27, + "w": 18, + "h": 24 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 76, + "y": 1, + "w": 18, + "h": 24 + } + }, + { + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 91, + "y": 53, + "w": 24, + "h": 18 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 95, + "y": 27, + "w": 18, + "h": 24 + } + }, + { + "filename": "max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 96, + "y": 1, + "w": 18, + "h": 24 + } + }, + { + "filename": "max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 115, + "y": 27, + "w": 18, + "h": 24 + } + }, + { + "filename": "max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 116, + "y": 1, + "w": 18, + "h": 24 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 117, + "y": 53, + "w": 24, + "h": 18 + } + }, + { + "filename": "calcium", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 135, + "y": 27, + "w": 16, + "h": 24 + } + }, + { + "filename": "carbos", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 136, + "y": 1, + "w": 16, + "h": 24 + } + }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 143, + "y": 53, + "w": 23, + "h": 17 + } + }, + { + "filename": "hp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 153, + "y": 27, + "w": 16, + "h": 24 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 154, + "y": 1, + "w": 16, + "h": 24 + } + }, { "filename": "everstone", "rotated": false, @@ -24,12 +507,96 @@ "h": 17 }, "frame": { - "x": 1, - "y": 1, + "x": 168, + "y": 53, "w": 20, "h": 17 } }, + { + "filename": "pp_max", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 171, + "y": 27, + "w": 16, + "h": 24 + } + }, + { + "filename": "pp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 172, + "y": 1, + "w": 16, + "h": 24 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 189, + "y": 27, + "w": 16, + "h": 24 + } + }, + { + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 190, + "y": 1, + "w": 16, + "h": 24 + } + }, { "filename": "revive", "rotated": false, @@ -45,12 +612,642 @@ "h": 17 }, "frame": { - "x": 23, - "y": 1, + "x": 190, + "y": 53, "w": 12, "h": 17 } }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 204, + "y": 53, + "w": 15, + "h": 15 + } + }, + { + "filename": "expert_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 23 + }, + "frame": { + "x": 207, + "y": 27, + "w": 24, + "h": 23 + } + }, + { + "filename": "sacred_ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 221, + "y": 52, + "w": 24, + "h": 20 + } + }, + { + "filename": "scope-lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 208, + "y": 1, + "w": 24, + "h": 23 + } + }, + { + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 233, + "y": 26, + "w": 23, + "h": 23 + } + }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 247, + "y": 51, + "w": 23, + "h": 21 + } + }, + { + "filename": "fire_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 234, + "y": 1, + "w": 22, + "h": 23 + } + }, + { + "filename": "focus_sash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 258, + "y": 1, + "w": 22, + "h": 23 + } + }, + { + "filename": "reaper_cloth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 258, + "y": 26, + "w": 22, + "h": 23 + } + }, + { + "filename": "deep_sea_tooth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 272, + "y": 51, + "w": 22, + "h": 21 + } + }, + { + "filename": "leaf_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 282, + "y": 1, + "w": 21, + "h": 23 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 282, + "y": 26, + "w": 17, + "h": 23 + } + }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 296, + "y": 51, + "w": 21, + "h": 21 + } + }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 301, + "y": 26, + "w": 17, + "h": 23 + } + }, + { + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 319, + "y": 51, + "w": 21, + "h": 21 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 305, + "y": 1, + "w": 17, + "h": 23 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 320, + "y": 26, + "w": 15, + "h": 23 + } + }, + { + "filename": "exp_share", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 324, + "y": 1, + "w": 24, + "h": 22 + } + }, + { + "filename": "electirizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 337, + "y": 25, + "w": 22, + "h": 22 + } + }, + { + "filename": "ice_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 350, + "y": 1, + "w": 22, + "h": 22 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 342, + "y": 49, + "w": 22, + "h": 22 + } + }, + { + "filename": "protector", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 361, + "y": 25, + "w": 22, + "h": 22 + } + }, + { + "filename": "thunder_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 374, + "y": 1, + "w": 22, + "h": 22 + } + }, + { + "filename": "water_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 366, + "y": 49, + "w": 22, + "h": 22 + } + }, + { + "filename": "metal_coat", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 385, + "y": 25, + "w": 19, + "h": 22 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 398, + "y": 1, + "w": 21, + "h": 21 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 390, + "y": 49, + "w": 20, + "h": 21 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 406, + "y": 24, + "w": 23, + "h": 20 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 421, + "y": 1, + "w": 23, + "h": 20 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 412, + "y": 46, + "w": 22, + "h": 20 + } + }, { "filename": "gb", "rotated": false, @@ -66,54 +1263,12 @@ "h": 20 }, "frame": { - "x": 37, - "y": 1, + "x": 431, + "y": 23, "w": 20, "h": 20 } }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 59, - "y": 1, - "w": 17, - "h": 20 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 78, - "y": 1, - "w": 17, - "h": 20 - } - }, { "filename": "mb", "rotated": false, @@ -129,7 +1284,7 @@ "h": 20 }, "frame": { - "x": 97, + "x": 446, "y": 1, "w": 20, "h": 20 @@ -150,7 +1305,7 @@ "h": 20 }, "frame": { - "x": 119, + "x": 468, "y": 1, "w": 20, "h": 20 @@ -171,33 +1326,12 @@ "h": 20 }, "frame": { - "x": 141, - "y": 1, + "x": 436, + "y": 45, "w": 20, "h": 20 } }, - { - "filename": "sacred_ash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 163, - "y": 1, - "w": 24, - "h": 20 - } - }, { "filename": "ub", "rotated": false, @@ -213,14 +1347,14 @@ "h": 20 }, "frame": { - "x": 189, - "y": 1, + "x": 453, + "y": 23, "w": 20, "h": 20 } }, { - "filename": "shell_bell", + "filename": "razor_fang", "rotated": false, "trimmed": true, "sourceSize": { @@ -228,20 +1362,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, + "x": 7, + "y": 6, + "w": 18, "h": 20 }, "frame": { - "x": 1, - "y": 20, - "w": 23, + "x": 475, + "y": 23, + "w": 18, "h": 20 } }, { - "filename": "dusk_stone", + "filename": "golden_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -249,20 +1383,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 7, "y": 6, - "w": 21, - "h": 21 + "w": 17, + "h": 20 }, "frame": { - "x": 26, - "y": 23, - "w": 21, - "h": 21 + "x": 458, + "y": 45, + "w": 17, + "h": 20 } }, { - "filename": "moon_stone", + "filename": "lucky_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -270,751 +1404,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 7, "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 49, - "y": 23, - "w": 23, - "h": 21 - } - }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 74, - "y": 23, - "w": 21, - "h": 21 - } - }, - { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 97, - "y": 23, - "w": 21, - "h": 21 - } - }, - { - "filename": "exp_share", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 120, - "y": 23, - "w": 24, - "h": 22 - } - }, - { - "filename": "ice_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 146, - "y": 23, - "w": 22, - "h": 22 - } - }, - { - "filename": "thunder_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 170, - "y": 23, - "w": 22, - "h": 22 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 194, - "y": 23, - "w": 15, - "h": 23 - } - }, - { - "filename": "water_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 1, - "y": 42, - "w": 22, - "h": 22 - } - }, - { - "filename": "expert_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 25, - "y": 46, - "w": 24, - "h": 23 - } - }, - { - "filename": "fire_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 51, - "y": 46, - "w": 22, - "h": 23 - } - }, - { - "filename": "focus_sash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 75, - "y": 46, - "w": 22, - "h": 23 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, "w": 17, - "h": 23 + "h": 20 }, "frame": { - "x": 99, - "y": 46, + "x": 477, + "y": 45, "w": 17, - "h": 23 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 118, - "y": 47, - "w": 21, - "h": 23 - } - }, - { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 141, - "y": 47, - "w": 17, - "h": 23 - } - }, - { - "filename": "rare_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 160, - "y": 47, - "w": 23, - "h": 23 - } - }, - { - "filename": "scope-lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 185, - "y": 48, - "w": 24, - "h": 23 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 1, - "y": 66, - "w": 17, - "h": 23 - } - }, - { - "filename": "big_root", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 20, - "y": 71, - "w": 23, - "h": 24 - } - }, - { - "filename": "calcium", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 45, - "y": 71, - "w": 16, - "h": 24 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 63, - "y": 71, - "w": 16, - "h": 24 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 81, - "y": 71, - "w": 18, - "h": 24 - } - }, - { - "filename": "ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 101, - "y": 72, - "w": 18, - "h": 24 - } - }, - { - "filename": "full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 121, - "y": 72, - "w": 18, - "h": 24 - } - }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 141, - "y": 72, - "w": 16, - "h": 24 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 159, - "y": 72, - "w": 16, - "h": 24 - } - }, - { - "filename": "kings_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 177, - "y": 73, - "w": 23, - "h": 24 - } - }, - { - "filename": "pp_max", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 1, - "y": 91, - "w": 16, - "h": 24 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 19, - "y": 97, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 39, - "y": 97, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 59, - "y": 97, - "w": 18, - "h": 24 - } - }, - { - "filename": "pp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 79, - "y": 97, - "w": 16, - "h": 24 - } - }, - { - "filename": "max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 97, - "y": 98, - "w": 22, - "h": 24 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 121, - "y": 98, - "w": 16, - "h": 24 - } - }, - { - "filename": "shiny_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 139, - "y": 98, - "w": 21, - "h": 24 - } - }, - { - "filename": "sun_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 162, - "y": 99, - "w": 24, - "h": 24 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 188, - "y": 99, - "w": 16, - "h": 24 + "h": 20 } } ] @@ -1023,6 +1422,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f6d42f3902a6c864624ba8b4c713ac70:810a6f167460a184bbc1cb505f67095f:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:f9500d2be195f664ab2742e8bff67e78:c93fc6a52a52ea31b6f9d0d0e3eb37cc:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index ca7d70ae4dea77d7599f357c063158ce857742f7..ea38f514cf4711c8c91414c735ff64927c1b7cb5 100644 GIT binary patch literal 21363 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 literal 15558 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 diff --git a/public/images/items/binding_band.png b/public/images/items/binding_band.png new file mode 100644 index 0000000000000000000000000000000000000000..f634b02053d8756ea770937fb6217f84cb6696d2 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJg`O^sArXh)PTk0RK!JxvvUOUi zgyQNAY^x2Jj8&(Kp5Em8c>AIg`n8iqzBiV~cxg@jwK!|7dAUVJ-1_SohKec{CM_+e zCpWNNc<|}&JX^Jf76+yiZPC5u?ZOG?^JcLxOxOEf&y*dv_~Cmd(3sEN^?= zUV%Ts^v)~>jXx%J9~eHYS3e=;t1ByWjyYiVR#oQvMPVHmZ22YEhiH9OwOueXy3)8V R(gWyN22WQ%mvv4FO#tkNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!5`og;tJBEppX=meTr z6i{PcI=AOwmPD%n)3L551v_P*0|7TYJOwoPg#*k|LITZQC*0)~a@ZQh j5$hlj%W!x%GarNOUiL)8!?WfAtzqzV^>bP0l+XkK)U850 literal 0 HcmV?d00001 diff --git a/public/images/items/choice_scarf.png b/public/images/items/choice_scarf.png new file mode 100644 index 0000000000000000000000000000000000000000..a83fd1f4b30f3e3d1c4bb9373a11df856a78d784 GIT binary patch literal 404 zcmV;F0c-w=P) zJ&wXK6offSu0Xlvwv?2VThdZ)Ny!yB0wpaaC0F1Gl-qh4i!Y2U2N1SbS}B%Bf;`3F zydNi-OvW{?|Gv7e3y;(sJlmebeD@Q+kC!O@mp)g^Fq<#h7}18))i#3HhY=naE6$1`exq*|lq~EkdMxvP-6#%Yma{VSI$)FVD*Gec} zWWeDJ96bkqy4+hrg{X*3R4F?>6Rv z1@C))8^~&KhR)Bq4Cq>J=y(QDjkgRq+zZ z)>`8F8}ZYP?FC2zNeuF)0{HO9)zBJoa{=Vy()H76%p^y)mESHS&DtL@Cx{LQFms6yALKg?d0J>7&?&2$nKLc^%C~T4s3aYP) zOAf*?3`DzR$+F8Fnj>(8UV$Z7=n=R=z(^B0gTn?p5|u|9sXt|&rdFF}Nu^T%s!~d| zJT3TAAErY=IC!mlJ>PGgHAqM}2Qfeh1j0}I)&d|4LY@l&K;_>6@XWeh-^V{gaP_jN znCAf3TX;0U&pe_KIY}jg`3-)Zls+K|8xo7<& z0Ir%H0-zVxL8D`raH|Eb8MDC+g#dKJ#ev@Me%J!N4z!>@M4`W84Z@zjA(_4tN~I2~ YCvM5E>+Y}U+5i9m07*qoM6N<$g7S-TeE^gts zr-tRBZBt|#r%f_aU8^ZD;ls@obw!;^5u1X3^)B@c649FaYAut)?fILMt|fd^xm{>i zEyVDd)%>tb9%I2C!9z25NPc3ncqrHKL}2;UY6h_m6$OTE0rCx&R$0z-UOF@Ei@4%u z;Lz}tA-%Dl`9rfjt3jzcI}oqB)7Bg1&Jf7(=%s!%M`>4q<`JPef4t%xZA$O|(s^&M hSpC}EcWKp9wVD6(m8Z=L@&dY^!PC{xWt~$(696_VShfHF literal 0 HcmV?d00001 diff --git a/public/images/items/deep_sea_tooth.png b/public/images/items/deep_sea_tooth.png new file mode 100644 index 0000000000000000000000000000000000000000..448c84068673b8d9be8714fcfde6e54a9f48e726 GIT binary patch literal 274 zcmV+t0qy>YP)R{tJUl%9DW+*E zlDEJ)Z)Mx&u?2vE3cjw(xB_m+0l`yx)iu{41%N!Bv4VmR>mDRVMqWyOm%6^{-gH;+ zq9v6tPO_FM93g?tCZjtSoTMm$jxgVcX#qejoMZ}slCmpIK1@A&jgw4ge`dDDb@yku zBq#-#yeg9`B)5h!b8~9r7GI{9SLQf)E{alUo6a&XN_B$u zx0OsXSL*k#Wm_|UU#J7~Hd%Z14@+b9;@@6zo_9~YV7mPI*~#B8=q0@4JjSrjd0Twm hUcdOALY*mYepPG5zPTRqSqyYLgQu&X%Q~loCIHGHT6h2e literal 0 HcmV?d00001 diff --git a/public/images/items/dubious_disc.png b/public/images/items/dubious_disc.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb234974627765cf4fc091db6b5c0cec673a160 GIT binary patch literal 298 zcmV+_0oDGAP)w!lg8%>k literal 0 HcmV?d00001 diff --git a/public/images/items/electirizer.png b/public/images/items/electirizer.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4488d0ff3f7ff17eec0dfc74e41fd192e505b5 GIT binary patch literal 282 zcmV+#0p;iHm*af5~*c1d0=A2<&7c#)s0kM(0An;I1i6G8{e1h+{K<)-iw#y9Uw9sR7KrvuXa$@89W@ZG3*6^}8bnt6Pp2d~ g4P7#xO-=oU-v7_>2V#ndRsaA107*qoM6N<$g0Tf~6951J literal 0 HcmV?d00001 diff --git a/public/images/items/magmarizer.png b/public/images/items/magmarizer.png new file mode 100644 index 0000000000000000000000000000000000000000..0fca34c1e28d63c4d8de7e4e8d667d3e5234585d GIT binary patch literal 290 zcmV+-0p0$IP)LRRRJ5jt0oTvHs?Qe@evBsNG@EPVlj@E#BY(==+-sKyE* zWXx^gH$Vw(yUTE}6c>?Sz%C*!U{etsm{Q6x&n4Tso)*9{m?jAv6k{wBXGIA7+Ka{(^F z_iM}UHeA?Mq6FQ6BLVCTvo7G14c9dR0(VV9l90LqBTYgM?iSEQq<4Y_HvKwEB2pK) o{~vG>xC*R^-1d7mYSdrU2MBAqFdvjPhX4Qo07*qoM6N<$g2L- zfeC;x3@8m{07N`!|H)Y|roD0z6K0rN*mONYVbausNdam%@Du+_4z zhxIyyaF`mN3$`_Y(8F`Vw$=;*fYM;789*A;1XBT~c`gnX#gupe(oFm$7$>F+fP~6g z*AS+^Gyp)<0MNoQOeFyNKk5+Tmb)`%qx%q^N$PqxzCVNxfJQX{)T8*?J)j}%Zd{rE jAh95K?)D^exqhu3mULscm5kn900000NkvXXu0mjfI?-S? literal 0 HcmV?d00001 diff --git a/public/images/items/oval_stone.png b/public/images/items/oval_stone.png new file mode 100644 index 0000000000000000000000000000000000000000..d48b06888214766cc10b2f1c1b0161aa5b5da6e0 GIT binary patch literal 251 zcmV@}fc~&FLwYEFq8*I|)svDUnDd{y-^Z_Z*t| z^{#tew}W_o%uBoopV$-M!bBkOSF*Yu93q098(4rBBNc#P^YT1{8?LG$pNC%GJs}p9 z2tW|H`K9;f9?4}D@a69fpShO{=(T{8%UfUpuS9U!!H^kX5lnW>0_1;zFK>_XbAYSR za_rxSoP<7EOF-yCvMqS$ddNy{-2;Z*1rmvb8Xv6Kdu@w1W32!H002ovPDHLkV1n<^ BX{-PM literal 0 HcmV?d00001 diff --git a/public/images/items/prism_scale.png b/public/images/items/prism_scale.png new file mode 100644 index 0000000000000000000000000000000000000000..5a0d45c686b96b3614ea86b772a209c8bc658a48 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJK2I0Nkcif|Qx5VrDDb#Sw*HJc zyja_UN!x(QeSO~nt{JnYOkwNW-?>cxXZSsC3FiWt<3F_wkEx~Wo!`o9%suhb-Yex+ zEPCl1?V~N5}vG literal 0 HcmV?d00001 diff --git a/public/images/items/protector.png b/public/images/items/protector.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b01a8c53d64900148b0d3cd99b2827f520030d GIT binary patch literal 293 zcmV+=0owkFP)9;@NMzoy)L0Sgu`W;L1M$3LD2MdJq93mKZfVc+ak~mt3!ZDK^~WB4-kkM zLIP3{4oBu`{C=)R@J!d)?}sWE!HkHwCCVhS-aTkQ@MZ#~h%4b{!xAxNznGt}F+j5!HYrNUE`f rm;rS2oYyR$J>~EDw8p)9{cU{!R>oRaf_RS~00000NkvXXu0mjfFRXhl literal 0 HcmV?d00001 diff --git a/public/images/items/razor_claw.png b/public/images/items/razor_claw.png new file mode 100644 index 0000000000000000000000000000000000000000..a9541c4d251a64e3d4f751202ddc6e5beaa0f1a1 GIT binary patch literal 262 zcmV+h0r~!kP)Wy(2s zrd%XERM!uWRY4HGAIEKkkJJ1zK-9zQru~GgK;(vtLd4GePdF?N5Ib|#F3@JQo}5#? zNEc}HvTlz#098lduo?jUBm|&v@BPWwQxGC^007JY!o&3#ga`nt1OWdj)@eq}3-#ni94Q0X9{>OV M07*qoM6N<$g3Xm|I{*Lx literal 0 HcmV?d00001 diff --git a/public/images/items/razor_fang.png b/public/images/items/razor_fang.png new file mode 100644 index 0000000000000000000000000000000000000000..77c3da44c92fb58b2c12acec078214548468fdf6 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJm7Xq+ArXg@6C_v{Cy4NvE?BVO zgM1tNkw>b*i~hyi-r`yI@)^gBqwnXvWlf&J{NfQu$!SN4Bj>f&Et}7rAeL`g_3i&0 z)$9i|^!gfF8BRE*G`!)MWzBH6NWg)Qca{~?bmj@p3wKs?y>(`kcHmT&3h5@^98At@mx(1L5jqhOi!jt+lLchPA^gUxTBz6?XRZry&gl+wZ8 zTzsAP)8}cq1PKL%_`W?)0Q+qY5WU|!Uj$%c)A%^Z2b_Qct>48;)KRNDP2&dtbWC{8&GaP&Eduq^1}xdLIB zkZsA)dy#rg2oD=OPv}z_LIHTbHCjFAEu|0udl@es95IgE{T@Vd17fT+Vg&%C9kDU_ z`M;YG4{J#n3jY}f(HD=Q*OUy!_4Yo&Vc!ED%O--~ltr`D#F`6s>sH%dN%fVy>}9X} P00000NkvXXu0mjfHmiq| literal 0 HcmV?d00001 diff --git a/public/images/items/shiny_charm.png b/public/images/items/shiny_charm.png index 9d72fe465e3f1322e38b724e6ec333797e79f5fb..0214ec4910ce6a3e84064f895f4123e306e612e2 100644 GIT binary patch delta 243 zcmV_>jJ0$x>3i7sqi*S+QaZQEN3$Dg1DGd;onf5t+efBIyEumx%f8I^+!r5t#r( zAR&YAZ+*aG6=VXf_t6JtcWZXip56se1&2!n9I!iIUnhPG_-sCX2m#{=z0`BYC t>`y5-pa9R{>31H%QaJZPS+Qb^@dP>kWLHkc#N+?~002ovPDHLkV1h(fX{i7J delta 429 zcmV;e0aE^s0>%T7BYy#nNkly-UO}7{>c2bQg!fDF!;&{T5djp<_o^7f&co zZce)TfpB=ch>L@Z2qNcl;OOY6W5*5-uXzJ+Nprn6*EBtc79J=~$@9zmMLYoTR;iVm z_W=JJpzfjn_<(~heV^6==pTQZ1G_yf7)B=vc*78I%~=G=?4K!upw zLqx(E06~y26=mtrYohfc)QeF~4FWj>sDe==(g{Erh>3ZtDbQ2l44@F|Kp1Tmb?}f$ znV2sPpq>)Vk1sD^cz+GM>4y})71BZLZog-Pbt0A&}A^)nIPfI&1%Ve6E~H00000NkvXXu0mjfV$ZvF diff --git a/public/images/items/upgrade.png b/public/images/items/upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..38db96a17922292ec9910fac7933e8694461ce20 GIT binary patch literal 303 zcmV+~0nq-5P)ST5Jf!-^JEOltlzH_hvyQu&4p?rI+(1331KmE{F}&GaEf9gso)(Iro$oD_ctL+6 zbFw$UG!4H=;3jMD0z=VQng=g1kXUO!!u2Gw1OOT_Sd*F#M6_5DfpwmDjs!R%P*ea- z7(V)O2P?%hj(_L5A_Cq&qzN1ARRTSklw6ho!U=cxnE)klEy79GtEfe=D(>`@07tHa zi~b?SBJpl79{f!N#G|hIQKG=*pXKVoty;AzSufXygSfDS?BxIe002ovPDHLkV1kjM BdtLwl literal 0 HcmV?d00001 diff --git a/src/arena.ts b/src/arena.ts deleted file mode 100644 index d5820cafd..000000000 --- a/src/arena.ts +++ /dev/null @@ -1,211 +0,0 @@ -import BattleScene from "./battle-scene"; -import { default as PokemonSpecies, allSpecies, getPokemonSpecies } from "./pokemon-species"; -import { Stat } from "./pokemon-stat"; -import { Species } from "./species"; -import { Type } from './type'; -import * as Utils from './utils'; - -export enum ArenaType { - PLAINS = 1, - GRASS, - FOREST, - WATER, - SWAMP, - SEA, - MOUNTAIN, - LAND, - CAVE, - DESERT, - ICE_CAVE, - MEADOW, - POWER_PLANT, - VOLCANO, - GRAVEYARD, - DOJO, - RUINS, - ABYSS, - SPACE -}; - -enum PoolTier { - COMMON, - UNCOMMON, - RARE, - ULTRA_RARE, - LEGENDARY -}; - -export class Arena { - private scene: BattleScene; - public arenaType: integer; - private bgm: string; - - private pokemonPool: PokemonSpecies[][]; - - constructor(scene: BattleScene, arenaType: integer, bgm: string) { - this.scene = scene; - this.arenaType = arenaType; - this.bgm = bgm; - - if (arenaPools.hasOwnProperty(arenaType)) - this.pokemonPool = arenaPools[arenaType]; - else { - const predicate = arenaPoolPredicates[arenaType] || (() => {}); - this.pokemonPool = Utils.getEnumValues(PoolTier).map(t => allSpecies.filter(p => predicate(p, t))); - } - } - randomSpecies(waveIndex: integer): PokemonSpecies { - const tierValue = Utils.randInt(512); - const tier = tierValue >= 156 ? PoolTier.COMMON : tierValue >= 32 ? PoolTier.UNCOMMON : tierValue >= 6 ? PoolTier.RARE : tierValue >= 1 ? PoolTier.ULTRA_RARE : PoolTier.LEGENDARY; - const tierPool = this.pokemonPool[tier]; - let ret: PokemonSpecies; - if (!tierPool.length) - ret = this.scene.randomSpecies(); - else { - const species = tierPool[Utils.randInt(tierPool.length)]; - ret = species instanceof PokemonSpecies ? species : getPokemonSpecies(species); - } - const newSpeciesId = ret.getSpeciesForLevel(5); - if (newSpeciesId !== ret.speciesId) { - console.log('Replaced', Species[ret.speciesId], 'with', Species[newSpeciesId]); - ret = getPokemonSpecies(newSpeciesId); - } - return ret; - } - - playBgm() { - this.scene.loadBgm(this.bgm); - this.scene.load.once(Phaser.Loader.Events.COMPLETE, () => this.scene.playBgm(this.bgm)); - } -} - -const arenaPools = { - [ArenaType.PLAINS]: { - [PoolTier.COMMON]: [ - Species.CATERPIE, Species.METAPOD, Species.WEEDLE, Species.KAKUNA, Species.PIDGEY, Species.RATTATA, Species.SPEAROW, Species.SENTRET, Species.HOOTHOOT, Species.LEDYBA, - Species.HOPPIP, Species.SUNKERN, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.SILCOON, Species.CASCOON, Species.TAILLOW, Species.STARLY, Species.BIDOOF, - Species.KRICKETOT, Species.PATRAT, Species.LILLIPUP, Species.PIDOVE, Species.COTTONEE, Species.PETILIL, Species.MINCCINO, Species.FOONGUS - ], - [PoolTier.UNCOMMON]: [ - Species.EKANS, Species.NIDORAN_F, Species.NIDORAN_M, Species.ODDISH, Species.PARAS, Species.VENONAT, Species.MEOWTH, Species.BELLSPROUT, Species.PICHU, Species.IGGLYBUFF, - Species.LOTAD, Species.SEEDOT, Species.SHROOMISH, Species.NINCADA, Species.AZURILL, Species.WHISMUR, Species.SKITTY, Species.BUDEW, Species.COMBEE, Species.CHERUBI, - Species.VENIPEDE - ], - [PoolTier.RARE]: [ Species.ABRA, Species.CLEFFA, Species.WOOPER, Species.RALTS, Species.SURSKIT, Species.SLAKOTH, Species.DUCKLETT ], - [PoolTier.ULTRA_RARE]: [ Species.EEVEE, Species.TOGEPI, Species.SMEARGLE, Species.TYROGUE, Species.WYNAUT ], - [PoolTier.LEGENDARY]: [ Species.DITTO ] - } -}; - -const arenaPoolPredicates = { - [ArenaType.PLAINS]: (p, t) => { - if (p.isOfType(Type.GHOST) || p.isOfType(Type.STEEL) || p.isOfType(Type.ICE) || p.isOfType(Type.DRAGON)) - return false; - for (let s in p.baseStats) { - let threshold: integer; - const stat = parseInt(s); - switch (stat) { - case Stat.HP: - threshold = 70; - break; - default: - threshold = 60; - break; - } - if (p.baseStats[s] > threshold) { - if (p.baseTotal <= 300 && p.baseExp <= 75 && (p.isOfType(Type.NORMAL) || p.isOfType(Type.BUG) || p.isOfType(Type.GRASS))) - return true; - return false; - } - } - return p.baseTotal <= 320 && p.baseExp <= 75; - }, - [ArenaType.GRASS]: (p, t) => { - switch (t) { - case PoolTier.ULTRA_RARE: - return [ Species.ENTEI, Species.SUICUNE, Species.RAIKOU, Species.LATIOS, Species.LATIAS ].map(s => getPokemonSpecies(s)); - case PoolTier.LEGENDARY: - return [ Species.MEW ].map(s => getPokemonSpecies(s)); - } - return p.isOfType(Type.NORMAL) || p.isOfType(Type.FAIRY) || p.isOfType(Type.GRASS) || p.isOfType(Type.BUG) || p.isOfType(Type.ELECTRIC); - }, - [ArenaType.FOREST]: (p, t) => { - switch (t) { - case PoolTier.LEGENDARY: - return getPokemonSpecies(Species.CELEBI); - } - return p.isOfType(Type.GRASS) || p.isOfType(Type.BUG) || p.isOfType(Type.POISON); - }, - [ArenaType.WATER]: (p, t) => { - switch (t) { - case PoolTier.ULTRA_RARE: - return [ Species.UXIE, Species.MESPRIT, Species.AZELF ].map(s => getPokemonSpecies(s)); - } - return p.isOfType(Type.WATER) - }, - [ArenaType.SWAMP]: (p, t) => { - return p.isOfType(Type.GRASS) || p.isOfType(Type.WATER) || p.isOfType(Type.POISON); - }, - [ArenaType.SEA]: (p, t) => { - switch (t) { - case PoolTier.ULTRA_RARE: - return [ Species.KYOGRE ].map(s => getPokemonSpecies(s)); - case PoolTier.LEGENDARY: - return [ Species.LUGIA ].map(s => getPokemonSpecies(s)); - } - return p.isOfType(Type.WATER); - }, - [ArenaType.MOUNTAIN]: (p, t) => { - switch (t) { - case PoolTier.ULTRA_RARE: - return [ Species.ARTICUNO, Species.ZAPDOS, Species.MOLTRES ].map(s => getPokemonSpecies(s)); - break; - case PoolTier.LEGENDARY: - return [ Species.HO_OH, Species.RAYQUAZA ].map(s => getPokemonSpecies(s)); - } - return p.isOfType(Type.FLYING) || p.isOfType(Type.GROUND) || p.isOfType(Type.ROCK) || p.isOfType(Type.ELECTRIC) || p.isOfType(Type.STEEL); - }, - [ArenaType.LAND]: (p, t) => { - switch (t) { - case PoolTier.ULTRA_RARE: - return [ Species.GROUDON ].map(s => getPokemonSpecies(s)); - } - return p.isOfType(Type.GROUND); - }, - [ArenaType.CAVE]: (p, t) => { - switch (t) { - case PoolTier.ULTRA_RARE: - return [ Species.REGIROCK, Species.REGICE, Species.REGISTEEL ].map(s => getPokemonSpecies(s)); - case PoolTier.LEGENDARY: - return [ Species.MEWTWO, Species.REGIGIGAS ].map(s => getPokemonSpecies(s)); - } - return p.isOfType(Type.ROCK); - }, - [ArenaType.DESERT]: (p, t) => { - return p.isOfType(Type.GROUND) || p.isOfType(Type.ROCK); - }, - [ArenaType.ICE_CAVE]: (p, t) => { - return p.isOfType(Type.ICE); - }, - [ArenaType.MEADOW]: (p, t) => { - return p.isOfType(Type.FAIRY); - }, - [ArenaType.POWER_PLANT]: (p, t) => { - return p.isOfType(Type.ELECTRIC); - }, - [ArenaType.VOLCANO]: (p, t) => { - return p.isOfType(Type.FIRE); - }, - [ArenaType.GRAVEYARD]: (p, t) => { - return p.isOfType(Type.GHOST); - }, - [ArenaType.DOJO]: (p, t) => { - return p.isOfType(Type.FIGHTING); - }, - [ArenaType.RUINS]: (p, t) => { - return p.isOfType(Type.PSYCHIC); - }, - [ArenaType.ABYSS]: (p, t) => { - return p.isOfType(Type.DARK); - } -}; \ No newline at end of file diff --git a/src/battle-phase.ts b/src/battle-phase.ts index 5bdb8ce9a..bcac6224f 100644 --- a/src/battle-phase.ts +++ b/src/battle-phase.ts @@ -6,7 +6,7 @@ import { Mode } from './ui/ui'; import { Command } from "./ui/command-ui-handler"; import { interp } from "./temp_interpreter"; import { Stat } from "./pokemon-stat"; -import { ExpBoosterModifier, ExtraModifierModifier, getModifierTypesForWave, ModifierType, PokemonModifierType, regenerateModifierPoolThresholds } from "./modifier"; +import { ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, getModifierTypesForWave, ModifierType, PokemonModifierType, regenerateModifierPoolThresholds } from "./modifier"; import PartyUiHandler from "./ui/party-ui-handler"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor as getPokeballTintColor, PokeballType } from "./pokeball"; import { pokemonLevelMoves } from "./pokemon-level-moves"; @@ -68,14 +68,12 @@ export class NextEncounterPhase extends BattlePhase { start() { super.start(); - this.scene.waveIndex++; - console.log(this.scene.getPlayerPokemon(), this.scene.getParty().map(p => p.name), this.scene.getPlayerPokemon().id) this.scene.getEnemyPokemon().destroy(); - const newEnemyPokemon = new EnemyPokemon(this.scene, this.scene.randomSpecies(true), this.scene.getLevelForWave()); + const newEnemyPokemon = new EnemyPokemon(this.scene, this.scene.randomSpecies(true), this.scene.getLevelForNextWave()); newEnemyPokemon.loadAssets().then(() => { - this.scene.setEnemyPokemon(newEnemyPokemon); + this.scene.newBattle(newEnemyPokemon); this.scene.field.add(newEnemyPokemon); this.scene.field.moveBelow(newEnemyPokemon, this.scene.getPlayerPokemon()); newEnemyPokemon.tint(0, 0.5); @@ -169,7 +167,10 @@ export class SummonPhase extends BattlePhase { onComplete: () => { playerPokemon.cry(); playerPokemon.getSprite().clearTint(); - this.scene.time.delayedCall(1000, () => this.end()); + this.scene.time.delayedCall(1000, () => { + this.scene.currentBattle.addParticipant(playerPokemon); + this.end(); + }); } }); } @@ -245,7 +246,13 @@ export class CheckSwitchPhase extends BattlePhase { super.start(); this.scene.ui.showText('Will you switch\nPOKéMON?', null, () => { - this.scene.ui.setMode(Mode.SWITCH_CHECK, () => this.end()); + this.scene.ui.setMode(Mode.SWITCH_CHECK, () => { + console.log('handler', this.scene.ui.getHandler()); + console.log(this.scene.ui.getHandler().getCursor()) + if (this.scene.ui.getHandler().getCursor()) + this.scene.currentBattle.addParticipant(this.scene.getPlayerPokemon()); + this.end(); + }); }); } } @@ -321,6 +328,20 @@ export abstract class PokemonPhase extends BattlePhase { } } +export abstract class PartyMemberPokemonPhase extends PokemonPhase { + protected partyMemberIndex: integer; + + constructor(scene: BattleScene, partyMemberIndex: integer) { + super(scene, true); + + this.partyMemberIndex = partyMemberIndex; + } + + getPokemon() { + return this.scene.getParty()[this.partyMemberIndex]; + } +} + abstract class MovePhase extends BattlePhase { protected pokemon: Pokemon; protected move: PokemonMove; @@ -474,6 +495,8 @@ export class FaintPhase extends PokemonPhase { onComplete: () => { pokemon.setVisible(false); pokemon.y -= 150; + if (pokemon instanceof PlayerPokemon) + this.scene.currentBattle.removeFaintedParticipant(pokemon as PlayerPokemon); this.scene.field.remove(pokemon); this.end(); } @@ -490,8 +513,28 @@ export class VictoryPhase extends PokemonPhase { start() { super.start(); - if (this.scene.getPlayerPokemon().level < 100) - this.scene.unshiftPhase(new ExpPhase(this.scene)); + const participantIds = this.scene.currentBattle.playerParticipantIds; + const party = this.scene.getParty(); + const expShareModifier = this.scene.getModifier(ExpShareModifier) as ExpShareModifier; + const expValue = this.scene.getEnemyPokemon().getExpValue(party[0]); + for (let pm = 0; pm < party.length; pm++) { + const pokemon = party[pm]; + if (!pokemon.hp) + continue; + const pId = pokemon.id; + const participated = participantIds.has(pId); + if (!participated && !expShareModifier) + continue; + if (pokemon.level < 100) { + let expMultiplier = 0; + if (participated) + expMultiplier += (1 / participantIds.size); + if (expShareModifier) + expMultiplier += expShareModifier.stackCount * 0.1; + console.log(pokemon.species.name, expMultiplier) + this.scene.unshiftPhase(new ExpPhase(this.scene, pm, expValue * expMultiplier)); + } + } this.scene.unshiftPhase(new SelectModifierPhase(this.scene)); this.scene.unshiftPhase(new NextEncounterPhase(this.scene)); @@ -522,17 +565,22 @@ export class SwitchPhase extends BattlePhase { } } -export class ExpPhase extends PokemonPhase { - constructor(scene: BattleScene) { - super(scene, true); +export class ExpPhase extends PartyMemberPokemonPhase { + private expValue: number; + + constructor(scene: BattleScene, partyMemberIndex: integer, expValue: number) { + super(scene, partyMemberIndex); + + this.expValue = expValue; } start() { super.start(); const pokemon = this.getPokemon(); - let exp = new Utils.IntegerHolder(this.scene.getEnemyPokemon().getExpValue(pokemon.level)); + let exp = new Utils.NumberHolder(this.expValue); this.scene.applyModifiers(ExpBoosterModifier, exp); + exp.value = Math.floor(exp.value); this.scene.ui.showText(`${pokemon.name} gained\n${exp.value} EXP. Points!`, null, () => { const lastLevel = pokemon.level; let newLevel: integer; @@ -543,6 +591,8 @@ export class ExpPhase extends PokemonPhase { pokemon.updateInfo(() => this.end()); }, null, true); } + + } export class LevelUpPhase extends PokemonPhase { diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 5a22d7739..55d76f4ea 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1,5 +1,5 @@ import Phaser from 'phaser'; -import { ArenaType, Arena } from './arena'; +import { Biome, BiomeArena } from './biome'; import UI from './ui/ui'; import { BattlePhase, EncounterPhase, SummonPhase, CommandPhase } from './battle-phase'; import { PlayerPokemon, EnemyPokemon } from './pokemon'; @@ -9,6 +9,7 @@ import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, P import { PokeballType } from './pokeball'; import { Species } from './species'; import { initAutoPlay } from './auto-play'; +import { Battle } from './battle'; export default class BattleScene extends Phaser.Scene { private auto: boolean; @@ -17,7 +18,7 @@ export default class BattleScene extends Phaser.Scene { private phaseQueue: Array; private phaseQueuePrepend: Array; private currentPhase: BattlePhase; - private arena: Arena; + private arena: BiomeArena; public field: Phaser.GameObjects.Container; public fieldUI: Phaser.GameObjects.Container; public arenaBg: Phaser.GameObjects.Image; @@ -25,12 +26,11 @@ export default class BattleScene extends Phaser.Scene { public arenaEnemy: Phaser.GameObjects.Image; public arenaEnemy2: Phaser.GameObjects.Image; public trainer: Phaser.GameObjects.Sprite; - public waveIndex: integer; + public currentBattle: Battle; public pokeballCounts = Object.fromEntries(Utils.getEnumValues(PokeballType).map(t => [ t, 0 ])); private party: PlayerPokemon[]; private modifierBar: ModifierBar; private modifiers: Modifier[]; - private enemyPokemon: EnemyPokemon; public uiContainer: Phaser.GameObjects.Container; public ui: UI; @@ -117,8 +117,8 @@ export default class BattleScene extends Phaser.Scene { this.loadAtlas('party_cancel', 'ui'); // Load arena images - Utils.getEnumValues(ArenaType).map(at => { - const atKey = ArenaType[at].toLowerCase(); + Utils.getEnumValues(Biome).map(at => { + const atKey = Biome[at].toLowerCase(); this.loadImage(`${atKey}_bg`, 'arenas', `${atKey}_bg.png`); this.loadImage(`${atKey}_a`, 'arenas', `${atKey}_a.png`); this.loadImage(`${atKey}_b`, 'arenas', `${atKey}_b.png`); @@ -177,15 +177,15 @@ export default class BattleScene extends Phaser.Scene { this.field = field; // Init arena - const arenas = Utils.getEnumValues(ArenaType).map(at => new Arena(this, at, ArenaType[at].toLowerCase())); + const arenas = Utils.getEnumValues(Biome).map(at => new BiomeArena(this, at, Biome[at].toLowerCase())); const arena = arenas[Utils.randInt(11)]; this.arena = arena; - this.arenaBg = this.add.image(0, 0, `${ArenaType[arena.arenaType].toLowerCase()}_bg`); - this.arenaPlayer = this.add.image(340, 20, `${ArenaType[arena.arenaType].toLowerCase()}_a`); - this.arenaEnemy = this.add.image(-240, 13, `${ArenaType[arena.arenaType].toLowerCase()}_b`); - this.arenaEnemy2 = this.add.image(-240, 13, `${ArenaType[arena.arenaType].toLowerCase()}_b`); + this.arenaBg = this.add.image(0, 0, `${Biome[arena.biomeType].toLowerCase()}_bg`); + this.arenaPlayer = this.add.image(340, 20, `${Biome[arena.biomeType].toLowerCase()}_a`); + this.arenaEnemy = this.add.image(-240, 13, `${Biome[arena.biomeType].toLowerCase()}_b`); + this.arenaEnemy2 = this.add.image(-240, 13, `${Biome[arena.biomeType].toLowerCase()}_b`); [this.arenaBg, this.arenaPlayer, this.arenaEnemy, this.arenaEnemy2].forEach(a => { a.setOrigin(0, 0); @@ -209,8 +209,6 @@ export default class BattleScene extends Phaser.Scene { this.add.existing(this.modifierBar); uiContainer.add(this.modifierBar); - this.waveIndex = 1; - this.party = []; let loadPokemonAssets = []; @@ -226,11 +224,12 @@ export default class BattleScene extends Phaser.Scene { const enemySpecies = arena.randomSpecies(1); console.log(enemySpecies.name); - const enemyPokemon = new EnemyPokemon(this, enemySpecies, this.getLevelForWave()); + const enemyPokemon = new EnemyPokemon(this, enemySpecies, this.getLevelForNextWave()); loadPokemonAssets.push(enemyPokemon.loadAssets()); this.add.existing(enemyPokemon); - this.enemyPokemon = enemyPokemon; + + this.newBattle(enemyPokemon); field.add(enemyPokemon); @@ -297,11 +296,12 @@ export default class BattleScene extends Phaser.Scene { } getEnemyPokemon(): EnemyPokemon { - return this.enemyPokemon; + return this.currentBattle.enemyPokemon; } - setEnemyPokemon(enemyPokemon: EnemyPokemon) { - this.enemyPokemon = enemyPokemon; + newBattle(enemyPokemon: EnemyPokemon): Battle { + this.currentBattle = new Battle((this.currentBattle?.waveIndex || 0) + 1, enemyPokemon); + return this.currentBattle; } randomSpecies(fromArenaPool?: boolean): PokemonSpecies { @@ -310,13 +310,14 @@ export default class BattleScene extends Phaser.Scene { : allSpecies[(Utils.randInt(allSpecies.length)) - 1]; } - getLevelForWave() { - let averageLevel = 1 + this.waveIndex * 0.25; + getLevelForNextWave() { + const waveIndex = (this.currentBattle?.waveIndex || 0) + 1; + let averageLevel = 1 + waveIndex * 0.25; - if (this.waveIndex % 10 === 0) + if (waveIndex % 10 === 0) return Math.floor(averageLevel * 1.25); - const deviation = 10 / this.waveIndex; + const deviation = 10 / waveIndex; return Math.max(Math.round(averageLevel + Utils.randGauss(deviation)), 1); } @@ -421,6 +422,10 @@ export default class BattleScene extends Phaser.Scene { } } + getModifier(modifierType: { new(...args: any[]): Modifier }): Modifier { + return this.modifiers.find(m => m instanceof modifierType); + } + applyModifiers(modifierType: { new(...args: any[]): Modifier }, ...args: any[]): void { const modifiers = this.modifiers.filter(m => m instanceof modifierType && m.shouldApply(args)); for (let modifier of modifiers) { diff --git a/src/battle.ts b/src/battle.ts new file mode 100644 index 000000000..d20c5679f --- /dev/null +++ b/src/battle.ts @@ -0,0 +1,21 @@ +import { EnemyPokemon, PlayerPokemon } from "./pokemon"; + +export class Battle { + public waveIndex: integer; + public enemyPokemon: EnemyPokemon; + public playerParticipantIds: Set = new Set(); + + constructor(waveIndex: integer, enemyPokemon: EnemyPokemon) { + this.waveIndex = waveIndex; + this.enemyPokemon = enemyPokemon; + } + + addParticipant(playerPokemon: PlayerPokemon) { + console.log('add participant', playerPokemon.name) + this.playerParticipantIds.add(playerPokemon.id); + } + + removeFaintedParticipant(playerPokemon: PlayerPokemon) { + this.playerParticipantIds.delete(playerPokemon.id); + } +} \ No newline at end of file diff --git a/src/biome.ts b/src/biome.ts new file mode 100644 index 000000000..a5124fb22 --- /dev/null +++ b/src/biome.ts @@ -0,0 +1,3414 @@ +import BattleScene from "./battle-scene"; +import { default as PokemonSpecies, allSpecies, getPokemonSpecies } from "./pokemon-species"; +import { Stat } from "./pokemon-stat"; +import { Species } from "./species"; +import { Type } from './type'; +import * as Utils from './utils'; + +export enum Biome { + PLAINS, + GRASS, + FOREST, + WATER, + SWAMP, + SEA, + MOUNTAIN, + LAND, + CAVE, + DESERT, + ICE_CAVE, + MEADOW, + POWER_PLANT, + VOLCANO, + GRAVEYARD, + DOJO, + RUINS, + WASTELAND, + ABYSS, + SPACE +}; + +enum PoolTier { + COMMON, + UNCOMMON, + RARE, + SUPER_RARE, + ULTRA_RARE, + BOSS, + BOSS_RARE, + BOSS_ULTRA_RARE, + BOSS_LEGENDARY +}; + +export class BiomeArena { + private scene: BattleScene; + public biomeType: integer; + private bgm: string; + + private pokemonPool: PokemonSpecies[][]; + + constructor(scene: BattleScene, biome: integer, bgm: string) { + this.scene = scene; + this.biomeType = biome; + this.bgm = bgm; + + if (biomePools.hasOwnProperty(biome)) + this.pokemonPool = biomePools[biome]; + else { + const predicate = biomePoolPredicates[biome] || (() => {}); + this.pokemonPool = Utils.getEnumValues(PoolTier).map(t => allSpecies.filter(p => predicate(p, t))); + } + } + + randomSpecies(waveIndex: integer): PokemonSpecies { + const tierValue = Utils.randInt(512); + const tier = tierValue >= 156 ? PoolTier.COMMON : tierValue >= 32 ? PoolTier.UNCOMMON : tierValue >= 6 ? PoolTier.RARE : tierValue >= 1 ? PoolTier.SUPER_RARE : PoolTier.ULTRA_RARE; + const tierPool = this.pokemonPool[tier]; + let ret: PokemonSpecies; + if (!tierPool.length) + ret = this.scene.randomSpecies(); + else { + const species = tierPool[Utils.randInt(tierPool.length)]; + ret = species instanceof PokemonSpecies ? species : getPokemonSpecies(species); + } + const newSpeciesId = ret.getSpeciesForLevel(5); + if (newSpeciesId !== ret.speciesId) { + console.log('Replaced', Species[ret.speciesId], 'with', Species[newSpeciesId]); + ret = getPokemonSpecies(newSpeciesId); + } + return ret; + } + + playBgm() { + this.scene.loadBgm(this.bgm); + this.scene.load.once(Phaser.Loader.Events.COMPLETE, () => this.scene.playBgm(this.bgm)); + } +} + +const biomePools = { + [Biome.PLAINS]: { + [PoolTier.COMMON]: [ + Species.CATERPIE, Species.METAPOD, Species.WEEDLE, Species.KAKUNA, Species.PIDGEY, Species.RATTATA, Species.SPEAROW, Species.SENTRET, Species.HOOTHOOT, Species.LEDYBA, + Species.HOPPIP, Species.SUNKERN, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.SILCOON, Species.CASCOON, Species.TAILLOW, Species.STARLY, Species.BIDOOF, + Species.KRICKETOT, Species.PATRAT, Species.LILLIPUP, Species.PIDOVE, Species.COTTONEE, Species.PETILIL, Species.MINCCINO, Species.FOONGUS + ], + [PoolTier.UNCOMMON]: [ + Species.EKANS, Species.NIDORAN_F, Species.NIDORAN_M, Species.ODDISH, Species.PARAS, Species.VENONAT, Species.MEOWTH, Species.BELLSPROUT, Species.PICHU, Species.IGGLYBUFF, + Species.LOTAD, Species.SEEDOT, Species.SHROOMISH, Species.NINCADA, Species.AZURILL, Species.WHISMUR, Species.SKITTY, Species.BUDEW, Species.COMBEE, Species.CHERUBI, + Species.VENIPEDE + ], + [PoolTier.RARE]: [ Species.ABRA, Species.CLEFFA, Species.WOOPER, Species.RALTS, Species.SURSKIT, Species.SLAKOTH, Species.DUCKLETT ], + [PoolTier.SUPER_RARE]: [ Species.EEVEE, Species.TOGEPI, Species.SMEARGLE, Species.TYROGUE, Species.WYNAUT ], + [PoolTier.ULTRA_RARE]: [ Species.DITTO ] + } +}; + +const biomePoolPredicates = { + [Biome.PLAINS]: (p, t) => { + if (p.isOfType(Type.GHOST) || p.isOfType(Type.STEEL) || p.isOfType(Type.ICE) || p.isOfType(Type.DRAGON)) + return false; + for (let s in p.baseStats) { + let threshold: integer; + const stat = parseInt(s); + switch (stat) { + case Stat.HP: + threshold = 70; + break; + default: + threshold = 60; + break; + } + if (p.baseStats[s] > threshold) { + if (p.baseTotal <= 300 && p.baseExp <= 75 && (p.isOfType(Type.NORMAL) || p.isOfType(Type.BUG) || p.isOfType(Type.GRASS))) + return true; + return false; + } + } + return p.baseTotal <= 320 && p.baseExp <= 75; + }, + [Biome.GRASS]: (p, t) => { + switch (t) { + case PoolTier.SUPER_RARE: + return [ Species.ENTEI, Species.SUICUNE, Species.RAIKOU, Species.LATIOS, Species.LATIAS ].map(s => getPokemonSpecies(s)); + case PoolTier.ULTRA_RARE: + return [ Species.MEW ].map(s => getPokemonSpecies(s)); + } + return p.isOfType(Type.NORMAL) || p.isOfType(Type.FAIRY) || p.isOfType(Type.GRASS) || p.isOfType(Type.BUG) || p.isOfType(Type.ELECTRIC); + }, + [Biome.FOREST]: (p, t) => { + switch (t) { + case PoolTier.ULTRA_RARE: + return getPokemonSpecies(Species.CELEBI); + } + return p.isOfType(Type.GRASS) || p.isOfType(Type.BUG) || p.isOfType(Type.POISON); + }, + [Biome.WATER]: (p, t) => { + switch (t) { + case PoolTier.SUPER_RARE: + return [ Species.UXIE, Species.MESPRIT, Species.AZELF ].map(s => getPokemonSpecies(s)); + } + return p.isOfType(Type.WATER) + }, + [Biome.SWAMP]: (p, t) => { + return p.isOfType(Type.GRASS) || p.isOfType(Type.WATER) || p.isOfType(Type.POISON); + }, + [Biome.SEA]: (p, t) => { + switch (t) { + case PoolTier.SUPER_RARE: + return [ Species.KYOGRE ].map(s => getPokemonSpecies(s)); + case PoolTier.ULTRA_RARE: + return [ Species.LUGIA ].map(s => getPokemonSpecies(s)); + } + return p.isOfType(Type.WATER); + }, + [Biome.MOUNTAIN]: (p, t) => { + switch (t) { + case PoolTier.SUPER_RARE: + return [ Species.ARTICUNO, Species.ZAPDOS, Species.MOLTRES ].map(s => getPokemonSpecies(s)); + break; + case PoolTier.ULTRA_RARE: + return [ Species.HO_OH, Species.RAYQUAZA ].map(s => getPokemonSpecies(s)); + } + return p.isOfType(Type.FLYING) || p.isOfType(Type.GROUND) || p.isOfType(Type.ROCK) || p.isOfType(Type.ELECTRIC) || p.isOfType(Type.STEEL); + }, + [Biome.LAND]: (p, t) => { + switch (t) { + case PoolTier.SUPER_RARE: + return [ Species.GROUDON ].map(s => getPokemonSpecies(s)); + } + return p.isOfType(Type.GROUND); + }, + [Biome.CAVE]: (p, t) => { + switch (t) { + case PoolTier.SUPER_RARE: + return [ Species.REGIROCK, Species.REGICE, Species.REGISTEEL ].map(s => getPokemonSpecies(s)); + case PoolTier.ULTRA_RARE: + return [ Species.MEWTWO, Species.REGIGIGAS ].map(s => getPokemonSpecies(s)); + } + return p.isOfType(Type.ROCK); + }, + [Biome.DESERT]: (p, t) => { + return p.isOfType(Type.GROUND) || p.isOfType(Type.ROCK); + }, + [Biome.ICE_CAVE]: (p, t) => { + return p.isOfType(Type.ICE); + }, + [Biome.MEADOW]: (p, t) => { + return p.isOfType(Type.FAIRY); + }, + [Biome.POWER_PLANT]: (p, t) => { + return p.isOfType(Type.ELECTRIC); + }, + [Biome.VOLCANO]: (p, t) => { + return p.isOfType(Type.FIRE); + }, + [Biome.GRAVEYARD]: (p, t) => { + return p.isOfType(Type.GHOST); + }, + [Biome.DOJO]: (p, t) => { + return p.isOfType(Type.FIGHTING); + }, + [Biome.RUINS]: (p, t) => { + return p.isOfType(Type.PSYCHIC); + }, + [Biome.WASTELAND]: (p, t) => { + return p.isOfType(Type.DRAGON); + }, + [Biome.ABYSS]: (p, t) => { + return p.isOfType(Type.DARK); + }, + [Biome.SPACE]: (p, t) => { + return p.isOfType(Type.PSYCHIC); + } +}; + +const pokemonBiomes = [ + [ Species.BULBASAUR, Type.GRASS, Type.POISON, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.IVYSAUR, Type.GRASS, Type.POISON, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.VENUSAUR, Type.GRASS, Type.POISON, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.CHARMANDER, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.CHARMELEON, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.CHARIZARD, Type.FIRE, Type.FLYING, [ + [ Biome.VOLCANO, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SQUIRTLE, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.RARE ] + ] + ], + [ Species.WARTORTLE, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.RARE ] + ] + ], + [ Species.BLASTOISE, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.RARE ], + [ Biome.WATER, PoolTier.BOSS_RARE ] + ] + ], + [ Species.CATERPIE, Type.BUG, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ] + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.METAPOD, Type.BUG, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ] + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.BUTTERFREE, Type.BUG, Type.FLYING, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.WEEDLE, Type.BUG, Type.POISON, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.KAKUNA, Type.BUG, Type.POISON, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.BEEDRILL, Type.BUG, Type.POISON, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.PIDGEY, Type.NORMAL, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.PIDGEOTTO, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.PIDGEOT, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.BOSS ] + ] + ], + [ Species.RATTATA, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.RATICATE, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.SPEAROW, Type.NORMAL, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.FEAROW, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.BOSS ] + ] + ], + [ Species.EKANS, Type.POISON, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.ARBOK, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.BOSS ] + ] + ], + [ Species.PIKACHU, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.RAICHU, Type.ELECTRIC, -1, [ + [ Biome.POWER_PLANT, PoolTier.BOSS ], + ] + ], + [ Species.SANDSHREW, Type.GROUND, -1, [ + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.SANDSLASH, Type.GROUND, -1, [ + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.BOSS ] + ] + ], + [ Species.NIDORAN_F, Type.POISON, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.NIDORINA, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.NIDOQUEEN, Type.POISON, Type.GROUND, [ + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.NIDORAN_M, Type.POISON, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.NIDORINO, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.NIDOKING, Type.POISON, Type.GROUND, [ + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.CLEFAIRY, Type.FAIRY, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.MEADOW, PoolTier.UNCOMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.CLEFABLE, Type.FAIRY, -1, [ + [ Biome.MEADOW, PoolTier.BOSS_RARE ], + [ Biome.SPACE, PoolTier.BOSS ], + ] + ], + [ Species.VULPIX, Type.FIRE, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.NINETALES, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.BOSS ] + ] + ], + [ Species.JIGGLYPUFF, Type.NORMAL, Type.FAIRY, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.MEADOW, PoolTier.COMMON ] + ] + ], + [ Species.WIGGLYTUFF, Type.NORMAL, Type.FAIRY, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.MEADOW, PoolTier.COMMON ], + [ Biome.MEADOW, PoolTier.BOSS ] + ] + ], + [ Species.ZUBAT, Type.POISON, Type.FLYING, [ + [ Biome.CAVE, PoolTier.COMMON ] + ] + ], + [ Species.GOLBAT, Type.POISON, Type.FLYING, [ + [ Biome.CAVE, PoolTier.COMMON ] + ] + ], + [ Species.ODDISH, Type.GRASS, Type.POISON, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.GLOOM, Type.GRASS, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.VILEPLUME, Type.GRASS, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.PARAS, Type.BUG, Type.GRASS, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.PARASECT, Type.BUG, Type.GRASS, [ + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.VENONAT, Type.BUG, Type.POISON, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.VENOMOTH, Type.BUG, Type.POISON, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.DIGLETT, Type.GROUND, -1, [ + [ Biome.LAND, PoolTier.COMMON ] + ] + ], + [ Species.DUGTRIO, Type.GROUND, -1, [ + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.BOSS ] + ] + ], + [ Species.MEOWTH, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.PERSIAN, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.PSYDUCK, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ] + ] + ], + [ Species.GOLDUCK, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.WATER, PoolTier.BOSS ] + ] + ], + [ Species.MANKEY, Type.FIGHTING, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.PRIMEAPE, Type.FIGHTING, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.DOJO, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.BOSS ] + ] + ], + [ Species.GROWLITHE, Type.FIRE, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.UNCOMMON ] + ] + ], + [ Species.ARCANINE, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.BOSS ] + ] + ], + [ Species.POLIWAG, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ] + ] + ], + [ Species.POLIWHIRL, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ] + ] + ], + [ Species.POLIWRATH, Type.WATER, Type.FIGHTING, [ + [ Biome.WATER, PoolTier.BOSS ] + ] + ], + [ Species.ABRA, Type.PSYCHIC, -1, [ + [ Biome.PLAINS, PoolTier.RARE ], + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.RUINS, PoolTier.UNCOMMON ] + ] + ], + [ Species.KADABRA, Type.PSYCHIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.RUINS, PoolTier.UNCOMMON ] + ] + ], + [ Species.ALAKAZAM, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.BOSS ] + ] + ], + [ Species.MACHOP, Type.FIGHTING, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.MACHOKE, Type.FIGHTING, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.MACHAMP, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.BOSS ] + ] + ], + [ Species.BELLSPROUT, Type.GRASS, Type.POISON, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.WEEPINBELL, Type.GRASS, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.VICTREEBEL, Type.GRASS, Type.POISON, [ + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.TENTACOOL, Type.WATER, Type.POISON, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.TENTACRUEL, Type.WATER, Type.POISON, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.GEODUDE, Type.ROCK, Type.GROUND, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.UNCOMMON ] + ] + ], + [ Species.GRAVELER, Type.ROCK, Type.GROUND, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.UNCOMMON ] + ] + ], + [ Species.GOLEM, Type.ROCK, Type.GROUND, [ + [ Biome.MOUNTAIN, PoolTier.BOSS ], + [ Biome.LAND, PoolTier.BOSS ] + ] + ], + [ Species.PONYTA, Type.FIRE, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ] + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.RAPIDASH, Type.FIRE, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ] + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.VOLCANO, PoolTier.BOSS ] + ] + ], + [ Species.SLOWPOKE, Type.WATER, Type.PSYCHIC, [ + [ Biome.WATER, PoolTier.UNCOMMON ] + ] + ], + [ Species.SLOWBRO, Type.WATER, Type.PSYCHIC, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.WATER, PoolTier.BOSS ] + ] + ], + [ Species.MAGNEMITE, Type.ELECTRIC, Type.STEEL, [ + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.MAGNETON, Type.ELECTRIC, Type.STEEL, [ + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.FARFETCHD, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.DODUO, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.DODRIO, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.SEEL, Type.WATER, -1, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.DEWGONG, Type.WATER, Type.ICE, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ], + [ Biome.ICE_CAVE, PoolTier.BOSS ] + ] + ], + [ Species.GRIMER, Type.POISON, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.MUK, Type.POISON, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.SHELLDER, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.CLOYSTER, Type.WATER, Type.ICE, [ + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.GASTLY, Type.GHOST, Type.POISON, [ + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.HAUNTER, Type.GHOST, Type.POISON, [ + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.GENGAR, Type.GHOST, Type.POISON, [ + [ Biome.GRAVEYARD, PoolTier.BOSS ] + ] + ], + [ Species.ONIX, Type.ROCK, Type.GROUND, [ + [ Biome.LAND, PoolTier.UNCOMMON ], + [ Biome.CAVE, PoolTier.RARE ] + ] + ], + [ Species.DROWZEE, Type.PSYCHIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.RUINS, PoolTier.COMMON ] + ] + ], + [ Species.HYPNO, Type.PSYCHIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.RUINS, PoolTier.BOSS ] + ] + ], + [ Species.KRABBY, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.KINGLER, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.VOLTORB, Type.ELECTRIC, -1, [ + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.ELECTRODE, Type.ELECTRIC, -1, [ + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.EXEGGCUTE, Type.GRASS, Type.PSYCHIC, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.EXEGGUTOR, Type.GRASS, Type.PSYCHIC, [ + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.CUBONE, Type.GROUND, -1, [ + [ Biome.LAND, PoolTier.UNCOMMON ], + [ Biome.GRAVEYARD, PoolTier.UNCOMMON ] + ] + ], + [ Species.MAROWAK, Type.GROUND, -1, [ + [ Biome.LAND, PoolTier.UNCOMMON ], + [ Biome.GRAVEYARD, PoolTier.UNCOMMON ], + [ Biome.LAND, PoolTier.BOSS ] + ] + ], + [ Species.HITMONLEE, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.RARE ], + [ Biome.DOJO, PoolTier.BOSS ] + ] + ], + [ Species.HITMONCHAN, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.RARE ], + [ Biome.DOJO, PoolTier.BOSS ] + ] + ], + [ Species.LICKITUNG, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.KOFFING, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.WEEZING, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.BOSS ] + ] + ], + [ Species.RHYHORN, Type.GROUND, Type.ROCK, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ], + [ Biome.LAND, PoolTier.COMMON ] + ] + ], + [ Species.RHYDON, Type.GROUND, Type.ROCK, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ], + [ Biome.LAND, PoolTier.COMMON ] + ] + ], + [ Species.CHANSEY, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.MEADOW, PoolTier.SUPER_RARE ] + ] + ], + [ Species.TANGELA, Type.GRASS, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.KANGASKHAN, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.HORSEA, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.SEADRA, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.GOLDEEN, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.SEAKING, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.STARYU, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.STARMIE, Type.WATER, Type.PSYCHIC, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.MR_MIME, Type.PSYCHIC, Type.FAIRY, [ + [ Biome.RUINS, PoolTier.RARE ], + [ Biome.RUINS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SCYTHER, Type.BUG, Type.FLYING, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.JYNX, Type.ICE, Type.PSYCHIC, [ + [ Biome.ICE_CAVE, PoolTier.RARE ], + [ Biome.ICE_CAVE, PoolTier.BOSS_RARE ] + ] + ], + [ Species.ELECTABUZZ, Type.ELECTRIC, -1, [ + [ Biome.POWER_PLANT, PoolTier.RARE ] + ] + ], + [ Species.MAGMAR, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.PINSIR, Type.BUG, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.TAUROS, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.MEADOW, PoolTier.UNCOMMON ], + [ Biome.MEADOW, PoolTier.BOSS ] + ] + ], + [ Species.MAGIKARP, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.GYARADOS, Type.WATER, Type.FLYING, [ + [ Biome.WATER, PoolTier.BOSS ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.LAPRAS, Type.WATER, Type.ICE, [ + [ Biome.SEA, PoolTier.RARE ] + ] + ], + [ Species.DITTO, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.ULTRA_RARE ], + [ Biome.GRASS, PoolTier.ULTRA_RARE ] + ] + ], + [ Species.EEVEE, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.MEADOW, PoolTier.RARE ] + ] + ], + [ Species.VAPOREON, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.SUPER_RARE ], + [ Biome.WATER, PoolTier.BOSS_RARE ] + ] + ], + [ Species.JOLTEON, Type.ELECTRIC, -1, [ + [ Biome.POWER_PLANT, PoolTier.SUPER_RARE ], + [ Biome.POWER_PLANT, PoolTier.BOSS_RARE ] + ] + ], + [ Species.FLAREON, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.SUPER_RARE ], + [ Biome.VOLCANO, PoolTier.BOSS_RARE ] + ] + ], + [ Species.PORYGON, Type.NORMAL, -1, [ + [ Biome.SPACE, PoolTier.SUPER_RARE ] + ] + ], + [ Species.OMANYTE, Type.ROCK, Type.WATER, [ + [ Biome.SEA, PoolTier.SUPER_RARE ] + ] + ], + [ Species.OMASTAR, Type.ROCK, Type.WATER, [ + [ Biome.SEA, PoolTier.SUPER_RARE ], + [ Biome.SEA, PoolTier.BOSS_RARE ] + ] + ], + [ Species.KABUTO, Type.ROCK, Type.WATER, [ + [ Biome.SEA, PoolTier.SUPER_RARE ] + ] + ], + [ Species.KABUTOPS, Type.ROCK, Type.WATER, [ + [ Biome.SEA, PoolTier.SUPER_RARE ], + [ Biome.SEA, PoolTier.BOSS_RARE ] + ] + ], + [ Species.AERODACTYL, Type.ROCK, Type.FLYING, [ + [ Biome.WASTELAND, PoolTier.SUPER_RARE ], + [ Biome.WASTELAND, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SNORLAX, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.ARTICUNO, Type.ICE, Type.FLYING, [ + [ Biome.ICE_CAVE, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.ZAPDOS, Type.ELECTRIC, Type.FLYING, [ + [ Biome.POWER_PLANT, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.MOLTRES, Type.FIRE, Type.FLYING, [ + [ Biome.VOLCANO, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.DRATINI, Type.DRAGON, -1, [ + [ Biome.WASTELAND, PoolTier.RARE ] + ] + ], + [ Species.DRAGONAIR, Type.DRAGON, -1, [ + [ Biome.WASTELAND, PoolTier.RARE ] + ] + ], + [ Species.DRAGONITE, Type.DRAGON, Type.FLYING, [ + [ Biome.WASTELAND, PoolTier.RARE ], + [ Biome.WASTELAND, PoolTier.BOSS ] + ] + ], + [ Species.MEWTWO, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.MEW, Type.PSYCHIC, -1, [ + [ Biome.SPACE, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.CHIKORITA, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.BAYLEEF, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.MEGANIUM, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.BOSS_RARE ] + ] + ], + [ Species.CYNDAQUIL, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.QUILAVA, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.TYPHLOSION, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.BOSS_RARE ] + ] + ], + [ Species.TOTODILE, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.RARE ] + ] + ], + [ Species.CROCONAW, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.RARE ] + ] + ], + [ Species.FERALIGATR, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.RARE ], + [ Biome.WATER, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SENTRET, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.FURRET, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.HOOTHOOT, Type.NORMAL, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.NOCTOWL, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.LEDYBA, Type.BUG, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.LEDIAN, Type.BUG, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.SPINARAK, Type.BUG, Type.POISON, [ + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.ARIADOS, Type.BUG, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.CROBAT, Type.POISON, Type.FLYING, [ + [ Biome.CAVE, PoolTier.BOSS ] + ] + ], + [ Species.CHINCHOU, Type.WATER, Type.ELECTRIC, [ + [ Biome.SEA, PoolTier.UNCOMMON ] + ] + ], + [ Species.LANTURN, Type.WATER, Type.ELECTRIC, [ + [ Biome.SEA, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.PICHU, Type.ELECTRIC, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ] + ] + ], + [ Species.CLEFFA, Type.FAIRY, -1, [ + [ Biome.PLAINS, PoolTier.RARE ] + ] + ], + [ Species.IGGLYBUFF, Type.NORMAL, Type.FAIRY, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ] + ] + ], + [ Species.TOGEPI, Type.FAIRY, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.TOGETIC, Type.FAIRY, Type.FLYING, [ + [ Biome.MEADOW, PoolTier.UNCOMMON ] + ] + ], + [ Species.NATU, Type.PSYCHIC, Type.FLYING, [ + [ Biome.RUINS, PoolTier.COMMON ] + ] + ], + [ Species.XATU, Type.PSYCHIC, Type.FLYING, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.RUINS, PoolTier.BOSS ] + ] + ], + [ Species.MAREEP, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ] + ] + ], + [ Species.FLAAFFY, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ] + ] + ], + [ Species.AMPHAROS, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.BELLOSSOM, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.MARILL, Type.WATER, Type.FAIRY, [ + [ Biome.WATER, PoolTier.COMMON ] + ] + ], + [ Species.AZUMARILL, Type.WATER, Type.FAIRY, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.WATER, PoolTier.BOSS ] + ] + ], + [ Species.SUDOWOODO, Type.ROCK, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.POLITOED, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.SUPER_RARE ], + [ Biome.WATER, PoolTier.BOSS_RARE ] + ] + ], + [ Species.HOPPIP, Type.GRASS, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.SKIPLOOM, Type.GRASS, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.JUMPLUFF, Type.GRASS, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.AIPOM, Type.NORMAL, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.SUNKERN, Type.GRASS, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.SUNFLORA, Type.GRASS, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.YANMA, Type.BUG, Type.FLYING, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.WOOPER, Type.WATER, Type.GROUND, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.QUAGSIRE, Type.WATER, Type.GROUND, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.BOSS ] + ] + ], + [ Species.ESPEON, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.SUPER_RARE ], + [ Biome.RUINS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.UMBREON, Type.DARK, -1, [ + [ Biome.ABYSS, PoolTier.SUPER_RARE ], + [ Biome.ABYSS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.MURKROW, Type.DARK, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.RARE ], + [ Biome.ABYSS, PoolTier.UNCOMMON ] + ] + ], + [ Species.SLOWKING, Type.WATER, Type.PSYCHIC, [ + [ Biome.WATER, PoolTier.SUPER_RARE ], + [ Biome.WATER, PoolTier.BOSS_RARE ] + ] + ], + [ Species.MISDREAVUS, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.UNCOMMON ] + ] + ], + [ Species.UNOWN, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ] + ] + ], + [ Species.WOBBUFFET, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.RARE ], + [ Biome.RUINS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.GIRAFARIG, Type.NORMAL, Type.PSYCHIC, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.PINECO, Type.BUG, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.FORRETRESS, Type.BUG, Type.STEEL, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.DUNSPARCE, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.GLIGAR, Type.GROUND, Type.FLYING, [ + [ Biome.LAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.STEELIX, Type.STEEL, Type.GROUND, [ + [ Biome.LAND, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SNUBBULL, Type.FAIRY, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.MEADOW, PoolTier.COMMON ] + ] + ], + [ Species.GRANBULL, Type.FAIRY, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.MEADOW, PoolTier.COMMON ], + [ Biome.MEADOW, PoolTier.BOSS ] + ] + ], + [ Species.QWILFISH, Type.WATER, Type.POISON, [ + [ Biome.SEA, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.SCIZOR, Type.BUG, Type.STEEL, [ + [ Biome.FOREST, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SHUCKLE, Type.BUG, Type.ROCK, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.HERACROSS, Type.BUG, Type.FIGHTING, [ + [ Biome.FOREST, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SNEASEL, Type.DARK, Type.ICE, [ + [ Biome.ICE_CAVE, PoolTier.UNCOMMON ] + ] + ], + [ Species.TEDDIURSA, Type.NORMAL, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.URSARING, Type.NORMAL, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.SLUGMA, Type.FIRE, -1, [ + [ Biome.MOUNTAIN, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.MAGCARGO, Type.FIRE, Type.ROCK, [ + [ Biome.MOUNTAIN, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.VOLCANO, PoolTier.BOSS ] + ] + ], + [ Species.SWINUB, Type.ICE, Type.GROUND, [ + [ Biome.ICE_CAVE, PoolTier.UNCOMMON ] + ] + ], + [ Species.PILOSWINE, Type.ICE, Type.GROUND, [ + [ Biome.ICE_CAVE, PoolTier.UNCOMMON] + ] + ], + [ Species.CORSOLA, Type.WATER, Type.ROCK, [ + [ Biome.SEA, PoolTier.RARE ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.REMORAID, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.OCTILLERY, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.RARE ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.DELIBIRD, Type.ICE, Type.FLYING, [ + [ Biome.ICE_CAVE, PoolTier.SUPER_RARE ] + ] + ], + [ Species.MANTINE, Type.WATER, Type.FLYING, [ + [ Biome.SEA, PoolTier.RARE ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.SKARMORY, Type.STEEL, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.RARE ], + [ Biome.MOUNTAIN, PoolTier.BOSS ] + ] + ], + [ Species.HOUNDOUR, Type.DARK, Type.FIRE, [ + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.HOUNDOOM, Type.DARK, Type.FIRE, [ + [ Biome.ABYSS, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.BOSS ] + ] + ], + [ Species.KINGDRA, Type.WATER, Type.DRAGON, [ + [ Biome.SEA, PoolTier.SUPER_RARE ], + [ Biome.SEA, PoolTier.BOSS_RARE ] + ] + ], + [ Species.PHANPY, Type.GROUND, -1, [ + [ Biome.LAND, PoolTier.COMMON ] + ] + ], + [ Species.DONPHAN, Type.GROUND, -1, [ + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.BOSS ] + ] + ], + [ Species.PORYGON2, Type.NORMAL, -1, [ + [ Biome.SPACE, PoolTier.SUPER_RARE ] + ] + ], + [ Species.STANTLER, Type.NORMAL, -1, [ + [ Biome.FOREST, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SMEARGLE, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.TYROGUE, Type.FIGHTING, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ], + [ Biome.DOJO, PoolTier.RARE ] + ] + ], + [ Species.HITMONTOP, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.SUPER_RARE ], + [ Biome.DOJO, PoolTier.BOSS_RARE ] + ] + ], + [ Species.SMOOCHUM, Type.ICE, Type.PSYCHIC, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.ELEKID, Type.ELECTRIC, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.MAGBY, Type.FIRE, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.MILTANK, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.MEADOW, PoolTier.UNCOMMON ], + [ Biome.MEADOW, PoolTier.BOSS ] + ] + ], + [ Species.BLISSEY, Type.NORMAL, -1, [ + [ Biome.MEADOW, PoolTier.BOSS_RARE ] + ] + ], + [ Species.RAIKOU, Type.ELECTRIC, -1, [ + [ Biome.POWER_PLANT, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.ENTEI, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.SUICUNE, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.LARVITAR, Type.ROCK, Type.GROUND, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ], + [ Biome.WASTELAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.PUPITAR, Type.ROCK, Type.GROUND, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ], + [ Biome.WASTELAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.TYRANITAR, Type.ROCK, Type.DARK, [ + [ Biome.MOUNTAIN, PoolTier.BOSS_RARE ], + [ Biome.WASTELAND, PoolTier.BOSS ] + ] + ], + [ Species.LUGIA, Type.PSYCHIC, Type.FLYING, [ + [ Biome.SEA, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.HO_OH, Type.FIRE, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.CELEBI, Type.PSYCHIC, Type.GRASS, [ + [ Biome.FOREST, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.TREECKO, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.GROVYLE, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.SCEPTILE, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.BOSS_RARE ] + ] + ], + [ Species.TORCHIC, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.COMBUSKEN, Type.FIRE, Type.FIGHTING, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.BLAZIKEN, Type.FIRE, Type.FIGHTING, [ + [ Biome.VOLCANO, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.BOSS_RARE ] + ] + ], + [ Species.MUDKIP, Type.WATER, -1, [ + [ Biome.SWAMP, PoolTier.UNCOMMON ] + ] + ], + [ Species.MARSHTOMP, Type.WATER, Type.GROUND, [ + [ Biome.SWAMP, PoolTier.UNCOMMON ] + ] + ], + [ Species.SWAMPERT, Type.WATER, Type.GROUND, [ + [ Biome.SWAMP, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.BOSS_RARE ] + ] + ], + [ Species.POOCHYENA, Type.DARK, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.MIGHTYENA, Type.DARK, -1, [ + [ Biome.ABYSS, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.BOSS ] + ] + ], + [ Species.ZIGZAGOON, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.LINOONE, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.WURMPLE, Type.BUG, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.SILCOON, Type.BUG, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.BEAUTIFLY, Type.BUG, Type.FLYING, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.CASCOON, Type.BUG, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.DUSTOX, Type.BUG, Type.POISON, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.LOTAD, Type.WATER, Type.GRASS, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.LOMBRE, Type.WATER, Type.GRASS, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.LUDICOLO, Type.WATER, Type.GRASS, [ + [ Biome.SWAMP, PoolTier.BOSS ] + ] + ], + [ Species.SEEDOT, Type.GRASS, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.NUZLEAF, Type.GRASS, Type.DARK, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.SHIFTRY, Type.GRASS, Type.DARK, [ + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.TAILLOW, Type.NORMAL, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.SWELLOW, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.BOSS ] + ] + ], + [ Species.WINGULL, Type.WATER, Type.FLYING, [ + [ Biome.WATER, PoolTier.COMMON ] + ] + ], + [ Species.PELIPPER, Type.WATER, Type.FLYING, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.WATER, PoolTier.BOSS ] + ] + ], + [ Species.RALTS, Type.PSYCHIC, Type.FAIRY, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.MEADOW, PoolTier.UNCOMMON ] + ] + ], + [ Species.KIRLIA, Type.PSYCHIC, Type.FAIRY, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.MEADOW, PoolTier.UNCOMMON ] + ] + ], + [ Species.GARDEVOIR, Type.PSYCHIC, Type.FAIRY, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.MEADOW, PoolTier.UNCOMMON ], + [ Biome.MEADOW, PoolTier.BOSS ] + ] + ], + [ Species.SURSKIT, Type.BUG, Type.WATER, [ + [ Biome.PLAINS, PoolTier.RARE ], + [ Biome.WATER, PoolTier.UNCOMMON ] + ] + ], + [ Species.MASQUERAIN, Type.BUG, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.RARE ], + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.WATER, PoolTier.BOSS ] + ] + ], + [ Species.SHROOMISH, Type.GRASS, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.BRELOOM, Type.GRASS, Type.FIGHTING, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.SLAKOTH, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.VIGOROTH, Type.NORMAL, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.SLAKING, Type.NORMAL, -1, [ + [ Biome.FOREST, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.BOSS_RARE ] + ] + ], + [ Species.NINCADA, Type.BUG, Type.GROUND, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.NINJASK, Type.BUG, Type.FLYING, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.SHEDINJA, Type.BUG, Type.GHOST, [ + [ Biome.FOREST, PoolTier.SUPER_RARE ] + ] + ], + [ Species.WHISMUR, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ] + ] + ], + [ Species.LOUDRED, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ] + ] + ], + [ Species.EXPLOUD, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.MAKUHITA, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.HARIYAMA, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.BOSS ] + ] + ], + [ Species.AZURILL, Type.NORMAL, Type.FAIRY, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ] + ] + ], + [ Species.NOSEPASS, Type.ROCK, -1, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ] + ] + ], + [ Species.SKITTY, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ] + ] + ], + [ Species.DELCATTY, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.SABLEYE, Type.DARK, Type.GHOST, [ + [ Biome.ABYSS, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.BOSS ] + ] + ], + [ Species.MAWILE, Type.STEEL, Type.FAIRY, [ + [ Biome.CAVE, PoolTier.UNCOMMON ], + [ Biome.CAVE, PoolTier.BOSS ] + ] + ], + [ Species.ARON, Type.STEEL, Type.ROCK, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ] + ] + ], + [ Species.LAIRON, Type.STEEL, Type.ROCK, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ] + ] + ], + [ Species.AGGRON, Type.STEEL, Type.ROCK, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ], + [ Biome.MOUNTAIN, PoolTier.BOSS ] + ] + ], + [ Species.MEDITITE, Type.FIGHTING, Type.PSYCHIC, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.MEDICHAM, Type.FIGHTING, Type.PSYCHIC, [ + [ Biome.DOJO, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.BOSS ] + ] + ], + [ Species.ELECTRIKE, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.MANECTRIC, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.POWER_PLANT, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.BOSS ] + ] + ], + [ Species.PLUSLE, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.POWER_PLANT, PoolTier.UNCOMMON ] + ] + ], + [ Species.MINUN, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.POWER_PLANT, PoolTier.UNCOMMON ] + ] + ], + [ Species.VOLBEAT, Type.BUG, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.ILLUMISE, Type.BUG, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.ROSELIA, Type.GRASS, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.GULPIN, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.SWALOT, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.BOSS ] + ] + ], + [ Species.CARVANHA, Type.WATER, Type.DARK, [ + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.SHARPEDO, Type.WATER, Type.DARK, [ + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.WAILMER, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.UNCOMMON ] + ] + ], + [ Species.WAILORD, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.SUPER_RARE ], + [ Biome.SEA, PoolTier.BOSS_RARE ] + ] + ], + [ Species.NUMEL, Type.FIRE, Type.GROUND, [ + [ Biome.LAND, PoolTier.UNCOMMON ], + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.CAMERUPT, Type.FIRE, Type.GROUND, [ + [ Biome.LAND, PoolTier.UNCOMMON ], + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.VOLCANO, PoolTier.BOSS ] + ] + ], + [ Species.TORKOAL, Type.FIRE, -1, [ + [ Biome.LAND, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.UNCOMMON ], + [ Biome.VOLCANO, PoolTier.BOSS ] + ] + ], + [ Species.SPOINK, Type.PSYCHIC, -1, [ + [ Biome.MOUNTAIN, PoolTier.RARE ], + [ Biome.RUINS, PoolTier.UNCOMMON ] + ] + ], + [ Species.GRUMPIG, Type.PSYCHIC, -1, [ + [ Biome.MOUNTAIN, PoolTier.RARE ], + [ Biome.RUINS, PoolTier.UNCOMMON ], + [ Biome.RUINS, PoolTier.BOSS ] + ] + ], + [ Species.SPINDA, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE] + ] + ], + [ Species.TRAPINCH, Type.GROUND, -1, [ + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.VIBRAVA, Type.GROUND, Type.DRAGON, [ + [ Biome.DESERT, PoolTier.RARE ], + [ Biome.WASTELAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.FLYGON, Type.GROUND, Type.DRAGON, [ + [ Biome.DESERT, PoolTier.RARE ], + [ Biome.WASTELAND, PoolTier.UNCOMMON ], + [ Biome.WASTELAND, PoolTier.BOSS ] + ] + ], + [ Species.CACNEA, Type.GRASS, -1, [ + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.CACTURNE, Type.GRASS, Type.DARK, [ + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.BOSS ] + ] + ], + [ Species.SWABLU, Type.NORMAL, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ] + ] + ], + [ Species.ALTARIA, Type.DRAGON, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.UNCOMMON ] + [ Biome.WASTELAND, PoolTier.COMMON ], + [ Biome.WASTELAND, PoolTier.BOSS ] + ] + ], + [ Species.ZANGOOSE, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.SEVIPER, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.LUNATONE, Type.ROCK, Type.PSYCHIC, [ + [ Biome.SPACE, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.BOSS ] + ] + ], + [ Species.SOLROCK, Type.ROCK, Type.PSYCHIC, [ + [ Biome.SPACE, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.BOSS ] + ] + ], + [ Species.BARBOACH, Type.WATER, Type.GROUND, [ + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.UNCOMMON ] + ] + ], + [ Species.WHISCASH, Type.WATER, Type.GROUND, [ + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.UNCOMMON ], + [ Biome.SWAMP, PoolTier.BOSS ] + ] + ], + [ Species.CORPHISH, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.CRAWDAUNT, Type.WATER, Type.DARK, [ + [ Biome.WATER, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.BALTOY, Type.GROUND, Type.PSYCHIC, [ + [ Biome.DESERT, PoolTier.UNCOMMON ], + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.CLAYDOL, Type.GROUND, Type.PSYCHIC, [ + [ Biome.DESERT, PoolTier.UNCOMMON ], + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.RUINS, PoolTier.BOSS ] + [ Biome.SPACE, PoolTier.UNCOMMON ] + ] + ], + [ Species.LILEEP, Type.ROCK, Type.GRASS, [ + [ Biome.DESERT, PoolTier.SUPER_RARE ] + ] + ], + [ Species.CRADILY, Type.ROCK, Type.GRASS, [ + [ Biome.DESERT, PoolTier.SUPER_RARE ], + [ Biome.DESERT, PoolTier.BOSS_RARE ] + ] + ], + [ Species.ANORITH, Type.ROCK, Type.BUG, [ + [ Biome.DESERT, PoolTier.SUPER_RARE ] + ] + ], + [ Species.ARMALDO, Type.ROCK, Type.BUG, [ + [ Biome.DESERT, PoolTier.SUPER_RARE ], + [ Biome.DESERT, PoolTier.BOSS_RARE ] + ] + ], + [ Species.FEEBAS, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.ULTRA_RARE ] + ] + ], + [ Species.MILOTIC, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.CASTFORM, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.SUPER_RARE ], + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.KECLEON, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.GRASS, PoolTier.BOSS ] + ] + ], + [ Species.SHUPPET, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.BANETTE, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.COMMON ], + [ Biome.GRAVEYARD, PoolTier.BOSS ] + ] + ], + [ Species.DUSKULL, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.DUSCLOPS, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.TROPIUS, Type.GRASS, Type.FLYING, [ + [ Biome.FOREST, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.CHIMECHO, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.UNCOMMON ], + [ Biome.SPACE, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.BOSS ] + ] + ], + [ Species.ABSOL, Type.DARK, -1, [ + [ Biome.ABYSS, PoolTier.RARE ], + [ Biome.ABYSS, PoolTier.BOSS ] + ] + ], + [ Species.WYNAUT, Type.PSYCHIC, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.SNORUNT, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.UNCOMMON ] + ] + ], + [ Species.GLALIE, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.UNCOMMON ], + [ Biome.ICE_CAVE, PoolTier.BOSS ] + ] + ], + [ Species.SPHEAL, Type.ICE, Type.WATER, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.SEALEO, Type.ICE, Type.WATER, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.WALREIN, Type.ICE, Type.WATER, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ], + [ Biome.ICE_CAVE, PoolTier.BOSS ] + ] + ], + [ Species.CLAMPERL, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.HUNTAIL, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.GOREBYSS, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.RELICANTH, Type.WATER, Type.ROCK, [ + [ Biome.SEA, PoolTier.SUPER_RARE ], + [ Biome.SEA, PoolTier.BOSS_RARE ] + ] + ], + [ Species.LUVDISC, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.UNCOMMON ], + [ Biome.SEA, PoolTier.BOSS ] + ] + ], + [ Species.BAGON, Type.DRAGON, -1, [ + [ Biome.WASTELAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.SHELGON, Type.DRAGON, -1, [ + [ Biome.WASTELAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.SALAMENCE, Type.DRAGON, Type.FLYING, [ + [ Biome.WASTELAND, PoolTier.UNCOMMON ], + [ Biome.WASTELAND, PoolTier.BOSS ] + ] + ], + [ Species.BELDUM, Type.STEEL, Type.PSYCHIC, [ + [ Biome.SPACE, PoolTier.RARE ] + ] + ], + [ Species.METANG, Type.STEEL, Type.PSYCHIC, [ + [ Biome.SPACE, PoolTier.RARE ] + ] + ], + [ Species.METAGROSS, Type.STEEL, Type.PSYCHIC, [ + [ Biome.SPACE, PoolTier.RARE ], + [ Biome.SPACE, PoolTier.BOSS_RARE ] + ] + ], + [ Species.REGIROCK, Type.ROCK, -1, [ + [ Biome.DESERT, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.REGICE, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.REGISTEEL, Type.STEEL, -1, [ + [ Biome.MOUNTAIN, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.LATIAS, Type.DRAGON, Type.PSYCHIC, [ + [ Biome.GRASS, PoolTier.ULTRA_RARE ] + ] + ], + [ Species.LATIOS, Type.DRAGON, Type.PSYCHIC, [ + [ Biome.GRASS, PoolTier.ULTRA_RARE ] + ] + ], + [ Species.KYOGRE, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.GROUDON, Type.GROUND, -1, [ + [ Biome.LAND, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.RAYQUAZA, Type.DRAGON, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.JIRACHI, Type.STEEL, Type.PSYCHIC, [ + [ Biome.SPACE, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.DEOXYS, Type.PSYCHIC, -1, [ + [ Biome.SPACE, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.TURTWIG, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.GROTLE, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.TORTERRA, Type.GRASS, Type.GROUND, [ + [ Biome.FOREST, PoolTier.RARE ], + [ Biome.FOREST, PoolTier.BOSS_RARE ] + ] + ], + [ Species.CHIMCHAR, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.MONFERNO, Type.FIRE, Type.FIGHTING, [ + [ Biome.VOLCANO, PoolTier.RARE ] + ] + ], + [ Species.INFERNAPE, Type.FIRE, Type.FIGHTING, [ + [ Biome.VOLCANO, PoolTier.RARE ], + [ Biome.VOLCANO, PoolTier.BOSS_RARE ] + ] + ], + [ Species.PIPLUP, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.RARE ] + ] + ], + [ Species.PRINPLUP, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.RARE ] + ] + ], + [ Species.EMPOLEON, Type.WATER, Type.STEEL, [ + [ Biome.WATER, PoolTier.RARE ], + [ Biome.WATER, PoolTier.BOSS_RARE ] + ] + ], + [ Species.STARLY, Type.NORMAL, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.STARAVIA, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.STARAPTOR, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.BIDOOF, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.BIBAREL, Type.NORMAL, Type.WATER, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.KRICKETOT, Type.BUG, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.KRICKETUNE, Type.BUG, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.SHINX, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.LUXIO, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.LUXRAY, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.BUDEW, Type.GRASS, Type.POISON, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ] + ] + ], + [ Species.ROSERADE, Type.GRASS, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.CRANIDOS, Type.ROCK, -1, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ] + ] + ], + [ Species.RAMPARDOS, Type.ROCK, -1, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ] + ] + ], + [ Species.SHIELDON, Type.ROCK, Type.STEEL, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ] + ] + ], + [ Species.BASTIODON, Type.ROCK, Type.STEEL, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ] + ] + ], + [ Species.BURMY, Type.BUG, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.WORMADAM, Type.BUG, Type.GRASS, [ + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.MOTHIM, Type.BUG, Type.FLYING, [ + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.COMBEE, Type.BUG, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.VESPIQUEN, Type.BUG, Type.FLYING, [ + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.PACHIRISU, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.RARE ] + [ Biome.POWER_PLANT, PoolTier.UNCOMMON ] + ] + ], + [ Species.BUIZEL, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ] + ] + ], + [ Species.FLOATZEL, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ] + ] + ], + [ Species.CHERUBI, Type.GRASS, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.CHERRIM, Type.GRASS, -1, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.UNCOMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.SHELLOS, Type.WATER, -1, [ + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.UNCOMMON ] + ] + ], + [ Species.GASTRODON, Type.WATER, Type.GROUND, [ + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.UNCOMMON ] + ] + ], + [ Species.AMBIPOM, Type.NORMAL, -1, [ + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.DRIFLOON, Type.GHOST, Type.FLYING, [ + [ Biome.GRAVEYARD, PoolTier.UNCOMMON ] + ] + ], + [ Species.DRIFBLIM, Type.GHOST, Type.FLYING, [ + [ Biome.GRAVEYARD, PoolTier.UNCOMMON ] + ] + ], + [ Species.BUNEARY, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.RARE ] + ] + ], + [ Species.LOPUNNY, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.RARE ] + ] + ], + [ Species.MISMAGIUS, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.UNCOMMON ] + ] + ], + [ Species.HONCHKROW, Type.DARK, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.RARE ], + [ Biome.ABYSS, PoolTier.UNCOMMON ] + ] + ], + [ Species.GLAMEOW, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ] + ] + ], + [ Species.PURUGLY, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.UNCOMMON ] + ] + ], + [ Species.CHINGLING, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.UNCOMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.STUNKY, Type.POISON, Type.DARK, [ + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.SKUNTANK, Type.POISON, Type.DARK, [ + [ Biome.FOREST, PoolTier.UNCOMMON ] + ] + ], + [ Species.BRONZOR, Type.STEEL, Type.PSYCHIC, [ + [ Biome.RUINS, PoolTier.UNCOMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.BRONZONG, Type.STEEL, Type.PSYCHIC, [ + [ Biome.RUINS, PoolTier.UNCOMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.BONSLY, Type.ROCK, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.MIME_JR, Type.PSYCHIC, Type.FAIRY, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.HAPPINY, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.CHATOT, Type.NORMAL, Type.FLYING, [ + [ Biome.FOREST, PoolTier.SUPER_RARE ] + ] + ], + [ Species.SPIRITOMB, Type.GHOST, Type.DARK, [ + [ Biome.GRAVEYARD, PoolTier.SUPER_RARE ], + [ Biome.ABYSS, PoolTier.RARE ] + ] + ], + [ Species.GIBLE, Type.DRAGON, Type.GROUND, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ], + [ Biome.WASTELAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.GABITE, Type.DRAGON, Type.GROUND, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ], + [ Biome.WASTELAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.GARCHOMP, Type.DRAGON, Type.GROUND, [ + [ Biome.MOUNTAIN, PoolTier.SUPER_RARE ], + [ Biome.WASTELAND, PoolTier.UNCOMMON ] + ] + ], + [ Species.MUNCHLAX, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.RIOLU, Type.FIGHTING, -1, [ + [ Biome.PLAINS, PoolTier.SUPER_RARE ] + ] + ], + [ Species.LUCARIO, Type.FIGHTING, Type.STEEL, [ + [ Biome.DOJO, PoolTier.RARE ] + ] + ], + [ Species.HIPPOPOTAS, Type.GROUND, -1, [ + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.HIPPOWDON, Type.GROUND, -1, [ + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.SKORUPI, Type.POISON, Type.BUG, [ + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.DRAPION, Type.POISON, Type.DARK, [ + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.CROAGUNK, Type.POISON, Type.FIGHTING, [ + [ Biome.SWAMP, PoolTier.UNCOMMON ], + [ Biome.DOJO, PoolTier.UNCOMMON ] + ] + ], + [ Species.TOXICROAK, Type.POISON, Type.FIGHTING, [ + [ Biome.SWAMP, PoolTier.UNCOMMON ], + [ Biome.DOJO, PoolTier.UNCOMMON ] + ] + ], + [ Species.CARNIVINE, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.FINNEON, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.LUMINEON, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.MANTYKE, Type.WATER, Type.FLYING, [ + [ Biome.SEA, PoolTier.RARE ] + ] + ], + [ Species.SNOVER, Type.GRASS, Type.ICE, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.ABOMASNOW, Type.GRASS, Type.ICE, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ], + [ Biome.ICE_CAVE, PoolTier.BOSS ] + ] + ], + [ Species.WEAVILE, Type.DARK, Type.ICE, [ + [ Biome.ICE_CAVE, PoolTier.BOSS ] + ] + ], + [ Species.MAGNEZONE, Type.ELECTRIC, Type.STEEL, [ + [ Biome.POWER_PLANT, PoolTier.BOSS ] + ] + ], + [ Species.LICKILICKY, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.BOSS_RARE ] + ] + ], + [ Species.RHYPERIOR, Type.GROUND, Type.ROCK, [ + [ Biome.LAND, PoolTier.BOSS ] + ] + ], + [ Species.TANGROWTH, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.ELECTIVIRE, Type.ELECTRIC, -1, [ + [ Biome.POWER_PLANT, PoolTier.BOSS ] + ] + ], + [ Species.MAGMORTAR, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.BOSS ] + ] + ], + [ Species.TOGEKISS, Type.FAIRY, Type.FLYING, [ + [ Biome.MEADOW, PoolTier.BOSS ] + ] + ], + [ Species.YANMEGA, Type.BUG, Type.FLYING, [ + [ Biome.FOREST, PoolTier.BOSS ] + ] + ], + [ Species.LEAFEON, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.BOSS_RARE ] + ] + ], + [ Species.GLACEON, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.BOSS_RARE ] + ] + ], + [ Species.GLISCOR, Type.GROUND, Type.FLYING, [ + [ Biome.LAND, PoolTier.BOSS ] + ] + ], + [ Species.MAMOSWINE, Type.ICE, Type.GROUND, [ + [ Biome.ICE_CAVE, PoolTier.UNCOMMON ] + ] + ], + [ Species.PORYGON_Z, Type.NORMAL, -1, [ + [ Biome.SPACE, PoolTier.SUPER_RARE ] + ] + ], + [ Species.GALLADE, Type.PSYCHIC, Type.FIGHTING, [ + [ Biome.DOJO, PoolTier.SUPER_RARE ], + [ Biome.DOJO, PoolTier.BOSS_RARE ] + ] + ], + [ Species.PROBOPASS, Type.ROCK, Type.STEEL, [ + [ Biome.MOUNTAIN, PoolTier.BOSS ] + ] + ], + [ Species.DUSKNOIR, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.BOSS ] + ] + ], + [ Species.FROSLASS, Type.ICE, Type.GHOST, [ + [ Biome.ICE_CAVE, PoolTier.RARE ], + [ Biome.ICE_CAVE, PoolTier.BOSS ] + ] + ], + [ Species.ROTOM, Type.ELECTRIC, Type.GHOST, [ + [ Biome.POWER_PLANT, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.UXIE, Type.PSYCHIC, -1, [ + [ Biome.WATER, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.MESPRIT, Type.PSYCHIC, -1, [ + [ Biome.WATER, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.AZELF, Type.PSYCHIC, -1, [ + [ Biome.WATER, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.DIALGA, Type.STEEL, Type.DRAGON, [ + [ Biome.WASTELAND, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.PALKIA, Type.WATER, Type.DRAGON, [ + [ Biome.ABYSS, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.HEATRAN, Type.FIRE, Type.STEEL, [ + [ Biome.VOLCANO, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.REGIGIGAS, Type.NORMAL, -1, [ + [ Biome.RUINS, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.GIRATINA, Type.GHOST, Type.DRAGON, [ + [ Biome.GRAVEYARD, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.CRESSELIA, Type.PSYCHIC, -1, [ + [ Biome.SPACE, PoolTier.BOSS_ULTRA_RARE ] + ] + ], + [ Species.PHIONE, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.ULTRA_RARE ] + ] + ], + [ Species.MANAPHY, Type.WATER, -1, [ + [ Biome.SEA, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.DARKRAI, Type.DARK, -1, [ + [ Biome.ABYSS, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.SHAYMIN, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.ARCEUS, Type.NORMAL, -1, [ + [ Biome.SPACE, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.VICTINI, Type.PSYCHIC, Type.FIRE, [ + [ Biome.RUINS, PoolTier.BOSS_LEGENDARY ] + ] + ], + [ Species.SNIVY, Type.GRASS, -1, [ + [ Biome.FOREST, PoolTier.RARE ] + ] + ], + [ Species.SERVINE, Type.GRASS, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.SERPERIOR, Type.GRASS, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.TEPIG, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.PIGNITE, Type.FIRE, Type.FIGHTING, [ + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.EMBOAR, Type.FIRE, Type.FIGHTING, [ + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.OSHAWOTT, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.DEWOTT, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.SAMUROTT, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.PATRAT, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.WATCHOG, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.LILLIPUP, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.HERDIER, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.STOUTLAND, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.PURRLOIN, Type.DARK, -1, [ + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.LIEPARD, Type.DARK, -1, [ + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.PANSAGE, Type.GRASS, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.SIMISAGE, Type.GRASS, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.PANSEAR, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.SIMISEAR, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.PANPOUR, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.SIMIPOUR, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.MUNNA, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.MUSHARNA, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.PIDOVE, Type.NORMAL, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.TRANQUILL, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.UNFEZANT, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.BLITZLE, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.ZEBSTRIKA, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.ROGGENROLA, Type.ROCK, -1, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.BOLDORE, Type.ROCK, -1, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.GIGALITH, Type.ROCK, -1, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.WOOBAT, Type.PSYCHIC, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.SWOOBAT, Type.PSYCHIC, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.DRILBUR, Type.GROUND, -1, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.EXCADRILL, Type.GROUND, Type.STEEL, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.AUDINO, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.TIMBURR, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.GURDURR, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.CONKELDURR, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.TYMPOLE, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.PALPITOAD, Type.WATER, Type.GROUND, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.SEISMITOAD, Type.WATER, Type.GROUND, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.THROH, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.SAWK, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.SEWADDLE, Type.BUG, Type.GRASS, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.SWADLOON, Type.BUG, Type.GRASS, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.LEAVANNY, Type.BUG, Type.GRASS, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.VENIPEDE, Type.BUG, Type.POISON, [ + [ Biome.PLAINS, PoolTier.UNCOMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.WHIRLIPEDE, Type.BUG, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.SCOLIPEDE, Type.BUG, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.COTTONEE, Type.GRASS, Type.FAIRY, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.MEADOW, PoolTier.COMMON ] + ] + ], + [ Species.WHIMSICOTT, Type.GRASS, Type.FAIRY, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.MEADOW, PoolTier.COMMON ] + ] + ], + [ Species.PETILIL, Type.GRASS, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.LILLIGANT, Type.GRASS, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.BASCULIN, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.SANDILE, Type.GROUND, Type.DARK, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.KROKOROK, Type.GROUND, Type.DARK, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.KROOKODILE, Type.GROUND, Type.DARK, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.DARUMAKA, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.DARMANITAN, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.MARACTUS, Type.GRASS, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.DWEBBLE, Type.BUG, Type.ROCK, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.CRUSTLE, Type.BUG, Type.ROCK, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.SCRAGGY, Type.DARK, Type.FIGHTING, [ + [ Biome.DOJO, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.SCRAFTY, Type.DARK, Type.FIGHTING, [ + [ Biome.DOJO, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.SIGILYPH, Type.PSYCHIC, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.YAMASK, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.COFAGRIGUS, Type.GHOST, -1, [ + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.TIRTOUGA, Type.WATER, Type.ROCK, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.CARRACOSTA, Type.WATER, Type.ROCK, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.ARCHEN, Type.ROCK, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.ARCHEOPS, Type.ROCK, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.TRUBBISH, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.GARBODOR, Type.POISON, -1, [ + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.ZORUA, Type.DARK, -1, [ + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.ZOROARK, Type.DARK, -1, [ + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.MINCCINO, Type.NORMAL, -1, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.CINCCINO, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.GOTHITA, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.GOTHORITA, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.GOTHITELLE, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.SOLOSIS, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.DUOSION, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.REUNICLUS, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.DUCKLETT, Type.WATER, Type.FLYING, [ + [ Biome.PLAINS, PoolTier.RARE ], + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.SWANNA, Type.WATER, Type.FLYING, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.VANILLITE, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.VANILLISH, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.VANILLUXE, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.DEERLING, Type.NORMAL, Type.GRASS, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.SAWSBUCK, Type.NORMAL, Type.GRASS, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.EMOLGA, Type.ELECTRIC, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.KARRABLAST, Type.BUG, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.ESCAVALIER, Type.BUG, Type.STEEL, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.FOONGUS, Type.GRASS, Type.POISON, [ + [ Biome.PLAINS, PoolTier.COMMON ], + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.AMOONGUSS, Type.GRASS, Type.POISON, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ] + ] + ], + [ Species.FRILLISH, Type.WATER, Type.GHOST, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.JELLICENT, Type.WATER, Type.GHOST, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.ALOMOMOLA, Type.WATER, -1, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ] + ] + ], + [ Species.JOLTIK, Type.BUG, Type.ELECTRIC, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.GALVANTULA, Type.BUG, Type.ELECTRIC, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.FERROSEED, Type.GRASS, Type.STEEL, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.FERROTHORN, Type.GRASS, Type.STEEL, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.KLINK, Type.STEEL, -1, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.KLANG, Type.STEEL, -1, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.KLINKLANG, Type.STEEL, -1, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.TYNAMO, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.EELEKTRIK, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.EELEKTROSS, Type.ELECTRIC, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.ELGYEM, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.BEHEEYEM, Type.PSYCHIC, -1, [ + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.LITWICK, Type.GHOST, Type.FIRE, [ + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.LAMPENT, Type.GHOST, Type.FIRE, [ + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.CHANDELURE, Type.GHOST, Type.FIRE, [ + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.AXEW, Type.DRAGON, -1, [ + [ Biome.WASTELAND, PoolTier.COMMON ] + ] + ], + [ Species.FRAXURE, Type.DRAGON, -1, [ + [ Biome.WASTELAND, PoolTier.COMMON ] + ] + ], + [ Species.HAXORUS, Type.DRAGON, -1, [ + [ Biome.WASTELAND, PoolTier.COMMON ] + ] + ], + [ Species.CUBCHOO, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.BEARTIC, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.CRYOGONAL, Type.ICE, -1, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ] + ] + ], + [ Species.SHELMET, Type.BUG, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.ACCELGOR, Type.BUG, -1, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ] + ] + ], + [ Species.STUNFISK, Type.GROUND, Type.ELECTRIC, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.MIENFOO, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.MIENSHAO, Type.FIGHTING, -1, [ + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.DRUDDIGON, Type.DRAGON, -1, [ + [ Biome.WASTELAND, PoolTier.COMMON ] + ] + ], + [ Species.GOLETT, Type.GROUND, Type.GHOST, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.GOLURK, Type.GROUND, Type.GHOST, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.GRAVEYARD, PoolTier.COMMON ] + ] + ], + [ Species.PAWNIARD, Type.DARK, Type.STEEL, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.BISHARP, Type.DARK, Type.STEEL, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.BOUFFALANT, Type.NORMAL, -1, [ + [ Biome.GRASS, PoolTier.COMMON ] + ] + ], + [ Species.RUFFLET, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.BRAVIARY, Type.NORMAL, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.VULLABY, Type.DARK, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.MANDIBUZZ, Type.DARK, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.HEATMOR, Type.FIRE, -1, [ + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.DURANT, Type.BUG, Type.STEEL, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.DEINO, Type.DARK, Type.DRAGON, [ + [ Biome.WASTELAND, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.ZWEILOUS, Type.DARK, Type.DRAGON, [ + [ Biome.WASTELAND, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.HYDREIGON, Type.DARK, Type.DRAGON, [ + [ Biome.WASTELAND, PoolTier.COMMON ], + [ Biome.ABYSS, PoolTier.COMMON ] + ] + ], + [ Species.LARVESTA, Type.BUG, Type.FIRE, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.VOLCARONA, Type.BUG, Type.FIRE, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.VOLCANO, PoolTier.COMMON ] + ] + ], + [ Species.COBALION, Type.STEEL, Type.FIGHTING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.TERRAKION, Type.ROCK, Type.FIGHTING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.CAVE, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.VIRIZION, Type.GRASS, Type.FIGHTING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.TORNADUS, Type.FLYING, -1, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ], + [ Species.THUNDURUS, Type.ELECTRIC, Type.FLYING, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ] + ] + ], + [ Species.RESHIRAM, Type.DRAGON, Type.FIRE, [ + [ Biome.VOLCANO, PoolTier.COMMON ], + [ Biome.WASTELAND, PoolTier.COMMON ] + ] + ], + [ Species.ZEKROM, Type.DRAGON, Type.ELECTRIC, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.POWER_PLANT, PoolTier.COMMON ], + [ Biome.WASTELAND, PoolTier.COMMON ] + ] + ], + [ Species.LANDORUS, Type.GROUND, Type.FLYING, [ + [ Biome.MOUNTAIN, PoolTier.COMMON ], + [ Biome.LAND, PoolTier.COMMON ], + [ Biome.DESERT, PoolTier.COMMON ] + ] + ], + [ Species.KYUREM, Type.DRAGON, Type.ICE, [ + [ Biome.ICE_CAVE, PoolTier.COMMON ], + [ Biome.WASTELAND, PoolTier.COMMON ] + ] + ], + [ Species.KELDEO, Type.WATER, Type.FIGHTING, [ + [ Biome.WATER, PoolTier.COMMON ], + [ Biome.SWAMP, PoolTier.COMMON ], + [ Biome.SEA, PoolTier.COMMON ], + [ Biome.DOJO, PoolTier.COMMON ] + ] + ], + [ Species.MELOETTA, Type.NORMAL, Type.PSYCHIC, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.RUINS, PoolTier.COMMON ], + [ Biome.SPACE, PoolTier.COMMON ] + ] + ], + [ Species.GENESECT, Type.BUG, Type.STEEL, [ + [ Biome.GRASS, PoolTier.COMMON ], + [ Biome.FOREST, PoolTier.COMMON ], + [ Biome.MOUNTAIN, PoolTier.COMMON ] + ] + ] +]; + +/*for (let pokemon of allSpecies) { + if (pokemon.speciesId >= Species.XERNEAS) + break; + pokemonBiomes[pokemon.speciesId - 1][0] = Species[pokemonBiomes[pokemon.speciesId - 1][0]]; + pokemonBiomes[pokemon.speciesId - 1][1] = Type[pokemonBiomes[pokemon.speciesId - 1][1]]; + if (pokemonBiomes[pokemon.speciesId - 1][2] > -1) + pokemonBiomes[pokemon.speciesId - 1][2] = Type[pokemonBiomes[pokemon.speciesId - 1][2]]; + for (let b of Utils.getEnumValues(Biome)) { + if (biomePools.hasOwnProperty(b)) { + let poolTier = -1; + for (let t of Object.keys(biomePools[b])) { + for (let p = 0; p < biomePools[b][t].length; p++) { + if (biomePools[b][t][p] === pokemon.speciesId) { + console.log(t, pokemon.name) + poolTier = parseInt(t) as PoolTier; + break; + } + } + } + if (poolTier > -1) + pokemonBiomes[pokemon.speciesId - 1][3].push([ Biome[b], PoolTier[poolTier] ]); + } else if (biomePoolPredicates[b](pokemon)) { + pokemonBiomes[pokemon.speciesId - 1][3].push([ Biome[b], PoolTier[PoolTier.COMMON] ]); + } + } +} + +console.log(JSON.stringify(pokemonBiomes, null, ' '));*/ \ No newline at end of file diff --git a/src/modifier.ts b/src/modifier.ts index 0adaa68f8..ec2b28fcf 100644 --- a/src/modifier.ts +++ b/src/modifier.ts @@ -61,7 +61,12 @@ export abstract class Modifier { abstract apply(args: any[]): boolean; incrementStack(): void { - this.stackCount++; + if (this.stackCount < this.getMaxStackCount()) + this.stackCount++; + } + + getMaxStackCount(): integer { + return 99; } getIcon(scene: BattleScene): Phaser.GameObjects.Container { @@ -83,7 +88,7 @@ export abstract class Modifier { if (this.stackCount <= 1) return null; - const text = addTextObject(scene, 16, 12, this.stackCount.toString(), TextStyle.PARTY, { fontSize: '66px' }); + const text = addTextObject(scene, 16, 12, this.stackCount.toString(), TextStyle.PARTY, { fontSize: '66px', color: this.stackCount < this.getMaxStackCount() ? '#484848' : '#e64a18' }); text.setStroke('#424242', 16) text.setOrigin(1, 0); @@ -101,7 +106,7 @@ export abstract class ConsumableModifier extends Modifier { } shouldApply(args: any[]): boolean { - return args.length === 1 && args[0] instanceof BattleScene; + return super.shouldApply(args) && args.length === 1 && args[0] instanceof BattleScene; } } @@ -134,7 +139,7 @@ export abstract class PokemonModifier extends Modifier { } shouldApply(args: any[]): boolean { - return args.length && args[0] === this.pokemonId; + return super.shouldApply(args) && args.length && args[0] instanceof Pokemon && (this.pokemonId === -1 || (args[0] as Pokemon).id === this.pokemonId); } getIcon(scene: BattleScene): Phaser.GameObjects.Container { @@ -180,12 +185,11 @@ export class PokemonBaseStatModifier extends PokemonModifier { } shouldApply(args: any[]): boolean { - console.log(args, this.pokemonId, args) return super.shouldApply(args) && args.length === 2 && args[1] instanceof Array; } apply(args: any[]): boolean { - args[1][this.stat] = Math.min(Math.floor(args[1][this.stat] * (1 + this.stackCount * 0.1)), 999999); + args[1][this.stat] = Math.min(Math.floor(args[1][this.stat] * (1 + this.stackCount * 0.2)), 999999); return true; } @@ -215,10 +219,6 @@ export abstract class ConsumablePokemonModifier extends PokemonModifier { add(_modifierBar: ModifierBar, _modifiers: Modifier[]): boolean { return true; } - - shouldApply(args: any[]): boolean { - return args.length === 1 && args[0] instanceof Pokemon && (this.pokemonId === -1 || (args[0] as Pokemon).id === this.pokemonId); - } } export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { @@ -266,12 +266,26 @@ export class ExpBoosterModifier extends Modifier { } apply(args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = Math.floor((args[0] as Utils.IntegerHolder).value * (1 + (this.stackCount * (this.boostMultiplier)))); + (args[0] as Utils.NumberHolder).value = Math.floor((args[0] as Utils.NumberHolder).value * (1 + (this.stackCount * (this.boostMultiplier)))); return true; } } +export class ExpShareModifier extends Modifier { + constructor(type: ModifierType) { + super(type); + } + + apply(_args: any[]): boolean { + return true; + } + + getMaxStackCount(): integer { + return 5; + } +} + export class ShinyRateBoosterModifier extends Modifier { constructor(type: ModifierType) { super(type); @@ -295,6 +309,10 @@ export class ShinyRateBoosterModifier extends Modifier { return true; } + + getMaxStackCount(): integer { + return 5; + } } export class ExtraModifierModifier extends Modifier { @@ -361,7 +379,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { constructor(name: string, restorePercent: integer, newModifierFunc?: Function, iconImage?: string) { super(name, `Restore ${restorePercent} HP or ${restorePercent}% HP for one POKéMON, whichever is higher`, - newModifierFunc || ((_type, args) => new PokemonHpRestoreModifier(this, args[0], this.restorePercent, false)), + newModifierFunc || ((_type, args) => new PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePercent, false)), (pokemon: PlayerPokemon) => { if (pokemon.hp >= pokemon.getMaxHp()) return PartyUiHandler.NoEffectMessage; @@ -374,7 +392,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { export class PokemonReviveModifierType extends PokemonHpRestoreModifierType { constructor(name: string, restorePercent: integer, iconImage?: string) { - super(name, restorePercent, (_type, args) => new PokemonHpRestoreModifier(this, args[0], this.restorePercent, true), iconImage); + super(name, restorePercent, (_type, args) => new PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePercent, true), iconImage); this.description = `Revive one POKéMON and restore ${restorePercent}% HP`; this.selectFilter = (pokemon: PlayerPokemon) => { @@ -389,7 +407,7 @@ export class PokemonBaseStatBoosterModifierType extends PokemonModifierType { private stat: Stat; constructor(name: string, stat: Stat, _iconImage?: string) { - super(name, `Increases one POKéMON's base ${getStatName(stat)} by 10%` , (_type, args) => new PokemonBaseStatModifier(this, args[0], this.stat)); + super(name, `Increases one POKéMON's base ${getStatName(stat)} by 20%` , (_type, args) => new PokemonBaseStatModifier(this, (args[0] as PlayerPokemon).id, this.stat)); this.stat = stat; } @@ -439,23 +457,27 @@ const modifierPool = { const thresholdPartyMemberCount = party.filter(p => p.getHpRatio() <= 0.75).length; return Math.ceil(thresholdPartyMemberCount / 3); }), + ].map(m => { m.setTier(ModifierTier.COMMON); return m; }), + [ModifierTier.GREAT]: [ + new WeightedModifierType(new AddPokeballModifierType(PokeballType.GREAT_BALL, 5, 'gb'), 3), + new WeightedModifierType(new PokemonReviveModifierType('REVIVE', 50), (party: Array) => { + const faintedPartyMemberCount = party.filter(p => !p.hp).length; + return faintedPartyMemberCount * 3; + }), + new WeightedModifierType(new PokemonReviveModifierType('MAX REVIVE', 100), (party: Array) => { + const faintedPartyMemberCount = party.filter(p => !p.hp).length; + return faintedPartyMemberCount; + }), + new WeightedModifierType(new PokemonHpRestoreModifierType('HYPER POTION', 80), (party: Array) => { + const thresholdPartyMemberCount = party.filter(p => p.getHpRatio() <= 0.6).length; + return thresholdPartyMemberCount; + }), new PokemonBaseStatBoosterModifierType('HP-UP', Stat.HP), new PokemonBaseStatBoosterModifierType('PROTEIN', Stat.ATK), new PokemonBaseStatBoosterModifierType('IRON', Stat.DEF), new PokemonBaseStatBoosterModifierType('CALCIUM', Stat.SPATK), new PokemonBaseStatBoosterModifierType('ZINC', Stat.SPDEF), new PokemonBaseStatBoosterModifierType('CARBOS', Stat.SPD) - ].map(m => { m.setTier(ModifierTier.COMMON); return m; }), - [ModifierTier.GREAT]: [ - new AddPokeballModifierType(PokeballType.GREAT_BALL, 5, 'gb'), - new WeightedModifierType(new PokemonReviveModifierType('REVIVE', 50), (party: Array) => { - const faintedPartyMemberCount = party.filter(p => !p.hp).length; - return faintedPartyMemberCount; - }), - new WeightedModifierType(new PokemonHpRestoreModifierType('HYPER POTION', 80), (party: Array) => { - const thresholdPartyMemberCount = party.filter(p => p.getHpRatio() <= 0.6).length; - return Math.ceil(thresholdPartyMemberCount / 3); - }) ].map(m => { m.setTier(ModifierTier.GREAT); return m; }), [ModifierTier.ULTRA]: [ new AddPokeballModifierType(PokeballType.ULTRA_BALL, 5, 'ub'), @@ -463,13 +485,14 @@ const modifierPool = { const thresholdPartyMemberCount = party.filter(p => p.getHpRatio() <= 0.5).length; return Math.ceil(thresholdPartyMemberCount / 3); }), - new ExpBoosterModifierType('LUCKY EGG', 25) - ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), - [ModifierTier.MASTER]: [ - new AddPokeballModifierType(PokeballType.MASTER_BALL, 1, 'mb'), new WeightedModifierType(new AllPokemonFullReviveModifierType('SACRED ASH'), (party: Array) => { return party.filter(p => !p.hp).length >= Math.ceil(party.length / 2) ? 1 : 0; }), + new ExpBoosterModifierType('LUCKY EGG', 25), + new ModifierType('EXP. SHARE', 'All POKéMON in your party gain an additional 10% of a battle\'s EXP. Points', (type, _args) => new ExpShareModifier(type), 'exp_share') + ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), + [ModifierTier.MASTER]: [ + new AddPokeballModifierType(PokeballType.MASTER_BALL, 1, 'mb'), new WeightedModifierType(new ModifierType('SHINY CHARM', 'Dramatically increases the chance of a wild POKéMON being shiny', (type, _args) => new ShinyRateBoosterModifier(type)), 2) ].map(m => { m.setTier(ModifierTier.MASTER); return m; }), [ModifierTier.LUXURY]: [ diff --git a/src/pokemon-evolutions.ts b/src/pokemon-evolutions.ts index 6decc2916..2b5258425 100644 --- a/src/pokemon-evolutions.ts +++ b/src/pokemon-evolutions.ts @@ -345,7 +345,7 @@ export const pokemonEvolutions = { new SpeciesEvolution(Species.KIRLIA, 20, null, null) ], [Species.KIRLIA]: [ - new SpeciesEvolution(Species.GARDEVOIR, 30, null, null), + new SpeciesEvolution(Species.GARDEVOIR, 30, null, new SpeciesEvolutionCondition((p: Pokemon) => !p.gender, true)), new SpeciesEvolution(Species.GALLADE, 1, "Dawn Stone", new SpeciesEvolutionCondition((p: Pokemon) => p.gender, true), SpeciesWildEvolutionRate.SLOW) ], [Species.SURSKIT]: [ diff --git a/src/pokemon.ts b/src/pokemon.ts index 73b81a311..e613feec9 100644 --- a/src/pokemon.ts +++ b/src/pokemon.ts @@ -9,7 +9,7 @@ import * as Utils from './utils'; import { getTypeDamageMultiplier } from './type'; import { getLevelTotalExp } from './exp'; import { Stat } from './pokemon-stat'; -import { PokemonBaseStatModifier as PokemonBaseStatBoosterModifier, ShinyRateBoosterModifier } from './modifier'; +import { ExpShareModifier, PokemonBaseStatModifier as PokemonBaseStatBoosterModifier, ShinyRateBoosterModifier } from './modifier'; import { PokeballType } from './pokeball'; export default abstract class Pokemon extends Phaser.GameObjects.Container { @@ -450,11 +450,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); } - getExpValue(victorLevel: integer): integer { - // Gen 1-4 formula - // return ((this.pokemon.baseExp * this.level) / 7) * (1 / 1) - // TODO: Update for exp share - return Math.floor(((this.species.baseExp * this.level) / 5) * (1 / 1) * ((Math.round(Math.sqrt(2 * this.level + 10)) * Math.pow(2 * this.level + 10, 2)) / (Math.round(Math.sqrt(this.level + victorLevel + 10)) * Math.pow(this.level + victorLevel + 10, 2)))) + 1; + getExpValue(victor: Pokemon): integer { + return ((this.species.baseExp * this.level) / 5) * ((Math.round(Math.sqrt(2 * this.level + 10)) * Math.pow(2 * this.level + 10, 2)) / (Math.round(Math.sqrt(this.level + victor.level + 10)) * Math.pow(this.level + victor.level + 10, 2))) + 1; } tint(color: number, alpha?: number, duration?: integer, ease?: string) { diff --git a/src/ui/uiHandler.ts b/src/ui/uiHandler.ts index 6927feac9..765c8c435 100644 --- a/src/ui/uiHandler.ts +++ b/src/ui/uiHandler.ts @@ -24,6 +24,10 @@ export default abstract class UiHandler { return this.scene.ui; } + getCursor(): integer { + return this.cursor; + } + setCursor(cursor: integer): boolean { const changed = this.cursor !== cursor; if (changed) diff --git a/src/utils.ts b/src/utils.ts index 7daa32272..15307b5c4 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -58,6 +58,13 @@ export function getEnumValues(enumType) { return Object.values(enumType).filter(v => !isNaN(parseInt(v.toString()))).map(v => parseInt(v.toString())); } +export class NumberHolder { + public value: number; + + constructor(value: number) { + this.value = value; + } +} export class IntegerHolder { public value: integer;